draft-ietf-dhc-dhcpv6-yang-05.txt   draft-ietf-dhc-dhcpv6-yang-06.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: June 26, 2018 I. Farrer Expires: September 5, 2018 I. Farrer
S. Zechlin S. Zechlin
Deutsche Telekom AG Deutsche Telekom AG
Z. He Z. He
Tsinghua University Tsinghua University
December 23, 2017 March 4, 2018
YANG Data Model for DHCPv6 Configuration YANG Data Model for DHCPv6 Configuration
draft-ietf-dhc-dhcpv6-yang-05 draft-ietf-dhc-dhcpv6-yang-06
Abstract Abstract
This document describes a YANG data model [RFC6020] for the This document describes a YANG data model [RFC6020] 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", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
skipping to change at page 1, line 42 skipping to change at page 1, line 42
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 June 26, 2018. This Internet-Draft will expire on September 5, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2018 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 Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3
2. DHCPv6 Tree Diagram . . . . . . . . . . . . . . . . . . . . . 3 2. DHCPv6 Tree Diagram . . . . . . . . . . . . . . . . . . . . . 3
2.1. DHCPv6 Server Tree Diagrams . . . . . . . . . . . . . . . 3 2.1. DHCPv6 Server Tree Diagrams . . . . . . . . . . . . . . . 3
2.2. DHCPv6 Relay Tree Diagrams . . . . . . . . . . . . . . . 16 2.2. DHCPv6 Relay Tree Diagrams . . . . . . . . . . . . . . . 16
2.3. DHCPv6 Client Tree Diagrams . . . . . . . . . . . . . . . 20 2.3. DHCPv6 Client Tree Diagrams . . . . . . . . . . . . . . . 19
3. DHCPv6 YANG Model . . . . . . . . . . . . . . . . . . . . . . 27 3. DHCPv6 YANG Model . . . . . . . . . . . . . . . . . . . . . . 27
3.1. DHCPv6 Server YANG Model . . . . . . . . . . . . . . . . 27 3.1. DHCPv6 Server YANG Model . . . . . . . . . . . . . . . . 27
3.2. DHCPv6 Relay YANG Model . . . . . . . . . . . . . . . . . 48 3.2. DHCPv6 Relay YANG Model . . . . . . . . . . . . . . . . . 45
3.3. DHCPv6 Client YANG Model . . . . . . . . . . . . . . . . 58 3.3. DHCPv6 Client YANG Model . . . . . . . . . . . . . . . . 55
3.4. DHCPv6 Options YANG Model . . . . . . . . . . . . . . . . 67 3.4. DHCPv6 Options YANG Model . . . . . . . . . . . . . . . . 62
4. Security Considerations (TBD) . . . . . . . . . . . . . . . . 98 3.5. DHCPv6 Types YANG Model . . . . . . . . . . . . . . . . . 91
5. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 98 4. Security Considerations (TBD) . . . . . . . . . . . . . . . . 95
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 98 5. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 96
7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 98 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 96
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 98 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 96
8.1. Normative References . . . . . . . . . . . . . . . . . . 98 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.2. Informative References . . . . . . . . . . . . . . . . . 99 8.1. Normative References . . . . . . . . . . . . . . . . . . 97
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 101 8.2. Informative References . . . . . . . . . . . . . . . . . 97
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 99
1. Introduction 1. Introduction
DHCPv6 [RFC3315] is widely used for supplying configuration and other DHCPv6 [RFC3315] 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 a DHCPv6 YANG data model, containing sub-modules for the defines a DHCPv6 YANG data model, containing sub-modules for the
configuration and management of DHCPv6 servers, relays and clients. configuration and management of DHCPv6 servers, relays and clients.
A single YANG model covering all of these elements provides an A single YANG model covering all of these elements provides an
operator with a common interface for the management of the entire operator with a common interface for the management of the entire
DHCPv6 deployment in their network. DHCPv6 deployment in their network.
skipping to change at page 3, line 34 skipping to change at page 3, line 36
A simplified graphical representation of the data model is provided A simplified graphical representation of the data model is provided
in this d cument. For a description of the symbols in these in this d cument. For a description of the symbols in these
diagrams, please refer to [I-D.ietf-netmod-yang-tree-diagrams]. diagrams, please refer to [I-D.ietf-netmod-yang-tree-diagrams].
2. DHCPv6 Tree Diagram 2. DHCPv6 Tree Diagram
2.1. DHCPv6 Server Tree Diagrams 2.1. DHCPv6 Server Tree Diagrams
module: ietf-dhcpv6-server module: ietf-dhcpv6-server
+--rw server! +--rw server!
+--rw server-config +--rw server-config
| +--rw serv-attributes | +--rw serv-attributes
| | +--rw name? string | | +--rw duid
| | +--rw duid | | | +--rw type-code? uint16
| | | +--rw type-code? uint16 | | | +--rw (duid-type)?
| | | +--rw (duid-type)? | | | +--:(duid-llt)
| | | +--:(duid-llt) | | | | +--rw duid-llt-hardware-type? uint16
| | | | +--rw duid-llt-hardware-type? uint16 | | | | +--rw duid-llt-time? yang:timeticks
| | | | +--rw duid-llt-time? yang:timeticks | | | | +--rw duid-llt-link-layer-addr? yang:mac-address
| | | | +--rw duid-llt-link-layer-addr? 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-addr? yang:mac-address
| | | | +--rw duid-ll-link-layer-addr? yang:mac-address | | | +--:(duid-uuid)
| | | +--:(duid-uuid) | | | | +--rw uuid? yang:uuid
| | | | +--rw uuid? yang:uuid | | | +--:(duid-unknown)
| | | +--:(duid-invalid) | | | +--rw data? binary
| | | +--rw data? binary | | +--rw name? string
| | +--rw ipv6-address* inet:ipv6-address | | +--rw description? string
| | +--rw description? string | | +--rw ipv6-address* inet:ipv6-address
| | +--rw pd-function boolean | | +--rw interfaces-config* if:interface-ref
| | +--rw stateless-service boolean | | +--rw vendor-info
| | +--rw rapid-commit boolean | | +--rw ent-num uint32
| | +--rw interfaces-config* string | | +--rw data* string
| | +--rw vendor-info | +--rw option-sets
| | +--rw ent-num uint32 | | +--rw option-set* [option-set-id]
| | +--rw data* string | | +--rw option-set-id uint32
| +--rw option-sets | | +--rw server-unicast-option! {server-unicast-op}?
| | +--rw option-set* [id] | | | +--rw server-address? inet:ipv6-address
| | +--rw id uint32 | | +--rw sip-server-domain-name-list-option!
| | +--rw server-unicast-option! {server-unicast-op}? {sip-server-domain-name-list-op}?
| | | +--rw server-address? inet:ipv6-address | | | +--rw sip-serv-domain-name string
| | +--rw sip-server-domain-name-list-option! | | +--rw sip-server-address-list-option!
{sip-server-domain-name-list-op}? {sip-server-address-list-op}?
| | | +--rw sip-serv-domain-name string | | | +--rw sip-server* [sip-serv-id]
| | +--rw sip-server-address-list-option! {sip-server-address-list-op}? | | | +--rw sip-serv-id uint8
| | | +--rw sip-server* [sip-serv-id] | | | +--rw sip-serv-addr inet:ipv6-address
| | | +--rw sip-serv-id uint8 | | +--rw dns-servers-option! {dns-servers-op}?
| | | +--rw sip-serv-addr inet:ipv6-address | | | +--rw dns-server* [dns-serv-id]
| | +--rw dns-config-option! {dns-config-op}? | | | +--rw dns-serv-id uint8
| | | +--rw dns-server* [dns-serv-id] | | | +--rw dns-serv-addr inet:ipv6-address
| | | +--rw dns-serv-id uint8 | | +--rw domain-searchlist-option! {domain-searchlist-op}?
| | | +--rw dns-serv-addr inet:ipv6-address | | | +--rw domain-searchlist* [domain-searchlist-id]
| | +--rw domain-searchlist-option! {domain-searchlist-op}? | | | +--rw domain-searchlist-id uint8
| | | +--rw domain-searchlist* [domain-searchlist-id] | | | +--rw domain-search-list-entry string
| | | +--rw domain-searchlist-id uint8 | | +--rw nis-config-option! {nis-config-op}?
| | | +--rw domain-search-list-entry string | | | +--rw nis-server* [nis-serv-id]
| | +--rw nis-config-option! {nis-config-op}? | | | +--rw nis-serv-id uint8
| | | +--rw nis-server* [nis-serv-id] | | | +--rw nis-serv-addr inet:ipv6-address
| | | +--rw nis-serv-id uint8 | | +--rw nis-plus-config-option! {nis-plus-config-op}?
| | | +--rw nis-serv-addr inet:ipv6-address | | | +--rw nis-plus-server* [nis-plus-serv-id]
| | +--rw nis-plus-config-option! {nis-plus-config-op}? | | | +--rw nis-plus-serv-id uint8
| | | +--rw nis-plus-server* [nis-plus-serv-id] | | | +--rw nis-plus-serv-addr inet:ipv6-address
| | | +--rw nis-plus-serv-id uint8 | | +--rw nis-domain-name-option! {nis-domain-name-op}?
| | | +--rw nis-plus-serv-addr inet:ipv6-address | | | +--rw nis-domain-name? string
| | +--rw nis-domain-name-option! {nis-domain-name-op}? | | +--rw nis-plus-domain-name-option!
| | | +--rw nis-domain-name? string {nis-plus-domain-name-op}?
| | +--rw nis-plus-domain-name-option!{nis-plus-domain-name-op}? | | | +--rw nis-plus-domain-name? string
| | | +--rw nis-plus-domain-name? string | | +--rw sntp-server-option! {sntp-server-op}?
| | +--rw sntp-server-option! {sntp-server-op}? | | | +--rw sntp-server* [sntp-serv-id]
| | | +--rw sntp-server* [sntp-serv-id] | | | +--rw sntp-serv-id uint8
| | | +--rw sntp-serv-id uint8 | | | +--rw sntp-serv-addr inet:ipv6-address
| | | +--rw sntp-serv-addr inet:ipv6-address | | +--rw info-refresh-time-option! {info-refresh-time-op}?
| | +--rw info-refresh-time-option! {info-refresh-time-op}? | | | +--rw info-refresh-time yang:timeticks
| | | +--rw info-refresh-time yang:timeticks | | +--rw client-fqdn-option! {client-fqdn-op}?
| | +--rw client-fqdn-option! {client-fqdn-op}? | | | +--rw server-initiate-update boolean
| | | +--rw server-initiate-update boolean | | | +--rw client-initiate-update boolean
| | | +--rw client-initiate-update boolean | | | +--rw modify-name-from-cli boolean
| | | +--rw modify-name-from-cli boolean | | +--rw posix-timezone-option! {posix-timezone-op}?
| | +--rw posix-timezone-option! {posix-timezone-op}? | | | +--rw tz-posix string
| | | +--rw tz-posix string | | +--rw tzdb-timezone-option! {tzdb-timezone-op}?
| | +--rw tzdb-timezone-option! {tzdb-timezone-op}? | | | +--rw tz-database string
| | | +--rw tz-database string | | +--rw ntp-server-option! {ntp-server-op}?
| | +--rw ntp-server-option! {ntp-server-op}? | | | +--rw ntp-server* [ntp-serv-id]
| | | +--rw ntp-server* [ntp-serv-id] | | | +--rw ntp-serv-id uint8
| | | +--rw ntp-serv-id uint8 | | | +--rw (ntp-time-source-suboption)?
| | | +--rw (ntp-time-source-suboption)? | | | +--:(server-address)
| | | +--:(server-address) | | | | +--rw ntp-serv-addr-suboption*
| | | | +--rw ntp-serv-addr-suboption* inet:ipv6-address inet:ipv6-address
| | | +--:(server-multicast-address) | | | +--:(server-multicast-address)
| | | | +--rw ntp-serv-mul-addr-suboption* inet:ipv6-address | | | | +--rw ntp-serv-mul-addr-suboption*
| | | +--:(server-fqdn) inet:ipv6-address
| | | +--rw ntp-serv-fqdn-suboption* string | | | +--:(server-fqdn)
| | +--rw boot-file-url-option! {boot-file-url-op}? | | | +--rw ntp-serv-fqdn-suboption* string
| | | +--rw boot-file* [boot-file-id] | | +--rw boot-file-url-option! {boot-file-url-op}?
| | | +--rw boot-file-id uint8 | | | +--rw boot-file* [boot-file-id]
| | | +--rw suitable-arch-type* uint16 | | | +--rw boot-file-id uint8
| | | +--rw suitable-net-if* uint32 | | | +--rw suitable-arch-type* uint16
| | | +--rw boot-file-url string | | | +--rw suitable-net-if* uint32
| | +--rw boot-file-param-option! {boot-file-param-op}? | | | +--rw boot-file-url string
| | | +--rw boot-file-paras* [para-id] | | +--rw boot-file-param-option! {boot-file-param-op}?
| | | +--rw para-id uint8 | | | +--rw boot-file-paras* [para-id]
| | | +--rw parameter string | | | +--rw para-id uint8
| | +--rw aftr-name-option! {aftr-name-op}? | | | +--rw parameter string
| | | +--rw tunnel-endpoint-name string | | +--rw aftr-name-option! {aftr-name-op}?
| | +--rw kbr-default-name-option! {kbr-default-name-op}? | | | +--rw tunnel-endpoint-name string
| | | +--rw default-realm-name string | | +--rw kbr-default-name-option! {kbr-default-name-op}?
| | +--rw kbr-kdc-option! {kbr-kdc-op}? | | | +--rw default-realm-name string
| | | +--rw kdc-info* [kdc-id] | | +--rw kbr-kdc-option! {kbr-kdc-op}?
| | | +--rw kdc-id uint8 | | | +--rw kdc-info* [kdc-id]
| | | +--rw priority uint16 | | | +--rw kdc-id uint8
| | | +--rw weight uint16 | | | +--rw priority uint16
| | | +--rw transport-type uint8 | | | +--rw weight uint16
| | | +--rw port-number uint16 | | | +--rw transport-type uint8
| | | +--rw kdc-ipv6-addr inet:ipv6-address | | | +--rw port-number uint16
| | | +--rw realm-name string | | | +--rw kdc-ipv6-addr inet:ipv6-address
| | +--rw sol-max-rt-option! {sol-max-rt-op}? | | | +--rw realm-name string
| | | +--rw sol-max-rt-value yang:timeticks | | +--rw sol-max-rt-option! {sol-max-rt-op}?
| | +--rw inf-max-rt-option! {inf-max-rt-op}? | | | +--rw sol-max-rt-value yang:timeticks
| | | +--rw inf-max-rt-value yang:timeticks | | +--rw inf-max-rt-option! {inf-max-rt-op}?
| | +--rw addr-selection-option! {addr-selection-op}? | | | +--rw inf-max-rt-value yang:timeticks
| | | +--rw a-bit-set boolean | | +--rw addr-selection-option! {addr-selection-op}?
| | | +--rw p-bit-set boolean | | | +--rw a-bit-set boolean
| | | +--rw policy-table* [policy-id] | | | +--rw p-bit-set boolean
| | | +--rw policy-id uint8 | | | +--rw policy-table* [policy-id]
| | | +--rw label uint8 | | | +--rw policy-id uint8
| | | +--rw precedence uint8 | | | +--rw label uint8
| | | +--rw prefix-len uint8 | | | +--rw precedence uint8
| | | +--rw prefix inet:ipv6-prefix | | | +--rw prefix-len uint8
| | +--rw pcp-server-option! {pcp-server-op}? | | | +--rw prefix inet:ipv6-prefix
| | | +--rw pcp-server* [pcp-serv-id] | | +--rw pcp-server-option! {pcp-server-op}?
| | | +--rw pcp-serv-id uint8 | | | +--rw pcp-server* [pcp-serv-id]
| | | +--rw pcp-serv-addr inet:ipv6-address | | | +--rw pcp-serv-id uint8
| | +--rw s46-rule-option! {s46-rule-op}? | | | +--rw pcp-serv-addr inet:ipv6-address
| | | +--rw s46-rule* [rule-id] | | +--rw s46-rule-option! {s46-rule-op}?
| | | +--rw rule-id uint8 | | | +--rw s46-rule* [rule-id]
| | | +--rw rule-type enumeration | | | +--rw rule-id uint8
| | | +--rw prefix4-len uint8 | | | +--rw rule-type enumeration
| | | +--rw ipv4-prefix inet:ipv4-prefix | | | +--rw prefix4-len uint8
| | | +--rw prefix6-len uint8 | | | +--rw ipv4-prefix inet:ipv4-prefix
| | | +--rw ipv6-prefix inet:ipv6-prefix | | | +--rw prefix6-len uint8
| | | +--rw port-parameter | | | +--rw ipv6-prefix inet:ipv6-prefix
| | | +--rw offset uint8 | | | +--rw port-parameter
| | | +--rw psid-len uint8 | | | +--rw offset uint8
| | | +--rw psid uint16 | | | +--rw psid-len uint8
| | +--rw s46-br-option! {s46-br-op}? | | | +--rw psid uint16
| | | +--rw br* [br-id] | | +--rw s46-br-option! {s46-br-op}?
| | | +--rw br-id uint8 | | | +--rw br* [br-id]
| | | +--rw br-ipv6-addr inet:ipv6-address | | | +--rw br-id uint8
| | +--rw s46-dmr-option! {s46-dmr-op}? | | | +--rw br-ipv6-addr inet:ipv6-address
| | | +--rw dmr* [dmr-id] | | +--rw s46-dmr-option! {s46-dmr-op}?
| | | +--rw dmr-id uint8 | | | +--rw dmr* [dmr-id]
| | | +--rw dmr-prefix-len uint8 | | | +--rw dmr-id uint8
| | | +--rw dmr-ipv6-prefix inet:ipv6-prefix | | | +--rw dmr-prefix-len uint8
| | +--rw s46-v4-v6-binding-option! {s46-v4-v6-binding-op}? | | | +--rw dmr-ipv6-prefix inet:ipv6-prefix
| | | +--rw ce* [ce-id] | | +--rw s46-v4-v6-binding-option! {s46-v4-v6-binding-op}?
| | | +--rw ce-id uint8 | | | +--rw ce* [ce-id]
| | | +--rw ipv4-addr inet:ipv4-address | | | +--rw ce-id uint8
| | | +--rw bind-prefix6-len uint8 | | | +--rw ipv4-addr inet:ipv4-address
| | | +--rw bind-ipv6-prefix inet:ipv6-prefix | | | +--rw bind-prefix6-len uint8
| | | +--rw port-parameter | | | +--rw bind-ipv6-prefix inet:ipv6-prefix
| | | +--rw offset uint8 | | | +--rw port-parameter
| | | +--rw psid-len uint8 | | | +--rw offset uint8
| | | +--rw psid uint16 | | | +--rw psid-len uint8
| | +--rw operator-option-ipv6-address!{operator-op-ipv6-address}? | | | +--rw psid uint16
| | | +--rw operator-ipv6-addr* [operator-ipv6-addr-id] | | +--rw operator-option-ipv6-address!
| | | +--rw operator-ipv6-addr-id uint8 {operator-op-ipv6-address}?
| | | +--rw operator-ipv6-addr inet:ipv6-address
| | +--rw operator-option-single-flag!{operator-op-single-flag}?
| | | +--rw flag* [flag-id]
| | | +--rw flag-id uint8
| | | +--rw flag-value boolean
| | +--rw operator-option-ipv6-prefix!{operator-op-ipv6-prefix}?
| | | +--rw operator-ipv6-prefix* [operator-ipv6-prefix-id]
| | | +--rw operator-ipv6-prefix-id uint8
| | | +--rw operator-ipv6-prefix6-len uint8
| | | +--rw operator-ipv6-prefix inet:ipv6-prefix
| | +--rw operator-option-int32! {operator-op-int32}?
| | | +--rw int32val* [int32val-id]
| | | +--rw int32val-id uint8
| | | +--rw int32val uint32
| | +--rw operator-option-int16! {operator-op-int16}?
| | | +--rw int16val* [int16val-id]
| | | +--rw int16val-id uint8
| | | +--rw int16val uint16
| | +--rw operator-option-int8! {operator-op-int8}?
| | | +--rw int8val* [int8val-id]
| | | +--rw int8val-id uint8
| | | +--rw int8val uint8
| | +--rw operator-option-uri! {operator-op-uri}?
| | | +--rw uri* [uri-id]
| | | +--rw uri-id uint8
| | | +--rw uri string
| | +--rw operator-option-textstring! {operator-op-textstring}?
| | | +--rw textstring* [textstring-id]
| | | +--rw textstring-id uint8
| | | +--rw textstring string
| | +--rw operator-option-var-data! {operator-op-var-data}?
| | | +--rw int32val* [var-data-id]
| | | +--rw var-data-id uint8
| | | +--rw var-data binary
| | +--rw operator-option-dns-wire! {operator-op-dns-wire}?
| | +--rw operator-option-dns-wire* [operator-option-dns-wire-id]
| | +--rw operator-option-dns-wire-id uint8
| | +--rw operator-option-dns-wire binary
| +--rw network-ranges
| | +--rw network-range* [network-range-id]
| | +--rw network-range-id uint32
| | +--rw network-description string
| | +--rw network-prefix inet:ipv6-prefix
| | +--rw inherit-option-set boolean
| | +--rw option-set-id?
-> /server/server-config/option-sets/option-set/id
| | +--rw reserved-addresses
| | | +--rw static-binding* [cli-id]
| | | | +--rw cli-id uint32
| | | | +--rw duid
| | | | | +--rw type-code? uint16
| | | | | +--rw (duid-type)?
| | | | | +--:(duid-llt)
| | | | | | +--rw duid-llt-hardware-type? uint16
| | | | | | +--rw duid-llt-time? yang:timeticks
| | | | | | +--rw duid-llt-link-layer-addr? yang:mac-address
| | | | | +--:(duid-en)
| | | | | | +--rw duid-en-enterprise-number? uint32
| | | | | | +--rw duid-en-identifier? string
| | | | | +--:(duid-ll)
| | | | | | +--rw duid-ll-hardware-type? uint16
| | | | | | +--rw duid-ll-link-layer-addr? yang:mac-address
| | | | | +--:(duid-uuid)
| | | | | | +--rw uuid? yang:uuid
| | | | | +--:(duid-invalid)
| | | | | +--rw data? binary
| | | | +--rw reserv-addr* inet:ipv6-address
| | | +--rw other-reserv-addr* inet:ipv6-address
| | +--rw reserved-prefixes
| | | +--rw static-binding* [cli-id]
| | | | +--rw cli-id uint32
| | | | +--rw duid
| | | | | +--rw type-code? uint16
| | | | | +--rw (duid-type)?
| | | | | +--:(duid-llt)
| | | | | | +--rw duid-llt-hardware-type? uint16
| | | | | | +--rw duid-llt-time? yang:timeticks
| | | | | | +--rw duid-llt-link-layer-addr? yang:mac-address
| | | | | +--:(duid-en)
| | | | | | +--rw duid-en-enterprise-number? uint32
| | | | | | +--rw duid-en-identifier? string
| | | | | +--:(duid-ll)
| | | | | | +--rw duid-ll-hardware-type? uint16
| | | | | | +--rw duid-ll-link-layer-addr? yang:mac-address
| | | | | +--:(duid-uuid)
| | | | | | +--rw uuid? yang:uuid
| | | | | +--:(duid-invalid)
| | | | | +--rw data? binary
| | | | +--rw reserv-prefix-len uint8
| | | | +--rw reserv-prefix inet:ipv6-prefix
| | | +--rw exclude-prefix-len uint8
| | | +--rw exclude-prefix inet:ipv6-prefix
| | | +--rw other-reserv-prefix* [reserv-id]
| | | +--rw reserv-id uint32
| | | +--rw prefix-len uint8
| | | +--rw prefix inet:ipv6-prefix
| | +--rw address-pools
| | | +--rw address-pool* [pool-id]
| | | +--rw pool-id uint32
| | | +--rw pool-prefi inet:ipv6-prefix
| | | +--rw start-address inet:ipv6-address-no-zone
| | | +--rw end-address inet:ipv6-address-no-zone
| | | +--rw renew-time yang:timeticks
| | | +--rw rebind-time yang:timeticks
| | | +--rw preferred-lifetime yang:timeticks
| | | +--rw valid-lifetime yang:timeticks
| | | +--rw max-address-utilization-ratio threshold
| | | +--rw inherit-option-set boolean
| | | +--rw option-set-id
-> /server/server-config/option-sets/option-set/id
| | +--rw prefix-pools
| | | +--rw prefix-pool* [pool-id]
| | | +--rw pool-id uint32
| | | +--rw prefix inet:ipv6-prefix
| | | +--rw prefix-length uint8
| | | +--rw renew-time yang:timeticks
| | | +--rw rebind-time yang:timeticks
| | | +--rw preferred-lifetime yang:timeticks
| | | +--rw valid-lifetime yang:timeticks
| | | +--rw max-prefix-utilization-ratio threshold
| | | +--rw inherit-option-set boolean
| | | +--rw option-set-id?
-> /server/server-config/option-sets/option-set/id
| | +--rw hosts
| | +--rw host* [cli-id]
| | +--rw cli-id uint32
| | +--rw duid
| | | +--rw type-code? uint16
| | | +--rw (duid-type)?
| | | +--:(duid-llt)
| | | | +--rw duid-llt-hardware-type? uint16
| | | | +--rw duid-llt-time? yang:timeticks
| | | | +--rw duid-llt-link-layer-addr? yang:mac-address
| | | +--:(duid-en)
| | | | +--rw duid-en-enterprise-number? uint32
| | | | +--rw duid-en-identifier? string
| | | +--:(duid-ll)
| | | | +--rw duid-ll-hardware-type? uint16
| | | | +--rw duid-ll-link-layer-addr? yang:mac-address
| | | +--:(duid-uuid)
| | | | +--rw uuid? yang:uuid
| | | +--:(duid-invalid)
| | | +--rw data? binary
| | +--rw inherit-option-set boolean
| | +--rw option-set-id?
-> /server/server-config/option-sets/option-set/id
| | +--rw nis-domain-name? string
| | +--rw nis-plus-domain-name? string
| +--rw relay-opaque-paras
| | +--rw relays* [relay-name]
| | +--rw relay-name string
| | +--rw interface-info* [if-name]
| | | +--rw if-name string
| | | +--rw interface-id string
| | +--rw subscribers* [subscriber]
| | | +--rw subscriber uint32
| | | +--rw subscriber-id string
| | +--rw remote-host* [ent-num]
| | +--rw ent-num uint32
| | +--rw remote-id string
| +--rw rsoo-enabled-options
| +--rw rsoo-enabled-option* [option-code]
| +--rw option-code uint16
| +--rw description string
+--ro server-state
+--ro network-ranges
| +--ro network-range* [network-range-id]
| +--ro network-range-id uint32
| +--ro address-pools
| | +--ro address-pool* [pool-id]
| | | +--ro pool-id uint32
| | | +--ro total-ipv6-count uint64
| | | +--ro used-ipv6-count uint64
| | | +--ro address-utilization-ratio uint16
| | +--ro binding-info* [cli-id]
| | +--ro cli-id uint32
| | +--ro duid
| | | +--ro type-code? uint16
| | | +--ro (duid-type)?
| | | +--:(duid-llt)
| | | | +--ro duid-llt-hardware-type? uint16
| | | | +--ro duid-llt-time? yang:timeticks
| | | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | | +--:(duid-en)
| | | | +--ro duid-en-enterprise-number? uint32
| | | | +--ro duid-en-identifier? string
| | | +--:(duid-ll)
| | | | +--ro duid-ll-hardware-type? uint16
| | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | | +--:(duid-uuid)
| | | | +--ro uuid? yang:uuid
| | | +--:(duid-invalid)
| | | +--ro data? binary
| | +--ro cli-ia* [iaid]
| | +--ro ia-type string
| | +--ro iaid uint32
| | +--ro cli-addr* inet:ipv6-address
| | +--ro pool-id uint32
| +--ro prefix-pools
| | +--ro prefix-pool* [pool-id]
| | | +--ro pool-id uint32
| | | +--ro prefix-utilization-ratio uint16
| | +--ro binding-info* [cli-id]
| | +--ro cli-id uint32
| | +--ro duid
| | | +--ro type-code? uint16
| | | +--ro (duid-type)?
| | | +--:(duid-llt)
| | | | +--ro duid-llt-hardware-type? uint16
| | | | +--ro duid-llt-time? yang:timeticks
| | | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | | +--:(duid-en)
| | | | +--ro duid-en-enterprise-number? uint32
| | | | +--ro duid-en-identifier? string
| | | +--:(duid-ll)
| | | | +--ro duid-ll-hardware-type? uint16
| | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | | +--:(duid-uuid)
| | | | +--ro uuid? yang:uuid
| | | +--:(duid-invalid)
| | | +--ro data? binary
| | +--ro cli-iapd* [iaid]
| | +--ro iaid uint32
| | +--ro cli-prefix* inet:ipv6-prefix
| | +--ro cli-prefix-len* uint8
| | +--ro pool-id uint32
| +--ro address-prefix-assign-param* [cli-id]
| +--ro cli-id uint32
| +--ro source-ipv6-addr? inet:ipv6-address
| +--ro duid
| | +--ro type-code? uint16
| | +--ro (duid-type)?
| | +--:(duid-llt)
| | | +--ro duid-llt-hardware-type? uint16
| | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | +--:(duid-en)
| | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-en-identifier? string
| | +--:(duid-ll)
| | | +--ro duid-ll-hardware-type? uint16
| | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid
| | +--:(duid-invalid)
| | +--ro data? binary
| +--ro iaid* uint32
| +--ro preferred-addr* inet:ipv6-address
| +--ro preferred-prefix-len* uint8
| +--ro client-fqdn? string
| +--ro client-link-layer-addr? uint16
| +--ro client-enterprise-number? uint32
| +--ro client-sys-archi-type* uint16
+--ro packet-stats
+--ro solicit-count uint32
+--ro request-count uint32
+--ro renew-count uint32
+--ro rebind-count uint32
+--ro decline-count uint32
+--ro release-count uint32
+--ro info-req-count uint32
+--ro advertise-count uint32
+--ro confirm-count uint32
+--ro reply-count uint32
+--ro reconfigure-count uint32
+--ro relay-forward-count uint32
+--ro relay-reply-count uint32
notifications: | | | +--rw operator-ipv6-addr* [operator-ipv6-addr-id]
+---n notifications | | | +--rw operator-ipv6-addr-id uint8
+--ro dhcpv6-server-event | | | +--rw operator-ipv6-addr inet:ipv6-address
+--ro pool-running-out | | +--rw operator-option-single-flag!
| +--ro max-address-utilization-ratio uint16 {operator-op-single-flag}?
| +--ro address-utilization-ratio uint16 | | | +--rw flag* [flag-id]
| +--ro max-prefix-utilization-ratio uint16 | | | +--rw flag-id uint8
| +--ro prefix-utilization-ratio uint16 | | | +--rw flag-value boolean
| +--ro duid | | +--rw operator-option-ipv6-prefix!
| | +--ro type-code? uint16 {operator-op-ipv6-prefix}?
| | +--ro (duid-type)? | | | +--rw operator-ipv6-prefix* [operator-ipv6-prefix-id]
| | +--:(duid-llt) | | | +--rw operator-ipv6-prefix-id uint8
| | | +--ro duid-llt-hardware-type? uint16 | | | +--rw operator-ipv6-prefix6-len uint8
| | | +--ro duid-llt-time? yang:timeticks | | | +--rw operator-ipv6-prefix inet:ipv6-prefix
| | | +--ro duid-llt-link-layer-addr? yang:mac-address | | +--rw operator-option-int32! {operator-op-int32}?
| | +--:(duid-en) | | | +--rw int32val* [int32val-id]
| | | +--ro duid-en-enterprise-number? uint32 | | | +--rw int32val-id uint8
| | | +--ro duid-en-identifier? string | | | +--rw int32val uint32
| | +--:(duid-ll) | | +--rw operator-option-int16! {operator-op-int16}?
| | | +--ro duid-ll-hardware-type? uint16 | | | +--rw int16val* [int16val-id]
| | | +--ro duid-ll-link-layer-addr? yang:mac-address | | | +--rw int16val-id uint8
| | +--:(duid-uuid) | | | +--rw int16val uint16
| | | +--ro uuid? yang:uuid | | +--rw operator-option-int8! {operator-op-int8}?
| | +--:(duid-invalid) | | | +--rw int8val* [int8val-id]
| | +--ro data? binary | | | +--rw int8val-id uint8
| +--ro serv-name? string | | | +--rw int8val uint8
| +--ro pool-name string | | +--rw operator-option-uri! {operator-op-uri}?
+--ro invalid-client-detected | | | +--rw uri* [uri-id]
+--ro duid | | | +--rw uri-id uint8
| +--ro type-code? uint16 | | | +--rw uri string
| +--ro (duid-type)? | | +--rw operator-option-textstring! {operator-op-textstring}?
| +--:(duid-llt) | | | +--rw textstring* [textstring-id]
| | +--ro duid-llt-hardware-type? uint16 | | | +--rw textstring-id uint8
| | +--ro duid-llt-time? yang:timeticks | | | +--rw textstring string
| | +--ro duid-llt-link-layer-addr? yang:mac-address | | +--rw operator-option-var-data! {operator-op-var-data}?
| +--:(duid-en) | | | +--rw int32val* [var-data-id]
| | +--ro duid-en-enterprise-number? uint32 | | | +--rw var-data-id uint8
| | +--ro duid-en-identifier? string | | | +--rw var-data binary
| +--:(duid-ll) | | +--rw operator-option-dns-wire! {operator-op-dns-wire}?
| | +--ro duid-ll-hardware-type? uint16 | | +--rw operator-option-dns-wire*
| | +--ro duid-ll-link-layer-addr? yang:mac-address [operator-option-dns-wire-id]
| +--:(duid-uuid) | | +--rw operator-option-dns-wire-id uint8
| | +--ro uuid? yang:uuid | | +--rw operator-option-dns-wire binary
| +--:(duid-invalid) | +--rw network-ranges
| +--ro data? binary | | +--rw option-set-id?
+--ro description? string -> /server/server-config/option-sets/option-set/option-set-id
| | +--rw network-range* [network-range-id]
| | +--rw network-range-id uint32
| | +--rw network-description string
| | +--rw network-prefix inet:ipv6-prefix
| | +--rw option-set-id?
-> /server/server-config/option-sets/option-set/option-set-id
| | +--rw address-pools
| | | +--rw address-pool* [pool-id]
| | | +--rw pool-id uint32
| | | +--rw pool-prefix inet:ipv6-prefix
| | | +--rw start-address inet:ipv6-address-no-zone
| | | +--rw end-address inet:ipv6-address-no-zone
| | | +--rw client-class? string
| | | +--rw valid-lifetime yang:timeticks
| | | +--rw renew-time yang:timeticks
| | | +--rw rebind-time yang:timeticks
| | | +--rw preferred-lifetime yang:timeticks
| | | +--rw rapid-commit boolean
| | | +--rw max-address-count threshold
| | | +--rw option-set-id
-> /server/server-config/option-sets/option-set/option-set-id
| | +--rw pd-pools
| | | +--rw pd-pool* [pool-id]
| | | +--rw pool-id uint32
| | | +--rw prefix inet:ipv6-prefix
| | | +--rw prefix-length uint8
| | | +--rw client-class? string
| | | +--rw valid-lifetime yang:timeticks
| | | +--rw renew-time yang:timeticks
| | | +--rw rebind-time yang:timeticks
| | | +--rw preferred-lifetime yang:timeticks
| | | +--rw rapid-commit boolean
| | | +--rw max-pd-space-utlization threshold
| | | +--rw option-set-id
-> /server/server-config/option-sets/option-set/option-set-id
| | +--rw host-reservations
| | +--rw host-reservation* [cli-id]
| | +--rw cli-id uint32
| | +--rw (client-identifier)?
| | | +--:(duid)
| | | | +--rw type-code? uint16
| | | | +--rw (duid-type)?
| | | | +--:(duid-llt)
| | | | | +--rw duid-llt-hardware-type? uint16
| | | | | +--rw duid-llt-time?
yang:timeticks
| | | | | +--rw duid-llt-link-layer-addr?
yang:mac-address
| | | | +--:(duid-en)
| | | | | +--rw duid-en-enterprise-number? uint32
| | | | | +--rw duid-en-identifier? string
| | | | +--:(duid-ll)
| | | | | +--rw duid-ll-hardware-type? uint16
| | | | | +--rw duid-ll-link-layer-addr?
yang:mac-address
| | | | +--:(duid-uuid)
| | | | | +--rw uuid? yang:uuid
| | | | +--:(duid-unknown)
| | | | +--rw data? binary
| | | +--:(hw-address)
| | | +--rw hardware-address? yang:mac-address
| | +--rw reserv-addr* inet:ipv6-address
| | +--rw prefix-reservation* [reserv-prefix-id]
| | | +--rw reserv-prefix-id uint32
| | | +--rw reserv-prefix inet:ipv6-prefix
| | | +--rw reserv-prefix-len uint8
| | +--rw hostname? string
| | +--rw option-set-id?
-> /server/server-config/option-sets/option-set/option-set-id
| +--rw relay-opaque-paras
| | +--rw relays* [relay-name]
| | +--rw relay-name string
| | +--rw interface-info* [if-name]
| | | +--rw if-name string
| | | +--rw interface-id string
| | +--rw subscribers* [subscriber]
| | | +--rw subscriber uint32
| | | +--rw subscriber-id string
| | +--rw remote-host* [ent-num]
| | +--rw ent-num uint32
| | +--rw remote-id string
| +--rw rsoo-enabled-options
| +--rw rsoo-enabled-option* [option-code]
| +--rw option-code uint16
| +--rw description string
+--ro server-state
+--ro network-ranges
| +--ro network-range* [network-range-id]
| +--ro network-range-id uint32
| +--ro address-pools
| | +--ro address-pool* [pool-id]
| | | +--ro pool-id uint32
| | | +--ro total-address-count uint64
| | | +--ro allocated-address-conut uint64
| | +--ro binding-info* [cli-id]
| | +--ro cli-id uint32
| | +--ro duid
| | | +--ro type-code? uint16
| | | +--ro (duid-type)?
| | | +--:(duid-llt)
| | | | +--ro duid-llt-hardware-type? uint16
| | | | +--ro duid-llt-time? yang:timeticks
| | | | +--ro duid-llt-link-layer-addr?
yang:mac-address
| | | +--:(duid-en)
| | | | +--ro duid-en-enterprise-number? uint32
| | | | +--ro duid-en-identifier? string
| | | +--:(duid-ll)
| | | | +--ro duid-ll-hardware-type? uint16
| | | | +--ro duid-ll-link-layer-addr?
yang:mac-address
| | | +--:(duid-uuid)
| | | | +--ro uuid? yang:uuid
| | | +--:(duid-unknown)
| | | +--ro data? binary
| | +--ro cli-ia* [iaid]
| | +--ro ia-type string
| | +--ro iaid uint32
| | +--ro cli-addr* inet:ipv6-address
| | +--ro pool-id uint32
| +--ro pd-pools
| | +--ro prefix-pool* [pool-id]
| | | +--ro pool-id uint32
| | | +--ro pd-space-utilization threshold
| | +--ro binding-info* [cli-id]
| | +--ro cli-id uint32
| | +--ro duid
| | | +--ro type-code? uint16
| | | +--ro (duid-type)?
| | | +--:(duid-llt)
| | | | +--ro duid-llt-hardware-type? uint16
| | | | +--ro duid-llt-time? yang:timeticks
| | | | +--ro duid-llt-link-layer-addr?
yang:mac-address
| | | +--:(duid-en)
| | | | +--ro duid-en-enterprise-number? uint32
| | | | +--ro duid-en-identifier? string
| | | +--:(duid-ll)
| | | | +--ro duid-ll-hardware-type? uint16
| | | | +--ro duid-ll-link-layer-addr?
yang:mac-address
| | | +--:(duid-uuid)
| | | | +--ro uuid? yang:uuid
| | | +--:(duid-unknown)
| | | +--ro data? binary
| | +--ro cli-iapd* [iaid]
| | +--ro iaid uint32
| | +--ro cli-prefix* inet:ipv6-prefix
| | +--ro cli-prefix-len* uint8
| | +--ro pool-id uint32
| +--ro host-reservations
| +--ro binding-info* [cli-id]
| +--ro cli-id uint32
| +--ro duid
| | +--ro type-code? uint16
| | +--ro (duid-type)?
| | +--:(duid-llt)
| | | +--ro duid-llt-hardware-type? uint16
| | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-llt-link-layer-addr?
yang:mac-address
| | +--:(duid-en)
| | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-en-identifier? string
| | +--:(duid-ll)
| | | +--ro duid-ll-hardware-type? uint16
| | | +--ro duid-ll-link-layer-addr?
yang:mac-address
| | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid
| | +--:(duid-unknown)
| | +--ro data? binary
| +--ro cli-ia* [iaid]
| | +--ro ia-type string
| | +--ro iaid uint32
| | +--ro cli-addr* inet:ipv6-address
| +--ro cli-iapd* [iaid]
| +--ro iaid uint32
| +--ro cli-prefix* inet:ipv6-prefix
| +--ro cli-prefix-len* uint8
+--ro packet-stats
+--ro solicit-count uint32
+--ro request-count uint32
+--ro renew-count uint32
+--ro rebind-count uint32
+--ro decline-count uint32
+--ro release-count uint32
+--ro info-req-count uint32
+--ro advertise-count uint32
+--ro confirm-count uint32
+--ro reply-count uint32
+--ro reconfigure-count uint32
+--ro relay-forward-count uint32
+--ro relay-reply-count uint32
notifications:
+---n notifications
+--ro dhcpv6-server-event
+--ro address-pool-running-out
| +--ro total-address-count uint64
| +--ro max-address-count uint64
| +--ro allocated-address-conut uint64
| +--ro duid
| | +--ro type-code? uint16
| | +--ro (duid-type)?
| | +--:(duid-llt)
| | | +--ro duid-llt-hardware-type? uint16
| | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | +--:(duid-en)
| | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-en-identifier? string
| | +--:(duid-ll)
| | | +--ro duid-ll-hardware-type? uint16
| | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid
| | +--:(duid-unknown)
| | +--ro data? binary
| +--ro serv-name? string
| +--ro pool-name string
+--ro pd-pool-running-out
| +--ro max-pd-space-utilization threshold
| +--ro pd-space-utilization threshold
| +--ro duid
| | +--ro type-code? uint16
| | +--ro (duid-type)?
| | +--:(duid-llt)
| | | +--ro duid-llt-hardware-type? uint16
| | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | +--:(duid-en)
| | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-en-identifier? string
| | +--:(duid-ll)
| | | +--ro duid-ll-hardware-type? uint16
| | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid
| | +--:(duid-unknown)
| | +--ro data? binary
| +--ro serv-name? string
| +--ro pool-name string
+--ro invalid-client-detected
+--ro duid
| +--ro type-code? uint16
| +--ro (duid-type)?
| +--:(duid-llt)
| | +--ro duid-llt-hardware-type? uint16
| | +--ro duid-llt-time? yang:timeticks
| | +--ro duid-llt-link-layer-addr? yang:mac-address
| +--:(duid-en)
| | +--ro duid-en-enterprise-number? uint32
| | +--ro duid-en-identifier? string
| +--:(duid-ll)
| | +--ro duid-ll-hardware-type? uint16
| | +--ro duid-ll-link-layer-addr? yang:mac-address
| +--:(duid-uuid)
| | +--ro uuid? yang:uuid
| +--:(duid-unknown)
| +--ro data? binary
+--ro description? string
Figure 1: DHCPv6 Data Model Structure Figure 1: DHCPv6 Data Model Structure
Introduction of important nodes: Introduction of important nodes:
o server-config: This container contains the configuration data of a o server-config: This container contains the configuration data of a
server. server.
o serv-attributes: This container contains basic attributes of a o serv-attributes: This container contains basic attributes of a
DHCPv6 server such as DUID, server name and so on. Some optional DHCPv6 server such as DUID, server name and so on. Some optional
functions that can be provided by the server is also included. functions that can be provided by the server is also included.
o duid: Each server and client has only one DUID (DHCP Unique o duid: Each server and client has only one DUID (DHCP Unique
Identifier). The DUID here identifies a unique DHCPv6 server for Identifier). The DUID here identifies a unique DHCPv6 server for
clients. DUID consists of a two-octet type field and an arbitrary clients. DUID consists of a two-octet type field and an arbitrary
length (no more than 128 bytes) content field. Currently there length (no more than 128 bytes) content field. Currently there
are four defined types of DUIDs in [RFC3315] and [RFC6355] - DUID- are four defined types of DUIDs in [RFC3315] and [RFC6355] - DUID-
LLT, DUID-EN, DUID-LL and DUID-UUID. DUID-INVALID represents LLT, DUID-EN, DUID-LL and DUID-UUID. DUID-Unknown represents
those unconventional DUIDs. those unconventional DUIDs.
o pd-function: Whether the server can act as a delegating router to
perform prefix delegation [RFC3633].
o operator-option-ipv6-address, operator-option-single-flag, o operator-option-ipv6-address, operator-option-single-flag,
operator-option-ipv6-prefix, operator-option-int32, operator- operator-option-ipv6-prefix, operator-option-int32, operator-
option-int16, operator-option-int8, operator-option-uri, operator- option-int16, operator-option-int8, operator-option-uri, operator-
option-textstring, operator-option-var-data, operator-option-dns- option-textstring, operator-option-var-data, operator-option-dns-
wire: are generic option formats described in [RFC7227]. wire: are generic option formats described in [RFC7227].
o stateless-service: A boolean value specifies whether the server
support client-server exchanges involving two messages defined in
[RFC3315].
o rapid-commit: Setting the value to '1' represents the server
support the Solicit-Reply message exchange. '0' means the server
will simply ignore the Rapid Commit option in Solicit message.
o interfaces-config: A leaf list to denote which one or more o interfaces-config: A leaf list to denote which one or more
interfaces the server should listen on. The default value is to interfaces the server should listen on. The default value is to
listen on all the interfaces. This node is also used to set a listen on all the interfaces. This node is also used to set a
unicast address for the server to listen with a specific unicast address for the server to listen with a specific
interface. For example, if the server is being configured to interface. For example, if the server is being configured to
listen on a unicast address assigned to a specific interface, the listen on a unicast address assigned to a specific interface, the
format "eth1/2001:db8::1" can be used. format "eth1/2001:db8::1" can be used.
o option-sets: DHCPv6 employs various options to carry additional o option-sets: DHCPv6 employs various options to carry additional
information and parameters in DHCP messages. This container information and parameters in DHCP messages. This container
skipping to change at page 15, line 23 skipping to change at page 15, line 9
o address-pools: Under the "network-range" list, a container o address-pools: Under the "network-range" list, a container
describes the DHCPv6 server's address pools for a specific network describes the DHCPv6 server's address pools for a specific network
is defined. This container supports the server to be configured is defined. This container supports the server to be configured
at a pool level. at a pool level.
o address-pool: A DHCPv6 server can be configured with several o address-pool: A DHCPv6 server can be configured with several
address pools for a specific network. This list defines such address pools for a specific network. This list defines such
address pools which are distinguish by the key called "pool-id". address pools which are distinguish by the key called "pool-id".
o max-address-utilization-ratio: The threshold of address pool o rapid-commit: Setting the value to '1' represents the adress/
utiliztion, the value of which is settable. prefix pool support the Solicit-Reply message exchange. '0' means
the server will simply ignore the Rapid Commit option in Solicit
message.
o binding-info: A list records a binding information for each DHCPv6 o client-class: If this is instantiated, the address/pd pool will
client that has already been allocated IPv6 addresses. only serve the clients belonging to this class.
o max-address-count: Maximum count of addresses that can be
allocated in this pool. This value may be less than count of
total addresses in this pool.
o prefix-pools: If a server supports prefix delegation function, o prefix-pools: If a server supports prefix delegation function,
this container under the "network-range" list will be valid to this container under the "network-range" list will be valid to
define the delegating router's prefix pools for a specific define the delegating router's prefix pools for a specific
network. This container also supports the server to be configured network. This container also supports the server to be configured
at a pool level. at a pool level.
o prefix-pool: Similar to server's address pools, a delegating o prefix-pool: Similar to server's address pools, a delegating
router can also be configured with multiple prefix pools specified router can also be configured with multiple prefix pools specified
by a list called "prefix-pool". by a list called "prefix-pool".
o max-prefix-utilization-ratio: The threshold of prefix pool o max-pd-space-utlization: Maximum utilization of pd space in this
utiliztion, the value of which is settable. pool
o binding-info: A list records a binding information for each DHCPv6 o host-reservations: This container allows the server to make
requesting router that has already been configured IPv6 prefixes. reservations at host level.
o hosts: A server may also desire to be configured at a host level o host-reservation: This list allows the server to reserve
under some circumstances. This container include a list called addresses, prefixes, hostname and options for different clients.
"host" to allow the server carrying different parameters (e.g. A server may reserve multiple addresses and prefixes for a single
option sets) for different hosts. client.
o relay-opaque-paras: This container contains some opaque values in o relay-opaque-paras: This container contains some opaque values in
Relay Agent options that need to be configured on the server side Relay Agent options that need to be configured on the server side
only for value match. Such Relay Agent options include Interface- only for value match. Such Relay Agent options include Interface-
Id option, Remote-Id option and Subscriber-Id option. Id option, Remote-Id option and Subscriber-Id option.
o rsoo-enabled-options: [RFC6422] requires that the server SHOULD o rsoo-enabled-options: [RFC6422] requires that the server SHOULD
have an administrator-configurable list of RSOO-enabled options. have an administrator-configurable list of RSOO-enabled options.
This container include a list called "rsoo-enabled-option" to This container include a list called "rsoo-enabled-option" to
allow new RSOO-enabled options to be defined at the server side. allow new RSOO-enabled options to be defined at the server side.
o server-state: This container includes the state data of a server. o server-state: This container includes the state data of a server.
o address-prefix-assign-param: This list includes some parameters/ o binding-info: A list records a static binding information for each
identifiers that the server obtains from DHCPv6 options in this DHCPv6 client that has already been assigned IPv6 addresses/
network-range. The server may take these parameters/identifiers prefixes that are dynamically allocated and reserved in advance.
into account when assigning a(n) address/prefix.
o packet-stats: A container presents the packet statistics related o packet-stats: A container presents the packet statistics related
to the DHCPv6 server. to the DHCPv6 server.
Information about notifications: Information about notifications:
o pool-running-out: raised when the address/prefix pool is going to o address/pd-pool-running-out: raised when the address/prefix pool
run out. A threshold for utilization ratio of the pool has been is going to run out. A threshold for utilization ratio of the
defined in the server feature so that it will notify the pool (max-address-count/max-pd-space utilization) has been defined
administrator when the utilization ratio reaches the threshold, in the server feature so that it will notify the administrator
and such threshold is a settable parameter. when the utilization ratio reaches the threshold, and such
threshold is a settable parameter.
o invalid-client-detected: raised when the server has found a client o invalid-client-detected: raised when the server has found a client
which can be regarded as a potential attacker. Some description which can be regarded as a potential attacker. Some description
could also be included. could also be included.
2.2. DHCPv6 Relay Tree Diagrams 2.2. DHCPv6 Relay Tree Diagrams
module: ietf-dhcpv6-relay module: ietf-dhcpv6-relay
+--rw relay! +--rw relay!
+--rw relay-config +--rw relay-config
skipping to change at page 17, line 5 skipping to change at page 16, line 44
| | +--rw subscribers* [subscriber] | | +--rw subscribers* [subscriber]
| | | +--rw subscriber uint8 | | | +--rw subscriber uint8
| | | +--rw subscriber-id string | | | +--rw subscriber-id string
| | +--rw remote-host* [ent-num] | | +--rw remote-host* [ent-num]
| | | +--rw ent-num uint32 | | | +--rw ent-num uint32
| | | +--rw remote-id string | | | +--rw remote-id string
| | +--rw vendor-info | | +--rw vendor-info
| | +--rw ent-num uint32 | | +--rw ent-num uint32
| | +--rw data* string | | +--rw data* string
| +--rw rsoo-option-sets | +--rw rsoo-option-sets
| | +--rw option-set* [id] | | +--rw option-set* [option-set-id]
| | +--rw id uint32 | | +--rw option-set-id uint32
| | +--rw erp-local-domain-name-option! | | +--rw erp-local-domain-name-option!
{erp-local-domain-name-op}? {erp-local-domain-name-op}?
| | +--rw erp-for-client* [cli-id] | | +--rw erp-for-client* [cli-id]
| | +--rw cli-id uint32 | | +--rw cli-id uint32
| | +--rw duid | | +--rw duid
| | | +--rw type-code? uint16 | | | +--rw type-code? uint16
| | | +--rw (duid-type)? | | | +--rw (duid-type)?
| | | +--:(duid-llt) | | | +--:(duid-llt)
| | | | +--rw duid-llt-hardware-type? uint16 | | | | +--rw duid-llt-hardware-type? uint16
| | | | +--rw duid-llt-time? | | | | +--rw duid-llt-time? yang:timeticks
yang:timeticks
| | | | +--rw duid-llt-link-layer-addr? | | | | +--rw duid-llt-link-layer-addr?
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-addr? | | | | +--rw duid-ll-link-layer-addr?
yang:mac-address yang:mac-address
| | | +--:(duid-uuid) | | | +--:(duid-uuid)
| | | | +--rw uuid? yang:uuid | | | | +--rw uuid? yang:uuid
| | | +--:(duid-invalid) | | | +--:(duid-unknown)
| | | +--rw data? binary | | | +--rw data? binary
| | +--rw erp-name string | | +--rw erp-name string
| +--rw relay-if* [if-name] | +--rw relay-if* [if-name]
| +--rw if-name string | +--rw if-name if:interface-ref
| +--rw enable boolean
| +--rw ipv6-address? inet:ipv6-address
| +--rw interface-id? string | +--rw interface-id? string
| +--rw ipv6-address? inet:ipv6-address
| +--rw rsoo-option-set-id? | +--rw rsoo-option-set-id?
-> /relay/relay-config/rsoo-option-sets/option-set/id -> /relay/relay-config/rsoo-option-sets/option-set/option-set-id
| +--rw next-entity* [dest-addr] | +--rw next-entity* [dest-addr]
| +--rw dest-addr inet:ipv6-address | +--rw dest-addr inet:ipv6-address
| +--rw available boolean | +--rw available boolean
| +--rw multicast boolean | +--rw multicast boolean
| +--rw server boolean | +--rw server boolean
+--ro relay-state +--ro relay-state
+--ro relay-if* [if-name] +--ro relay-if* [if-name]
| +--ro if-name string | +--ro if-name string
| +--ro pd-route* [pd-route-id] | +--ro pd-route* [pd-route-id]
| | +--ro pd-route-id uint8 | | +--ro pd-route-id uint8
skipping to change at page 20, line 25 skipping to change at page 20, line 11
| | | +--rw duid-llt-time? yang:timeticks | | | +--rw duid-llt-time? yang:timeticks
| | | +--rw duid-llt-link-layer-addr? yang:mac-address | | | +--rw duid-llt-link-layer-addr? 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-addr? yang:mac-address | | | +--rw duid-ll-link-layer-addr? yang:mac-address
| | +--:(duid-uuid) | | +--:(duid-uuid)
| | | +--rw uuid? yang:uuid | | | +--rw uuid? yang:uuid
| | +--:(duid-invalid) | | +--:(duid-unknown)
| | +--rw data? binary | | +--rw data? binary
| +--rw client-if* [if-name] | +--rw client-if* [if-name]
| +--rw if-name string | +--rw if-name if:interface-ref
| +--rw cli-id uint32 | +--rw cli-id uint32
| +--rw description? string
| +--rw pd-function boolean | +--rw pd-function boolean
| +--rw rapid-commit boolean | +--rw rapid-commit boolean
| +--rw mo-tab
| | +--rw m-tab boolean
| | +--rw o-tab boolean
| +--rw client-configured-options | +--rw client-configured-options
| +--rw new-or-standard-cli-option* [option-code] | +--rw new-or-standard-cli-option* [option-code]
| | +--rw option-code uint16 | | +--rw option-code uint16
| | +--rw option-name string | | +--rw option-name string
| | +--rw option-description string | | +--rw option-description string
| | +--rw option-reference? string | | +--rw option-reference? string
| | +--rw option-value string | | +--rw option-value string
| +--rw option-request-option! {option-request-op}? | +--rw option-request-option! {option-request-op}?
| | +--rw oro-option* [option-code] | | +--rw oro-option* [option-code]
| | +--rw option-code uint16 | | +--rw option-code uint16
skipping to change at page 21, line 28 skipping to change at page 21, line 11
| | +--rw major uint8 | | +--rw major uint8
| | +--rw minor uint8 | | +--rw minor uint8
| +--rw kbr-principal-name-option! {kbr-principal-name-op}? | +--rw kbr-principal-name-option! {kbr-principal-name-op}?
| | +--rw principle-name* [principle-name-id] | | +--rw principle-name* [principle-name-id]
| | +--rw principle-name-id uint8 | | +--rw principle-name-id uint8
| | +--rw name-type int32 | | +--rw name-type int32
| | +--rw name-string string | | +--rw name-string string
| +--rw kbr-realm-name-option! {kbr-realm-name-op}? | +--rw kbr-realm-name-option! {kbr-realm-name-op}?
| | +--rw realm-name string | | +--rw realm-name string
| +--rw client-link-layer-addr-option! | +--rw client-link-layer-addr-option!
{client-link-layer-addr-op}? {client-link-layer-addr-op}?
| +--rw link-layer-type uint16 | +--rw link-layer-type uint16
| +--rw link-layer-addr string | +--rw link-layer-addr string
+--ro client-state +--ro client-state
+--ro if-other-paras +--ro if-other-paras
+--ro server-unicast-option! {server-unicast-op}? | +--ro server-unicast-option! {server-unicast-op}?
| +--ro server-address? inet:ipv6-address | | +--ro server-address? inet:ipv6-address
+--ro sip-server-domain-name-list-option! | +--ro sip-server-domain-name-list-option!
{sip-server-domain-name-list-op}? {sip-server-domain-name-list-op}?
| +--ro sip-serv-domain-name string | | +--ro sip-serv-domain-name string
+--ro sip-server-address-list-option! | +--ro sip-server-address-list-option!
{sip-server-address-list-op}? {sip-server-address-list-op}?
| +--ro sip-server* [sip-serv-id] | | +--ro sip-server* [sip-serv-id]
| +--ro sip-serv-id uint8 | | +--ro sip-serv-id uint8
| +--ro sip-serv-addr inet:ipv6-address | | +--ro sip-serv-addr inet:ipv6-address
+--ro dns-config-option! {dns-config-op}? | +--ro dns-servers-option! {dns-servers-op}?
| +--ro dns-server* [dns-serv-id] | | +--ro dns-server* [dns-serv-id]
| +--ro dns-serv-id uint8 | | +--ro dns-serv-id uint8
| +--ro dns-serv-addr inet:ipv6-address | | +--ro dns-serv-addr inet:ipv6-address
+--ro domain-searchlist-option! {domain-searchlist-op}? | +--ro domain-searchlist-option! {domain-searchlist-op}?
| +--ro domain-searchlist* [domain-searchlist-id] | | +--ro domain-searchlist* [domain-searchlist-id]
| +--ro domain-searchlist-id uint8 | | +--ro domain-searchlist-id uint8
| +--ro domain-search-list-entry string | | +--ro domain-search-list-entry string
+--ro nis-config-option! {nis-config-op}? | +--ro nis-config-option! {nis-config-op}?
| +--ro nis-server* [nis-serv-id] | | +--ro nis-server* [nis-serv-id]
| +--ro nis-serv-id uint8 | | +--ro nis-serv-id uint8
| +--ro nis-serv-addr inet:ipv6-address | | +--ro nis-serv-addr inet:ipv6-address
+--ro nis-plus-config-option! {nis-plus-config-op}? | +--ro nis-plus-config-option! {nis-plus-config-op}?
| +--ro nis-plus-server* [nis-plus-serv-id] | | +--ro nis-plus-server* [nis-plus-serv-id]
| +--ro nis-plus-serv-id uint8 | | +--ro nis-plus-serv-id uint8
| +--ro nis-plus-serv-addr inet:ipv6-address | | +--ro nis-plus-serv-addr inet:ipv6-address
+--ro nis-domain-name-option! {nis-domain-name-op}? | +--ro nis-domain-name-option! {nis-domain-name-op}?
| +--ro nis-domain-name? string | | +--ro nis-domain-name? string
+--ro nis-plus-domain-name-option! {nis-plus-domain-name-op}? | +--ro nis-plus-domain-name-option! {nis-plus-domain-name-op}?
| +--ro nis-plus-domain-name? string | | +--ro nis-plus-domain-name? string
+--ro sntp-server-option! {sntp-server-op}? | +--ro sntp-server-option! {sntp-server-op}?
| +--ro sntp-server* [sntp-serv-id] | | +--ro sntp-server* [sntp-serv-id]
| +--ro sntp-serv-id uint8 | | +--ro sntp-serv-id uint8
| +--ro sntp-serv-addr inet:ipv6-address | | +--ro sntp-serv-addr inet:ipv6-address
+--ro info-refresh-time-option! {info-refresh-time-op}? | +--ro info-refresh-time-option! {info-refresh-time-op}?
| +--ro info-refresh-time yang:timeticks | | +--ro info-refresh-time yang:timeticks
+--ro client-fqdn-option! {client-fqdn-op}? | +--ro client-fqdn-option! {client-fqdn-op}?
| +--ro server-initiate-update boolean | | +--ro server-initiate-update boolean
| +--ro client-initiate-update boolean | | +--ro client-initiate-update boolean
| +--ro modify-name-from-cli boolean | | +--ro modify-name-from-cli boolean
+--ro posix-timezone-option! {posix-timezone-op}? | +--ro posix-timezone-option! {posix-timezone-op}?
| +--ro tz-posix string | | +--ro tz-posix string
+--ro tzdb-timezone-option! {tzdb-timezone-op}? | +--ro tzdb-timezone-option! {tzdb-timezone-op}?
| +--ro tz-database string | | +--ro tz-database string
+--ro ntp-server-option! {ntp-server-op}? | +--ro ntp-server-option! {ntp-server-op}?
| +--ro ntp-server* [ntp-serv-id] | | +--ro ntp-server* [ntp-serv-id]
| +--ro ntp-serv-id uint8 | | +--ro ntp-serv-id uint8
| +--ro (ntp-time-source-suboption)? | | +--ro (ntp-time-source-suboption)?
| +--:(server-address) | | +--:(server-address)
| | +--ro ntp-serv-addr-suboption* inet:ipv6-address | | | +--ro ntp-serv-addr-suboption* inet:ipv6-address
| +--:(server-multicast-address) | | +--:(server-multicast-address)
| | +--ro ntp-serv-mul-addr-suboption* | | | +--ro ntp-serv-mul-addr-suboption*
inet:ipv6-address inet:ipv6-address
| +--:(server-fqdn) | | +--:(server-fqdn)
| +--ro ntp-serv-fqdn-suboption* string | | +--ro ntp-serv-fqdn-suboption* string
+--ro boot-file-url-option! {boot-file-url-op}? | +--ro boot-file-url-option! {boot-file-url-op}?
| +--ro boot-file* [boot-file-id] | | +--ro boot-file* [boot-file-id]
| +--ro boot-file-id uint8 | | +--ro boot-file-id uint8
| +--ro suitable-arch-type* uint16 | | +--ro suitable-arch-type* uint16
| +--ro suitable-net-if* uint32 | | +--ro suitable-net-if* uint32
| +--ro boot-file-url string | | +--ro boot-file-url string
+--ro boot-file-param-option! {boot-file-param-op}? | +--ro boot-file-param-option! {boot-file-param-op}?
| +--ro boot-file-paras* [para-id] | | +--ro boot-file-paras* [para-id]
| +--ro para-id uint8 | | +--ro para-id uint8
| +--ro parameter string | | +--ro parameter string
+--ro aftr-name-option! {aftr-name-op}? | +--ro aftr-name-option! {aftr-name-op}?
| +--ro tunnel-endpoint-name string | | +--ro tunnel-endpoint-name string
+--ro kbr-default-name-option! {kbr-default-name-op}? | +--ro kbr-default-name-option! {kbr-default-name-op}?
| +--ro default-realm-name string | | +--ro default-realm-name string
+--ro kbr-kdc-option! {kbr-kdc-op}? | +--ro kbr-kdc-option! {kbr-kdc-op}?
| +--ro kdc-info* [kdc-id] | | +--ro kdc-info* [kdc-id]
| +--ro kdc-id uint8 | | +--ro kdc-id uint8
| +--ro priority uint16 | | +--ro priority uint16
| +--ro weight uint16 | | +--ro weight uint16
| +--ro transport-type uint8 | | +--ro transport-type uint8
| +--ro port-number uint16 | | +--ro port-number uint16
| +--ro kdc-ipv6-addr inet:ipv6-address | | +--ro kdc-ipv6-addr inet:ipv6-address
| +--ro realm-name string | | +--ro realm-name string
+--ro sol-max-rt-option! {sol-max-rt-op}? | +--ro sol-max-rt-option! {sol-max-rt-op}?
| +--ro sol-max-rt-value yang:timeticks | | +--ro sol-max-rt-value yang:timeticks
+--ro inf-max-rt-option! {inf-max-rt-op}? | +--ro inf-max-rt-option! {inf-max-rt-op}?
| +--ro inf-max-rt-value yang:timeticks | | +--ro inf-max-rt-value yang:timeticks
+--ro addr-selection-option! {addr-selection-op}? | +--ro addr-selection-option! {addr-selection-op}?
| +--ro a-bit-set boolean | | +--ro a-bit-set boolean
| +--ro p-bit-set boolean | | +--ro p-bit-set boolean
| +--ro policy-table* [policy-id] | | +--ro policy-table* [policy-id]
| +--ro policy-id uint8 | | +--ro policy-id uint8
| +--ro label uint8 | | +--ro label uint8
| +--ro precedence uint8 | | +--ro precedence uint8
| +--ro prefix-len uint8 | | +--ro prefix-len uint8
| +--ro prefix inet:ipv6-prefix | | +--ro prefix inet:ipv6-prefix
+--ro pcp-server-option! {pcp-server-op}? | +--ro pcp-server-option! {pcp-server-op}?
| +--ro pcp-server* [pcp-serv-id] | | +--ro pcp-server* [pcp-serv-id]
| +--ro pcp-serv-id uint8 | | +--ro pcp-serv-id uint8
| +--ro pcp-serv-addr inet:ipv6-address | | +--ro pcp-serv-addr inet:ipv6-address
+--ro s46-rule-option! {s46-rule-op}? | +--ro s46-rule-option! {s46-rule-op}?
| +--ro s46-rule* [rule-id] | | +--ro s46-rule* [rule-id]
| +--ro rule-id uint8 | | +--ro rule-id uint8
| +--ro rule-type enumeration | | +--ro rule-type enumeration
| +--ro prefix4-len uint8 | | +--ro prefix4-len uint8
| +--ro ipv4-prefix inet:ipv4-prefix | | +--ro ipv4-prefix inet:ipv4-prefix
| +--ro prefix6-len uint8 | | +--ro prefix6-len uint8
| +--ro ipv6-prefix inet:ipv6-prefix | | +--ro ipv6-prefix inet:ipv6-prefix
| +--ro port-parameter | | +--ro port-parameter
| +--ro offset uint8 | | +--ro offset uint8
| +--ro psid-len uint8 | | +--ro psid-len uint8
| +--ro psid uint16 | | +--ro psid uint16
+--ro s46-br-option! {s46-br-op}? | +--ro s46-br-option! {s46-br-op}?
| +--ro br* [br-id] | | +--ro br* [br-id]
| +--ro br-id uint8 | | +--ro br-id uint8
| +--ro br-ipv6-addr inet:ipv6-address | | +--ro br-ipv6-addr inet:ipv6-address
+--ro s46-dmr-option! {s46-dmr-op}? | +--ro s46-dmr-option! {s46-dmr-op}?
| +--ro dmr* [dmr-id] | | +--ro dmr* [dmr-id]
| +--ro dmr-id uint8 | | +--ro dmr-id uint8
| +--ro dmr-prefix-len uint8 | | +--ro dmr-prefix-len uint8
| +--ro dmr-ipv6-prefix inet:ipv6-prefix | | +--ro dmr-ipv6-prefix inet:ipv6-prefix
+--ro s46-v4-v6-binding-option! {s46-v4-v6-binding-op}? | +--ro s46-v4-v6-binding-option! {s46-v4-v6-binding-op}?
+--ro ce* [ce-id] | +--ro ce* [ce-id]
+--ro ce-id uint8 | +--ro ce-id uint8
+--ro ipv4-addr inet:ipv4-address | +--ro ipv4-addr inet:ipv4-address
+--ro bind-prefix6-len uint8 | +--ro bind-prefix6-len uint8
+--ro bind-ipv6-prefix inet:ipv6-prefix | +--ro bind-ipv6-prefix inet:ipv6-prefix
+--ro port-parameter | +--ro port-parameter
+--ro offset uint8 | +--ro offset uint8
+--ro psid-len uint8 | +--ro psid-len uint8
+--ro psid uint16 | +--ro psid uint16
+--ro packet-stats
+--ro solicit-count uint32
+--ro request-count uint32
+--ro renew-count uint32
+--ro rebind-count uint32
+--ro decline-count uint32
+--ro release-count uint32
+--ro info-req-count uint32
+--ro advertise-count uint32
+--ro confirm-count uint32
+--ro reply-count uint32
+--ro reconfigure-count uint32
notifications: notifications:
+---n notifications +---n notifications
+--ro dhcpv6-client-event +--ro dhcpv6-client-event
+--ro ia-lease-event +--ro ia-lease-event
| +--ro event-type enumeration | +--ro event-type enumeration
| +--ro duid | +--ro duid
| | +--ro type-code? uint16 | | +--ro type-code? uint16
| | +--ro (duid-type)? | | +--ro (duid-type)?
| | +--:(duid-llt) | | +--:(duid-llt)
skipping to change at page 24, line 36 skipping to change at page 24, line 31
| | | +--ro duid-llt-time? yang:timeticks | | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-llt-link-layer-addr? yang:mac-address | | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | +--:(duid-en) | | +--:(duid-en)
| | | +--ro duid-en-enterprise-number? uint32 | | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-en-identifier? string | | | +--ro duid-en-identifier? string
| | +--:(duid-ll) | | +--:(duid-ll)
| | | +--ro duid-ll-hardware-type? uint16 | | | +--ro duid-ll-hardware-type? uint16
| | | +--ro duid-ll-link-layer-addr? yang:mac-address | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | +--:(duid-uuid) | | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid | | | +--ro uuid? yang:uuid
| | +--:(duid-invalid) | | +--:(duid-unknown)
| | +--ro data? binary | | +--ro data? binary
| +--ro iaid uint32 | +--ro iaid uint32
| +--ro serv-name? string | +--ro serv-name? string
| +--ro description? string | +--ro description? string
+--ro invalid-ia-detected +--ro invalid-ia-detected
| +--ro duid | +--ro duid
| | +--ro type-code? uint16 | | +--ro type-code? uint16
| | +--ro (duid-type)? | | +--ro (duid-type)?
| | +--:(duid-llt) | | +--:(duid-llt)
| | | +--ro duid-llt-hardware-type? uint16 | | | +--ro duid-llt-hardware-type? uint16
| | | +--ro duid-llt-time? yang:timeticks | | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-llt-link-layer-addr? yang:mac-address | | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | +--:(duid-en) | | +--:(duid-en)
| | | +--ro duid-en-enterprise-number? uint32 | | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-en-identifier? string | | | +--ro duid-en-identifier? string
| | +--:(duid-ll) | | +--:(duid-ll)
| | | +--ro duid-ll-hardware-type? uint16 | | | +--ro duid-ll-hardware-type? uint16
| | | +--ro duid-ll-link-layer-addr? yang:mac-address | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | +--:(duid-uuid) | | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid | | | +--ro uuid? yang:uuid
| | +--:(duid-invalid) | | +--:(duid-unknown)
| | +--ro data? binary | | +--ro data? binary
| +--ro cli-duid uint32 | +--ro cli-duid uint32
| +--ro iaid uint32 | +--ro iaid uint32
| +--ro serv-name? string | +--ro serv-name? string
| +--ro description? string | +--ro description? string
+--ro retransmission-failed +--ro retransmission-failed
| +--ro duid | +--ro duid
| | +--ro type-code? uint16 | | +--ro type-code? uint16
| | +--ro (duid-type)? | | +--ro (duid-type)?
| | +--:(duid-llt) | | +--:(duid-llt)
skipping to change at page 25, line 31 skipping to change at page 25, line 26
| | | +--ro duid-llt-time? yang:timeticks | | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-llt-link-layer-addr? yang:mac-address | | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | +--:(duid-en) | | +--:(duid-en)
| | | +--ro duid-en-enterprise-number? uint32 | | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-en-identifier? string | | | +--ro duid-en-identifier? string
| | +--:(duid-ll) | | +--:(duid-ll)
| | | +--ro duid-ll-hardware-type? uint16 | | | +--ro duid-ll-hardware-type? uint16
| | | +--ro duid-ll-link-layer-addr? yang:mac-address | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | +--:(duid-uuid) | | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid | | | +--ro uuid? yang:uuid
| | +--:(duid-invalid) | | +--:(duid-unknown)
| | +--ro data? binary | | +--ro data? binary
| +--ro description enumeration | +--ro description enumeration
+--ro failed-status-turn-up +--ro failed-status-turn-up
+--ro duid +--ro duid
| +--ro type-code? uint16 | +--ro type-code? uint16
| +--ro (duid-type)? | +--ro (duid-type)?
| +--:(duid-llt) | +--:(duid-llt)
| | +--ro duid-llt-hardware-type? uint16 | | +--ro duid-llt-hardware-type? uint16
| | +--ro duid-llt-time? yang:timeticks | | +--ro duid-llt-time? yang:timeticks
| | +--ro duid-llt-link-layer-addr? yang:mac-address | | +--ro duid-llt-link-layer-addr? yang:mac-address
| +--:(duid-en) | +--:(duid-en)
| | +--ro duid-en-enterprise-number? uint32 | | +--ro duid-en-enterprise-number? uint32
| | +--ro duid-en-identifier? string | | +--ro duid-en-identifier? string
| +--:(duid-ll) | +--:(duid-ll)
| | +--ro duid-ll-hardware-type? uint16 | | +--ro duid-ll-hardware-type? uint16
| | +--ro duid-ll-link-layer-addr? yang:mac-address | | +--ro duid-ll-link-layer-addr? yang:mac-address
| +--:(duid-uuid) | +--:(duid-uuid)
| | +--ro uuid? yang:uuid | | +--ro uuid? yang:uuid
| +--:(duid-invalid) | +--:(duid-unknown)
| +--ro data? binary | +--ro data? binary
+--ro status-code enumeration +--ro status-code enumeration
Introduction of important nodes: Introduction of important nodes:
o client-config: This container includes the configuration data of o client-config: This container includes the configuration data of
the client. the client.
o duid: Each server and client has only one DUID (DHCP Unique
Identifier). The DUID here will be carried in the Client ID
option to identify a specific DHCPv6 client. This leaf are same
as the "duid" leaf in "dhcpv6-server" feature.
o client-if: A client may have several interfaces, it is more o client-if: A client may have several interfaces, it is more
reasonable to configure and manage parameters on the interface- reasonable to configure and manage parameters on the interface-
level. The list defines a specific client interface and its data. level. The list defines a specific client interface and its data.
Different interfaces are distinguished by the "ifName" key which Different interfaces are distinguished by the "ifName" key which
is a configurable string value. is a configurable string value.
o duid: Each server and client has only one DUID (DHCP Unique
Identifier). The DUID here will be carried in the Client ID
option to identify a specific DHCPv6 client. This leaf are same
as the "duid" leaf in "dhcpv6-server" feature.
o pd-function: Whether the client can act as a requesting router to o pd-function: Whether the client can act as a requesting router to
request prefixes using prefix delegation ([RFC3633]). request prefixes using prefix delegation ([RFC3633]).
o rapid-commit: '1' indicates a client can initiate a Solicit-Reply o rapid-commit: '1' indicates a client can initiate a Solicit-Reply
message exchange by adding a Rapid Commit option in Solicit message exchange by adding a Rapid Commit option in Solicit
message. '0' means the client is not allowed to add a Rapid message. '0' means the client is not allowed to add a Rapid
Commit option to request addresses in a two-message exchange Commit option to request addresses in a two-message exchange
pattern. pattern.
o mo-tab: The management tab label indicates the operation mode of
the DHCPv6 client. 'm'=1 and 'o'=1 indicate the client will use
DHCPv6 to obtain all the configuration data. 'm'=1 and 'o'=0 are a
meaningless combination. 'm'=0 and 'o'=1 indicate the client will
use stateless DHCPv6 to obtain configuration data apart from
addresses/prefixes data. 'm'=0 and 'o'=0 represent the client will
not use DHCPv6 but use SLAAC to achieve configuration.
o client-configured-options: Similar to the server, the client also o client-configured-options: Similar to the server, the client also
need to configure some options to fulfil some desired functions. need to configure some options to fulfil some desired functions.
This container include all the potential options that need to be This container include all the potential options that need to be
configured at the client side. The relevant RFCs that define configured at the client side. The relevant RFCs that define
those options include: [RFC3315], [RFC4704], [RFC5970], [RFC6784], those options include: [RFC3315], [RFC4704], [RFC5970], [RFC6784],
[RFC6939]. [RFC6939].
o option-request-option: This container provide a way to configure o option-request-option: This container provide a way to configure
the list of options that the client will request in its ORO the list of options that the client will request in its ORO
option. option.
skipping to change at page 27, line 36 skipping to change at page 27, line 22
o retransmission-failed: raised when the retransmission mechanism o retransmission-failed: raised when the retransmission mechanism
defined in [RFC3315] is failed. defined in [RFC3315] is failed.
o failed-status-turn-up: raised when the client receives a message o failed-status-turn-up: raised when the client receives a message
includes an unsuccessful Status Code option. includes an unsuccessful Status Code option.
3. DHCPv6 YANG Model 3. DHCPv6 YANG Model
3.1. DHCPv6 Server YANG Model 3.1. DHCPv6 Server YANG Model
This module imports typedefs from [RFC6991]. This module imports typedefs from [RFC6991], [RFC7223].
<CODE BEGINS> file "ietf-dhcpv6-server@2017-12-22.yang" <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;
revision-date "2013-07-15";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
revision-date "2013-07-15";
} }
import ietf-dhcpv6-options { import ietf-dhcpv6-options {
prefix dhcpv6-options; prefix dhcpv6-options;
revision-date "2017-12-22"; }
import ietf-dhcpv6-types {
prefix dhcpv6-types;
}
import ietf-interfaces {
prefix if;
} }
organization "DHC WG"; organization "DHC WG";
contact "yong@csnet1.cs.tsinghua.edu.cn contact
lh.sunlinh@gmail.com "cuiyong@tsinghua.edu.cn
ian.farrer@telekom.de lh.sunlinh@gmail.com
sladjana.zechlin@telekom.de ian.farrer@telekom.de
hezihao9512@gmail.com"; sladjana.zechlin@telekom.de
hezihao9512@gmail.com";
description "This model defines a YANG data model that can be description "This model defines a YANG data model that can be
used to configure and manage a DHCPv6 server."; used to configure and manage a DHCPv6 server.";
revision 2018-03-04 {
description "Resolved most issues on the DHC official
github";
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 * Typedef
*/ */
typedef threshold { typedef threshold {
type union { type union {
type uint16 { type uint16 {
range 0..100; range 0..100;
} }
type enumeration { type enumeration {
enum "disabled" { enum "disabled" {
description "No threshold"; description "No threshold";
} }
} }
} }
description "Threshold value in percent"; description "Threshold value in percent";
} }
/* /*
* Grouping * Data Nodes
*/ */
container server {
grouping vendor-infor { presence "Enables the server";
description "Vendor information."; description "DHCPv6 server portion";
container vendor-info {
description "";
leaf ent-num {
type uint32;
mandatory true;
description "enterprise number";
}
leaf-list data {
type string;
description "specific vendor info";
}
}
}
grouping duid { /*
description "DHCP Unique Identifier"; * Configuration data
reference "RFC3315: Section 9 and RFC6355: Section 4"; */
leaf type-code { container server-config {
type uint16; description "This container contains the configuration data
default 65535; of a server.";
description "Type code of this DUID"; container serv-attributes {
} description
choice duid-type { "This container contains basic attributes of a DHCPv6 server
default duid-invalid; such as IPv6 address, server name and so on. Some optional
description "Selects the format for the DUID."; functions that can be provided by the server is also included.";
case duid-llt { container duid {
description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; description "Sets the DUID of server";
reference "RFC3315 Section 9.2"; uses dhcpv6-types:duid;
leaf duid-llt-hardware-type {
type uint16;
description "Hardware type as assigned by IANA (RFC826).";
}
leaf duid-llt-time {
type yang:timeticks;
description "The time value is the time that the DUID is generated
represented in seconds since midnight (UTC), January 1, 2000,
modulo 2^32.";
}
leaf duid-llt-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
}
} }
case duid-en { leaf name {
description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; type string;
reference "RFC3315 Section 9.3"; description "server's name";
leaf duid-en-enterprise-number {
type uint32;
description "Vendor's registered Private Enterprise Number as
maintained by IANA";
}
leaf duid-en-identifier {
type string;
description "Indentifier, unique to the device that is using it";
}
} }
case duid-ll { leaf description {
description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; type string;
reference "RFC3315 Section 9.4"; description "description of the server.";
leaf duid-ll-hardware-type {
type uint16;
description "Hardware type as assigned by IANA (RFC826).";
}
leaf duid-ll-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
} }
leaf-list ipv6-address {
type inet:ipv6-address;
description "server's IPv6 address.";
} }
case duid-uuid { leaf-list interfaces-config {
description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)"; // Note - this should probably be references to
reference "RFC6335 Defination of the UUID-Based Unique Identifier"; // entries in the ietf-interfaces model
leaf uuid { type if:interface-ref;
type yang:uuid; description "A leaf list to denote which one or more interfaces
description "A Universally Unique IDentifier in the string representation the server should listen on. The default value is to listen
defined in RFC 4122. The canonical representation uses on all the interfaces. This node is also used to set a unicast
lowercase characters"; 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'.";
} }
case duid-invalid { uses dhcpv6-types:vendor-infor;
description "DUID based on free raw bytes"; }
leaf data {
type binary; container option-sets {
description "The bits to be used as the identifier"; description "DHCPv6 employs various options to carry additional
} information and parameters in DHCP messages. This container defines
all the possible options that need to be configured at the server
side. ";
list option-set {
key option-set-id;
description "A server may allow different option sets to be
configured for different conditions (i.e. different networks,
clients and etc). This 'option-set' list enables various sets of
options being defined and configured in a single server. Different
sets are distinguished by the key called 'option-set-id'. All the
possible options discussed above are defined in the list and each
option is corresponding to a container. Since all the options in
the list are optional, each container in this list has a 'presence'
statement to indicate whether this option (container) will be
included in the current option set or not. In addition, each container
also has a 'if-feature' statement to indicate whether the server
supports this option (container).";
leaf option-set-id {
type uint32;
description "option set id";
}
uses dhcpv6-options:server-option-definitions;
uses dhcpv6-options:custom-option-definitions;
} }
} }
}
/* container network-ranges {
* Data Nodes description "This model supports a hierarchy
*/ to achieve dynamic configuration. That is to say we could configure the
server at different levels through this model. The top level is a global
level which is defined as the container '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.";
container server { leaf option-set-id {
presence "Enables the server"; type leafref {
description "DHCPv6 server portion"; path "/server/server-config/option-sets/option-set/option-set-id";
/* }
* Configuration data description
*/ "The ID field of relevant global option-set to be provisioned to
container server-config { clients.";
description "configuration tree of server"; }
container serv-attributes { list network-range {
description "This container contains basic attributes key network-range-id;
of a DHCPv6 server such as IPv6 address, server name description
and so on. Some optional functions that can be provided "Under the 'network-ranges' container, a 'network-range' list
by 0the server is also included."; is defined to configure the server at a network level which is also
leaf name { considered as the second level. Different network are identified by the
type string; key 'network-range-id'. This is because a server may have different
description "server's name"; configuration parameters (e.g. option sets) for different networks.";
} leaf network-range-id {
container duid { type uint32;
description "Sets the DUID"; mandatory true;
uses duid; description "equivalent to subnet id";
} }
leaf-list ipv6-address { leaf network-description {
type inet:ipv6-address; type string;
description "Server's IPv6 address."; mandatory true;
} description "description of the subnet";
leaf description { }
type string; leaf network-prefix {
description "Description of the server."; type inet:ipv6-prefix;
} mandatory true;
leaf pd-function { description "subnet prefix";
type boolean; }
mandatory true; leaf option-set-id {
description "Whether the server can act as a type leafref {
delegating router to perform prefix delegation path "/server/server-config/option-sets/option-set/option-set-id";
([RFC3633]).";
}
leaf stateless-service {
type boolean;
mandatory true;
description "A boolean value specifies whether
the server support client-server exchanges
involving two messages defined in ([RFC3315]).";
}
leaf rapid-commit {
type boolean;
mandatory true;
description "A boolean value specifies whether
the server support client-server exchanges
involving two messages defined in ([RFC3315]).";
}
leaf-list interfaces-config {
// Note - this should probably be references to
// entries in the ietf-interfaces model
type string;
description "A leaf list to denote which one or
more interfaces the server should listen on. The
default value 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'.";
} }
uses vendor-infor; description "The ID field of relevant option-set to be provisioned to
clients of this network-range.";
} }
container option-sets { container address-pools {
description "DHCPv6 employs various options to carry additional description
information and parameters in DHCP messages. This container defines "A container that describes the DHCPv6 server's
all the possible options that need to be configured at the server address pools.";
side. "; list address-pool {
list option-set { key pool-id;
key id; description "A DHCPv6 server can be configured with
description "A server may allow different option sets to be several address pools. This list defines such address pools
configured for different conditions (i.e. different networks, which are distinguished by the key called 'pool-id'.";
clients and etc). This 'option-set' list enables various sets of leaf pool-id {
options being defined and configured in a single server. Different type uint32;
sets are distinguished by the key called 'option-set-id'. All the mandatory true;
possible options discussed above are defined in the list and each description "pool id";
option is corresponding to a container. Since all the options in
the list are optional, each container in this list has a 'presence'
statement to indicate whether this option (container) will be
included in the current option set or not. In addition, each container
also has a 'if-feature' statement to indicate whether the server
supports this option (container).";
leaf id {
type uint32;
description "option set id";
}
uses dhcpv6-options:server-option-definitions;
uses dhcpv6-options:custom-option-definitions;
} }
} leaf pool-prefix {
type inet:ipv6-prefix;
container network-ranges { mandatory true;
description "This model supports a hierarchy description "pool prefix";
to achieve dynamic configuration. That is to }
say we could configure the server at different leaf start-address {
levels through this model. The top level is a type inet:ipv6-address-no-zone;
global level which is defined as the container mandatory true;
'network-ranges'. The following levels are description "start address";
defined as sub-containers under it. The }
'network-ranges' contains the parameters leaf end-address {
(e.g. option-sets) that would be allocated to type inet:ipv6-address-no-zone;
all the clients served by this server."; mandatory true;
list network-range { description "end address";
key network-range-id; }
description "Under the 'network-ranges' leaf valid-lifetime {
container, a 'network-range' list is type yang:timeticks;
defined to configure the server at a mandatory true;
network level which is also considered description "valid liftime for IA";
as the second level. Different network }
are identified by the key 'network-range-id'. leaf renew-time {
This is because a server may have different type yang:timeticks;
configuration parameters (e.g. option sets) mandatory true;
for different networks."; description "renew time";
leaf network-range-id { }
type uint32; leaf rebind-time {
mandatory true; type yang:timeticks;
description "equivalent to subnet id"; mandatory true;
} description "rebind time";
leaf network-description { }
type string; leaf preferred-lifetime {
mandatory true; type yang:timeticks;
description "description of the subnet"; mandatory true;
description "preferred lifetime for IA";
}
leaf rapid-commit {
type boolean;
mandatory true;
description "A boolean value specifies whether the pool
supports client-server exchanges involving two messages.";
}
leaf client-class {
type string;
description
"If this leaf is specified, this pool will only serve
the clients belonging to this class.";
}
leaf max-address-count {
type threshold;
mandatory true;
description "maximum count of addresses that can
be allocated in this pool. This value may be
less than count of total addresses.";
}
leaf option-set-id {
type leafref {
path "/server/server-config/option-sets/option-set/option-set-id";
} }
leaf network-prefix { mandatory true;
description "The ID field of relevant option-set to be
provisioned to clients of this address-pool.";
}
}
}
container pd-pools {
description "If a server supports prefix delegation function, this
container will be used to define the delegating router's prefix
pools.";
list pd-pool {
key pool-id;
description "Similar to server's address pools, a delegating
router can also be configured with multiple prefix pools
specified by a list called 'prefix-pool'.";
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
leaf prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "subnet prefix"; description "ipv6 prefix";
} }
leaf inherit-option-set { leaf prefix-length {
type boolean; type uint8;
mandatory true; mandatory true;
description "indicate whether to inherit description "prefix length";
the configuration from higher level"; }
} leaf valid-lifetime {
leaf option-set-id { type yang:timeticks;
type leafref { mandatory true;
path "/server/server-config/option-sets/option-set/id"; description "valid lifetime for IA";
}
leaf renew-time {
type yang:timeticks;
mandatory true;
description "renew time";
}
leaf rebind-time {
type yang:timeticks;
mandatory true;
description "rebind time";
}
leaf preferred-lifetime {
type yang:timeticks;
mandatory true;
description "preferred lifetime for IA";
}
leaf rapid-commit {
type boolean;
mandatory true;
description "A boolean value specifies whether the server
support client-server exchanges involving two messages defined.";
}
leaf client-class {
type string;
description "client class";
}
leaf max-pd-space-utlization {
type threshold;
mandatory true;
description "Maximum utilization of pd space in this pool";
}
leaf option-set-id {
type leafref {
path "/server/server-config/option-sets/option-set/option-set-id";
} }
mandatory true;
description "The ID field of relevant option-set to be description "The ID field of relevant option-set to be
provisioned to clients of this network-range."; provisioned to clients of this prefix-pool.";
} }
}
}
container reserved-addresses { container host-reservations {
description "reserved addresses"; description
list static-binding { "This container allows the server to make reservations at host level.";
key cli-id; list host-reservation {
description "static binding of key cli-id;
reserved addresses"; description "This list allows the server to reserve addresses,
leaf cli-id { prefixes, hostname and options for different clients.";
type uint32; leaf cli-id {
mandatory true; type uint32;
description "client id"; mandatory true;
} description "client id";
container duid { }
description "Sets the DUID";
uses duid;
}
leaf-list reserv-addr {
type inet:ipv6-address;
description "reserved addr";
}
}
leaf-list other-reserv-addr {
type inet:ipv6-address;
description "other reserved
addr";
}
}
container reserved-prefixes { choice client-identifier {
description "reserved prefixes"; description "When making reservations, the server needs to choose a
list static-binding { identifier to identify the server. Currently 'DUID' and 'hardware
key cli-id; address' are supported.";
description "static binding"; case duid {
leaf cli-id { description "DUID";
type uint32; uses dhcpv6-types:duid;
mandatory true;
description "client id";
}
container duid {
description "Sets the DUID";
uses duid;
}
leaf reserv-prefix-len {
type uint8;
mandatory true;
description "reserved
prefix length";
}
leaf reserv-prefix {
type inet:ipv6-prefix;
mandatory true;
description
"reserved prefix";
}
}
leaf exclude-prefix-len {
type uint8;
mandatory true;
description "exclude prefix
length";
}
leaf exclude-prefix {
type inet:ipv6-prefix;
mandatory true;
description "exclude prefix";
}
list other-reserv-prefix {
key reserv-id;
description
"other reserved prefix";
leaf reserv-id {
type uint32;
mandatory true;
description
"reserved prefix id";
}
leaf prefix-len {
type uint8;
mandatory true;
description "prefix length";
}
leaf prefix {
type inet:ipv6-prefix;
mandatory true;
description
"reserved prefix";
}
}
} }
case hw-address {
container address-pools { description "hardware address";
description "A container that describes leaf hardware-address {
the DHCPv6 server's address pools."; type yang:mac-address;
list address-pool { description "MAC address of client";
key pool-id; }
description "A DHCPv6 server can
be configured with several address
pools. This list defines such
address pools which are distinguished
by the key called 'pool-name'.";
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
leaf pool-prefix {
type inet:ipv6-prefix;
mandatory true;
description "pool prefix";
}
leaf start-address {
type inet:ipv6-address-no-zone;
mandatory true;
description "start address";
}
leaf end-address {
type inet:ipv6-address-no-zone;
mandatory true;
description "end address";
}
leaf renew-time {
type yang:timeticks;
mandatory true;
description "renew time";
}
leaf rebind-time {
type yang:timeticks;
mandatory true;
description "rebind time";
}
leaf preferred-lifetime {
type yang:timeticks;
mandatory true;
description "preferred lifetime
for IA";
}
leaf valid-lifetime {
type yang:timeticks;
mandatory true;
description "valid liftime for IA";
}
leaf max-address-utilization-ratio {
type threshold;
mandatory true;
description "address pool utilization ratio threshold";
}
leaf inherit-option-set {
type boolean;
mandatory true;
description "indicate whether to
inherit the configuration from
higher level";
}
leaf option-set-id {
type leafref {
path "/server/server-config/option-sets/option-set/id";
}
mandatory true;
description "The ID field of relevant option-set to be
provisioned to clients of this address-pool.";
}
} }
} }
container prefix-pools { leaf-list reserv-addr {
description "If a server supports prefix type inet:ipv6-address;
delegation function, this container will description "reserved addr";
be used to define the delegating router's
refix pools.";
list prefix-pool {
key pool-id;
description "Similar to server's
address pools, a delegating router
can also be configured with multiple
prefix pools specified by a list
called 'prefix-pool'.";
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
leaf prefix {
type inet:ipv6-prefix;
mandatory true;
description "ipv6 prefix";
}
leaf prefix-length {
type uint8;
mandatory true;
description "prefix length";
}
leaf renew-time {
type yang:timeticks;
mandatory true;
description "renew time";
}
leaf rebind-time {
type yang:timeticks;
mandatory true;
description "rebind time";
}
leaf preferred-lifetime {
type yang:timeticks;
mandatory true;
description "preferred lifetime for
IA";
}
leaf valid-lifetime {
type yang:timeticks;
mandatory true;
description "valid lifetime for IA";
}
leaf max-prefix-utilization-ratio {
type threshold;
mandatory true;
description "prefix pool utilization ratio threshold";
}
leaf inherit-option-set {
type boolean;
mandatory true;
description "whether to inherit
configuration from higher level";
}
leaf option-set-id {
type leafref {
path "/server/server-config/option-sets/option-set/id";
}
description "The ID field of relevant option-set to be
provisioned to clients of this prefix-pool.";
}
}
}
container hosts {
description "hosts level";
list host {
key cli-id;
description "specific host";
leaf cli-id {
type uint32;
mandatory true;
description "client id";
}
container duid {
description "Sets the DUID";
uses duid;
}
leaf inherit-option-set {
type boolean;
mandatory true;
description "whether to inherit
configuration
from higher level";
}
leaf option-set-id {
type leafref {
path "/server/server-config/option-sets/option-set/id";
}
description "The ID field of relevant option-set to be
provisioned to clients of this prefix-pool.";
}
leaf nis-domain-name {
type string;
description "nis domain name";
}
leaf nis-plus-domain-name {
type string;
description "nisp domain name";
}
}
}
} }
} list prefix-reservation {
container relay-opaque-paras { key reserv-prefix-id;
description "This container contains some description "reserved prefix reservation";
opaque values in Relay Agent options that leaf reserv-prefix-id {
need to be configured on the server side type uint32;
only for value match. Such Relay Agent
options include Interface-Id option,
Remote-Id option and Subscriber-Id option.";
list relays {
key relay-name;
description "relay agents";
leaf relay-name {
type string;
mandatory true; mandatory true;
description "relay agent name"; description "reserved prefix id";
}
list interface-info {
key if-name;
description "interface info";
leaf if-name {
type string;
mandatory true;
description "interface name";
}
leaf interface-id {
type string;
mandatory true;
description "interface id";
}
}
list subscribers {
key subscriber;
description "subscribers";
leaf subscriber {
type uint32;
mandatory true;
description "subscriber";
}
leaf subscriber-id {
type string;
mandatory true;
description "subscriber id";
}
}
list remote-host {
key ent-num;
description "remote host";
leaf ent-num {
type uint32;
mandatory true;
description "enterprise number";
}
leaf remote-id {
type string;
mandatory true;
description "remote id";
}
} }
} leaf reserv-prefix {
} type inet:ipv6-prefix;
container rsoo-enabled-options {
description "rsoo enabled options";
list rsoo-enabled-option{
key option-code;
description "rsoo enabled option";
leaf option-code {
type uint16;
mandatory true; mandatory true;
description "option code"; description "reserved prefix";
} }
leaf description { leaf reserv-prefix-len {
type string; type uint8;
mandatory true; mandatory true;
description "description of the option"; description "reserved prefix length";
}
}
leaf hostname {
type string;
description "reserved hostname";
}
leaf option-set-id {
type leafref {
path "/server/server-config/option-sets/option-set/option-set-id";
} }
description "The ID field of relevant option-set to be provisioned
in the host reservation.";
} }
} }
}
}
}
container relay-opaque-paras {
description "This container contains some opaque values in Relay Agent
options that need to be configured on the server side only for value
match. Such Relay Agent options include Interface-Id option,
Remote-Id option and Subscriber-Id option.";
list relays {
key relay-name;
description "relay agents";
leaf relay-name {
type string;
mandatory true;
description "relay agent name";
}
list interface-info {
key if-name;
description "interface info";
leaf if-name {
type string;
mandatory true;
description "interface name";
}
leaf interface-id {
type string;
mandatory true;
description "interface id";
}
}
list subscribers {
key subscriber;
description "subscribers";
leaf subscriber {
type uint32;
mandatory true;
description "subscriber";
}
leaf subscriber-id {
type string;
mandatory true;
description "subscriber id";
}
}
list remote-host {
key ent-num;
description "remote host";
leaf ent-num {
type uint32;
mandatory true;
description "enterprise number";
}
leaf remote-id {
type string;
mandatory true;
description "remote id";
}
}
}
}
container rsoo-enabled-options {
description "rsoo enabled options";
list rsoo-enabled-option {
key option-code;
description "rsoo enabled option";
leaf option-code {
type uint16;
mandatory true;
description "option code";
}
leaf description {
type string;
mandatory true;
description "description of the option";
}
}
}
} }
/* /*
* State data * State data
*/ */
container server-state{ container server-state {
config "false"; config "false";
description "states of server"; description "states of server";
container network-ranges{ container network-ranges {
description "This model supports a hierarchy description "This model supports a hierarchy to achieve dynamic configuration.
to achieve dynamic configuration. That is to That is to say we could configure the server at different levels through
say we could configure the server at different this model. The top level is a global level which is defined as the container
levels through this model. The top level is a 'network-ranges'. The following levels are defined as sub-containers under it.
global level which is defined as the container The 'network-ranges' contains the parameters (e.g. option-sets) that would be
'network-ranges'. The following levels are allocated to all the clients served by this server.";
defined as sub-containers under it. The list network-range {
'network-ranges' contains the parameters
(e.g. option-sets) that would be allocated to
all the clients served by this server.";
list network-range{
key network-range-id; key network-range-id;
description "The ID field of relevant option-set to be description "The ID field of relevant option-set to be provisioned
provisioned to clients of this network-range."; to clients of this network-range.";
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";
} }
container address-pools{ container address-pools {
description "A container that describes description "A container that describes the DHCPv6 server's address pools";
the DHCPv6 server's address pools"; list address-pool {
list address-pool{
key pool-id; key pool-id;
leaf pool-id { description "A DHCPv6 server can be configured with
type uint32; several address pools. This list defines such address pools
mandatory true; which are distinguished by the key called 'pool-id'.";
description "pool id"; leaf pool-id {
} type uint32;
description "...";
leaf total-ipv6-count {
type uint64;
mandatory true; mandatory true;
description "how many ipv6 addresses description "pool id";
are in the pool";
} }
leaf used-ipv6-count { leaf total-address-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "how many are allocated"; description "count of total addresses in the pool";
} }
leaf address-utilization-ratio { leaf allocated-address-conut {
type uint16; type uint64;
mandatory true; mandatory true;
description "current address pool utilization ratio"; description "count of allocated addresses in the pool";
} }
} }
list binding-info { list binding-info {
key cli-id; key cli-id;
description "A list that records a binding description "A list that records a binding information for each DHCPv6
information for each DHCPv6 client client that has already been allocated IPv6 addresses.";
that has already been allocated
IPv6 addresses.";
leaf cli-id { leaf cli-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "client id"; description "client id";
} }
container duid { container duid {
description "Read the DUID"; description "Read the DUID";
uses duid; uses dhcpv6-types:duid;
} }
list cli-ia{ list cli-ia {
key iaid; key iaid;
description "client IA"; description "client IA";
leaf ia-type { leaf ia-type {
type string; type string;
mandatory true; mandatory true;
description "IA type"; description "IA type";
} }
leaf iaid { leaf iaid {
type uint32; type uint32;
mandatory true; mandatory true;
skipping to change at page 43, line 16 skipping to change at page 39, line 20
description "client addr"; description "client addr";
} }
leaf pool-id { leaf pool-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "pool id"; description "pool id";
} }
} }
} }
} }
container prefix-pools{ container pd-pools {
description "If a server supports prefix description "If a server supports prefix delegation function,
delegation function, this container will this container will be used to define the delegating
be used to define the delegating router's router's prefix pools.";
prefix pools.";
list prefix-pool { list prefix-pool {
key pool-id; key pool-id;
description "Similar to server's address pools, description "Similar to server's address pools, a delegating
a delegating router can also be configured with router can also be configured with multiple prefix pools
multiple prefix pools specified by a list specified by a list called 'prefix-pool'.";
called 'prefix-pool'.";
leaf pool-id { leaf pool-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "pool id"; description "pool id";
} }
leaf prefix-utilization-ratio { leaf pd-space-utilization {
type uint16; type threshold;
mandatory true; mandatory true;
description "current prefix pool utilization ratio"; description "current PD space utilization";
} }
} }
list binding-info { list binding-info {
key cli-id; key cli-id;
description "A list records a binding information description "A list records a binding information for each DHCPv6
for each DHCPv6 client that has already been client that has already been alloated IPv6 prefixes.";
alloated IPv6 addresses.";
leaf cli-id { leaf cli-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "client id"; description "client id";
} }
container duid { container duid {
description "Reads the DUID"; description "Reads the DUID";
uses duid; uses dhcpv6-types:duid;
} }
list cli-iapd { list cli-iapd {
key iaid; key iaid;
description "client IAPD"; description "client IAPD";
leaf iaid { leaf iaid {
type uint32; type uint32;
mandatory true; mandatory true;
description "IAID"; description "IAID";
} }
leaf-list cli-prefix { leaf-list cli-prefix {
skipping to change at page 44, line 25 skipping to change at page 40, line 27
} }
leaf-list cli-prefix-len { leaf-list cli-prefix-len {
type uint8; type uint8;
description "client prefix length"; description "client prefix length";
} }
leaf pool-id { leaf pool-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "pool id"; description "pool id";
} }
} }
} }
} }
list address-prefix-assign-param { container host-reservations {
// Zihao - This probably needs further updated. description "This container provides host reservations in the host level.";
// But is it a way to represent the address/prefix assignment list binding-info {
// logic?
key cli-id; key cli-id;
description "This list includes some parameters/identifiers description
that the server obtains from DHCPv6 options in this network-range. "A list records a binding information for each DHCPv6
These identifiers may be helpful for the server to assign client that has already been alloated IPv6 addresses or prefixes
addresses/prefixes."; by host reservations.";
reference "Section 3.12 of RFC7824";
leaf cli-id { leaf cli-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "client id"; description "client id";
} }
leaf source-ipv6-addr {
type inet:ipv6-address;
description "The adrress of the link to which the client
is attached.";
}
container duid { container duid {
description "The DUID supplied by the client."; description "Reads the DUID";
uses duid; uses dhcpv6-types:duid;
}
leaf-list iaid {
type uint32;
description "IAID";
}
leaf-list preferred-addr {
type inet:ipv6-address;
description "The IPv6 address preferred by the client.";
}
leaf-list preferred-prefix-len {
type uint8;
description "The prefix length preferred by the client.";
}
leaf client-fqdn {
type string;
description "Fully Qualified Domain Name supplied by the client.";
}
leaf client-link-layer-addr {
type uint16;
description "Link-layer address supplied by the client.";
} }
leaf client-enterprise-number { list cli-ia {
type uint32; key iaid;
description "Enterprise number supplied by the client."; description "client IA";
leaf ia-type {
type string;
mandatory true;
description "IA type, IA_NA or IA_TA";
}
leaf iaid {
type uint32;
mandatory true;
description "IAID";
}
leaf-list cli-addr {
type inet:ipv6-address;
description "client addr";
}
} }
leaf-list client-sys-archi-type {
type uint16; list cli-iapd {
description "Supported system architecture type supplied by key iaid;
the client"; description "client IAPD";
leaf iaid {
type uint32;
mandatory true;
description "IAID";
}
leaf-list cli-prefix {
type inet:ipv6-prefix;
description "client ipv6 prefix";
}
leaf-list cli-prefix-len {
type uint8;
description "client prefix length";
}
} }
} }
}
} }
} }
container packet-stats { container packet-stats {
description "A container presents description "A container presents the packet statistics related to
the packet statistics related to the DHCPv6 server.";
the DHCPv6 server."; leaf solicit-count {
leaf solicit-count { type uint32;
type uint32; mandatory true;
mandatory true; description "solicit counter";
description "solicit counter"; }
} leaf request-count {
leaf request-count { type uint32;
type uint32; mandatory true;
mandatory true; description "request counter";
description "request counter"; }
} leaf renew-count {
leaf renew-count { type uint32;
type uint32; mandatory true;
mandatory true; description "renew counter";
description "renew counter"; }
} leaf rebind-count {
leaf rebind-count { type uint32;
type uint32; mandatory true;
mandatory true; description "rebind counter";
description "rebind counter"; }
} leaf decline-count {
leaf decline-count { type uint32;
type uint32; mandatory true;
mandatory true; description "decline count";
description "decline count"; }
} leaf release-count {
leaf release-count { type uint32;
type uint32; mandatory true;
mandatory true; description "release counter";
description "release counter"; }
} leaf info-req-count {
leaf info-req-count { type uint32;
type uint32; mandatory true;
mandatory true; description "information request counter";
description "information request }
counter"; leaf advertise-count {
} type uint32;
leaf advertise-count { mandatory true;
type uint32; description "advertise counter";
mandatory true; }
description "advertise counter"; leaf confirm-count {
} type uint32;
leaf confirm-count { mandatory true;
type uint32; description "confirm counter";
mandatory true; }
description "confirm counter"; leaf reply-count {
} type uint32;
leaf reply-count { mandatory true;
type uint32; description "reply counter";
mandatory true; }
description "reply counter"; leaf reconfigure-count {
} type uint32;
leaf reconfigure-count { mandatory true;
type uint32; description "reconfigure counter";
mandatory true; }
description "reconfigure counter"; leaf relay-forward-count {
type uint32;
} mandatory true;
leaf relay-forward-count { description "relay forward counter";
type uint32; }
mandatory true; leaf relay-reply-count {
description "relay forward counter"; type uint32;
} mandatory true;
leaf relay-reply-count { description "relay reply counter";
type uint32;
mandatory true;
description "relay reply counter";
}
} }
} }
}
} }
/* /*
* Notifications * Notifications
*/ */
notification notifications { notification notifications {
description "dhcpv6 server notification module"; description "dhcpv6 server notification module";
container dhcpv6-server-event { container dhcpv6-server-event {
description "dhcpv6 server event"; description "dhcpv6 server event";
container pool-running-out { container address-pool-running-out {
description "raised when the address/prefix pool is going to description "raised when the address pool is going to
run out. A threshold for utilization ratio of the pool has run out. A threshold for utilization ratio of the pool has
been defined in the server feature so that it will notify the been defined in the server feature so that it will notify the
administrator when the utilization ratio reaches the administrator when the utilization ratio reaches the
threshold, and such threshold is a settable parameter"; threshold, and such threshold is a settable parameter";
leaf max-address-utilization-ratio { leaf total-address-count {
type uint16; type uint64;
mandatory true; mandatory true;
description "address pool utilization ratio threshold"; description "count of total addresses in the pool";
} }
leaf address-utilization-ratio { leaf max-address-count {
type uint16; type uint64;
mandatory true; mandatory true;
description "current address pool utilization ratio"; description "maximum count of addresses that can be allocated
} in the pool. This value may be less than count of total
leaf max-prefix-utilization-ratio { addresses";
type uint16; }
mandatory true; leaf allocated-address-conut {
description "prefix pool utilization ratio threshold"; type uint64;
} mandatory true;
leaf prefix-utilization-ratio { description "count of allocated addresses in the pool";
type uint16; }
mandatory true; container duid {
description "current prefix pool utilization ratio"; description "server duid";
} uses dhcpv6-types:duid;
container duid { }
description "Sets the DUID"; leaf serv-name {
uses duid; type string;
} description "server name";
leaf serv-name { }
type string; leaf pool-name {
description "server name"; type string;
} mandatory true;
leaf pool-name { description "pool name";
type string; }
mandatory true;
description "pool name";
} }
} container pd-pool-running-out {
container invalid-client-detected { description "raised when the address/prefix pool is going to
description "raised when the server has found a client which run out. A threshold for utilization ratio of the pool has
can be regarded as a potential attacker. Some description been defined in the server feature so that it will notify the
could also be included."; administrator when the utilization ratio reaches the
container duid { threshold, and such threshold is a settable parameter";
description "Sets the DUID"; leaf max-pd-space-utilization {
uses duid; type threshold;
mandatory true;
description "maximum pd space utilization";
}
leaf pd-space-utilization {
type threshold;
mandatory true;
description "current pd space utilization";
}
container duid {
description "Sets the DUID";
uses dhcpv6-types:duid;
}
leaf serv-name {
type string;
description "server name";
}
leaf pool-name {
type string;
mandatory true;
description "pool name";
}
} }
leaf description { container invalid-client-detected {
type string; description "raised when the server has found a client which
description "description of the event"; can be regarded as a potential attacker. Some description
could also be included.";
container duid {
description "Sets the DUID";
uses dhcpv6-types:duid;
}
leaf description {
type string;
description "description of the event";
}
} }
} }
} }
}
} }
<CODE ENDS> <CODE ENDS>
3.2. DHCPv6 Relay YANG Model 3.2. DHCPv6 Relay YANG Model
This module imports typedefs from [RFC6991]. This module imports typedefs from [RFC6991], [RFC7223].
<CODE BEGINS> file "ietf-dhcpv6-relay@2017-12-22.yang" <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-client"; prefix "dhcpv6-relay";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
revision-date "2013-07-15";
} }
import ietf-dhcpv6-options { import ietf-dhcpv6-options {
prefix dhcpv6-options; prefix dhcpv6-options;
revision-date "2017-12-22"; }
import ietf-dhcpv6-types {
prefix dhcpv6-types;
}
import ietf-interfaces {
prefix if;
} }
organization "DHC WG"; organization
contact "yong@csnet1.cs.tsinghua.edu.cn "IETF DHC (Dynamic Host Configuration) Working group";
lh.sunlinh@gmail.com
ian.farrer@telekom.de
sladjana.zechlin@telekom.de
hezihao9512@gmail.com";
description "This model defines a YANG data model that can be
used to configure and manage a DHCPv6 relay.";
revision 2017-12-22 { contact
description "Resolve most issues on Ian's github."; "cuiyong@tsinghua.edu.cn
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; lh.sunlinh@gmail.com
} ian.farrer@telekom.de
sladjana.zechlin@telekom.de
hezihao9512@gmail.com";
revision 2017-11-24 { description
description "First version of the separated relay specific "This model defines a YANG data model that can be
YANG model."; used to configure and manage a DHCPv6 relay.";
revision 2018-03-04 {
description "Resolved most issues on the DHC official
github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
/* revision 2017-12-22 {
* Grouping description
*/ "Resolve most issues on Ian's github.";
reference
"I-D: draft-ietf-dhc-dhcpv6-yang";
}
grouping vendor-infor { revision 2017-11-24 {
description "Vendor information."; description
container vendor-info { "First version of the separated relay specific
description ""; YANG model.";
leaf ent-num { reference
type uint32; "I-D: draft-ietf-dhc-dhcpv6-yang";
mandatory true;
description "enterprise number";
}
leaf-list data {
type string;
description "specific vendor info";
}
}
} }
/* /*
* Data Nodes * Data Nodes
*/ */
container relay { container relay {
presence "Enables the relay"; presence
description "dhcpv6 relay portion"; "Enables the relay";
container relay-config{ description
description "configuration tree of relay"; "DHCPv6 relay portion";
container relay-attributes {
description "A container describes
some basic attributes of the relay
agent including some relay agent
specific options data that need to
be configured previously. Such options
include Remote-Id option and
Subscriber-Id option.";
leaf name {
type string;
description "relay agent name";
}
leaf description {
type string;
description "description of the relay agent";
}
leaf-list dest-addrs {
type inet:ipv6-address;
description "Each DHCPv6 relay agent may
be configured with a list of destination
addresses. This node defines such a list
of IPv6 addresses that may include
unicast addresses, multicast addresses
or other addresses.";
}
list subscribers {
key subscriber;
description "subscribers";
leaf subscriber {
type uint8;
mandatory true;
description "subscriber";
}
leaf subscriber-id {
type string;
mandatory true;
description "subscriber id";
}
}
list remote-host {
key ent-num;
description "remote host";
leaf ent-num {
type uint32;
mandatory true;
description "enterprise number";
}
leaf remote-id {
type string;
mandatory true;
description "remote id";
}
}
uses vendor-infor;
}
container rsoo-option-sets { container relay-config {
description "DHCPv6 relay agent could provide description
some information that would be useful to DHCPv6 client. "This container contains the configuration data
Since relay agent cannot provide options directly to of the relay.";
the client, RSOO-enabled options are defined to container relay-attributes {
propose options for the server to send to the client. description
This container models such RSOO-enabled options."; "A container describes some basic attributes of the relay
reference "RFC6422"; agent including some relay agent specific options data that
list option-set { need to be configured previously.
key id; Such options include Remote-Id option and Subscriber-Id
description "This list under the 'rsoo-option-sets' container option.";
is similar to the that defined in server module. It allows leaf name {
the relay to implement several sets of RSOO-enabled options type string;
for different interfaces. The list only include the EAP description
Re-authentication Protocol (ERP) Local Domain Name DHCPv6 Option "Relay agent name";
defined in RFC6440, since it is the only one }
RSOO-enabled options accepted by IANA so far."; leaf description {
leaf id { type string;
type uint32; description
description "option sed id"; "Textual description of the relay agent";
} }
uses dhcpv6-options:relay-supplied-option-definitions; leaf-list dest-addrs {
} type inet:ipv6-address;
description
"Each DHCPv6 relay agent may be configured with a list
of destination addresses.
This node defines such a list of IPv6 addresses that
may include unicast addresses, multicast addresses or
other addresses.";
}
list subscribers {
key subscriber;
description
"Subscribers";
leaf subscriber {
type uint8;
mandatory true;
description
"Subscriber";
} }
leaf subscriber-id {
list relay-if { type string;
// if - This should reference an entry in ietf-interfaces mandatory true;
key if-name; description
description "A relay agent may have several "Subscriber id";
interfaces, we should provide a way to configure
and manage parameters on the interface-level. A
list that describes specific interfaces and
their corresponding parameters is employed to
fulfil the configfuration. Here we use a string
called 'if-name; as the key of list.";
leaf if-name {
type string;
mandatory true;
description "interface name";
}
leaf enable {
type boolean;
mandatory true;
description
"whether this interface is enabled";
}
leaf ipv6-address {
type inet:ipv6-address;
description
"ipv6 address for this interface";
}
leaf interface-id {
type string;
description "interface id";
}
leaf rsoo-option-set-id {
type leafref {
path "/relay/relay-config/rsoo-option-sets/option-set/id";
}
description "Configured Relay Supplied Option set";
}
list next-entity {
key dest-addr;
description "This node defines
a list that is used to describe
the next hop entity of this
relay distinguished by their
addresses.";
leaf dest-addr {
type inet:ipv6-address;
mandatory true;
description "destination addr";
}
leaf available {
type boolean;
mandatory true;
description "whether the next entity
is available or not";
}
leaf multicast {
type boolean;
mandatory true;
description "whether the address is
multicast or not";
}
leaf server {
type boolean;
mandatory true;
description "whether the next entity
is a server";
}
}
} }
}
list remote-host {
key ent-num;
description
"Remote host";
leaf ent-num {
type uint32;
mandatory true;
description
"Enterprise number";
}
leaf remote-id {
type string;
mandatory true;
description
"Remote id";
}
}
uses dhcpv6-types:vendor-infor;
}
container rsoo-option-sets {
description
"DHCPv6 relay agent could provide some information that would
be useful to DHCPv6 client.
Since relay agent cannot provide options directly to the
client, RSOO-enabled options are defined to propose options
for the server to send to the client.
This container models such RSOO-enabled options.";
reference
"RFC6422";
list option-set {
key option-set-id;
description
"This list under the 'rsoo-option-sets' container is similar
to the that defined in server module.
It allows the relay to implement several sets of RSOO-enabled
options for different interfaces.
The list only includes the EAP Re-authentication Protocol
(ERP) Local Domain Name DHCPv6 Option defined in RFC6440,
since it is the only one RSOO-enabled options accepted by
IANA so far.";
leaf option-set-id {
type uint32;
description "Option sed id";
}
uses dhcpv6-options:relay-supplied-option-definitions;
}
}
} list relay-if {
// if - This should reference an entry in ietf-interfaces
key if-name;
description
"A relay agent may have several interfaces, we should provide
a way to configure and manage parameters on the interface-level.
A list that describes specific interfaces and their corresponding
parameters is employed to fulfil the configfuration. Here we use
a string called 'if-name' as the key of list.";
leaf if-name {
type if:interface-ref;
mandatory true;
description
"Interface name";
}
leaf interface-id {
type string;
description
"Interface id";
container relay-state{ }
config "false";
description "state tree of relay"; /*
list relay-if{ leaf enable {
key if-name; type boolean;
description "...";
leaf if-name{
type string;
mandatory true;
description "interface name";
}
list pd-route {
// if - need to look at if/how we model these. If they are
// going to be modelled, then they should be ro state
// entries (we're not trying to configure routes here)
key pd-route-id;
description "pd route";
leaf pd-route-id {
type uint8;
mandatory true;
description "pd route id";
}
leaf requesting-router-id {
type uint32;
mandatory true;
description "requesting router id";
}
leaf delegating-router-id {
type uint32;
mandatory true;
description "delegating router id";
}
leaf next-router {
type inet:ipv6-address;
mandatory true;
description "next router";
}
leaf last-router {
type inet:ipv6-address;
mandatory true;
description "previous router";
}
}
list next-entity{
key dest-addr;
description "This node defines a list that is used to
describe the next hop entity of this relay agent.
Different entities are distinguished by their
addresses.";
leaf dest-addr{
type inet:ipv6-address;
mandatory true; mandatory true;
description "destination addr"; description "whether this interface is enabled";
} }
container packet-stats { */
description "packet statistics";
leaf solicit-rvd-count { leaf ipv6-address {
type uint32; type inet:ipv6-address;
mandatory true; description
description "IPv6 address for this interface";
"solicit received counter";
}
leaf request-rvd-count {
type uint32;
mandatory true;
description
"request received counter";
}
leaf renew-rvd-count {
type uint32;
mandatory true;
description
"renew received counter";
}
leaf rebind-rvd-count {
type uint32;
mandatory true;
description
"rebind recevied counter";
}
leaf decline-rvd-count {
type uint32;
mandatory true;
description
"decline received counter";
}
leaf release-rvd-count {
type uint32;
mandatory true;
description
"release received counter";
}
leaf info-req-rvd-count {
type uint32;
mandatory true;
description
"information request counter";
}
leaf relay-for-rvd-count {
type uint32;
mandatory true;
description
"relay forward received counter";
}
leaf relay-rep-rvd-count {
type uint32;
mandatory true;
description
"relay reply received counter";
}
leaf packet-to-cli-count {
type uint32;
mandatory true;
description
"packet to client counter";
}
leaf adver-sent-count {
type uint32;
mandatory true;
description
"advertisement sent counter";
}
leaf confirm-sent-count {
type uint32;
mandatory true;
description
"confirm sent counter";
}
leaf reply-sent-count {
type uint32;
mandatory true;
description
"reply sent counter";
}
leaf reconfig-sent-count {
type uint32;
mandatory true;
description
"reconfigure sent counter";
}
leaf relay-for-sent-count {
type uint32;
mandatory true;
description
"relay forward sent counter";
}
leaf relay-rep-sent-count {
type uint32;
mandatory true;
description
"relay reply sent counter";
}
} }
leaf rsoo-option-set-id {
type leafref {
path "/relay/relay-config/rsoo-option-sets/option-set/option-set-id";
}
description "Configured Relay Supplied Option set";
}
list next-entity {
key dest-addr;
description
"This node defines a list that is used to describe the
next hop entity of this relay distinguished by their
addresses.";
leaf dest-addr {
type inet:ipv6-address;
mandatory true;
description
"Destination addr";
}
leaf available {
type boolean;
mandatory true;
description
"Whether the next entity is available or not";
}
leaf multicast {
type boolean;
mandatory true;
description
"Whether the address is multicast or not";
}
leaf server {
type boolean;
mandatory true;
description
"Whether the next entity is a server";
}
}
} }
} }
container relay-stats { container relay-state {
config "false"; config "false";
description "relay statistics"; description
leaf cli-packet-rvd-count { "State data of relay";
type uint32; list relay-if {
key if-name;
description
"A relay agent may have several interfaces, we should provide
a way to configure and manage parameters on the interface-level.
A list that describes specific interfaces and their corresponding
parameters is employed to fulfil the configfuration. Here we use
a string called 'if-name' as the key of list.";
leaf if-name{
type string;
mandatory true;
description
"Interface name";
}
list pd-route {
// if - need to look at if/how we model these. If they are
// going to be modelled, then they should be ro state
// entries (we're not trying to configure routes here)
key pd-route-id;
description "pd route";
leaf pd-route-id {
type uint8;
mandatory true; mandatory true;
description "client packet received counter"; description
"PD route id";
} }
leaf relay-for-rvd-count { leaf requesting-router-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "relay forward received counter"; description
"Requesting router id";
} }
leaf relay-rep-rvd-count { leaf delegating-router-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "relay reply recevied counter"; description
"Delegating router id";
} }
leaf packet-to-cli-count { leaf next-router {
type uint32; type inet:ipv6-address;
mandatory true; mandatory true;
description "packet to client counter"; description
"Next router";
} }
leaf relay-for-sent-count { leaf last-router {
type uint32; type inet:ipv6-address;
mandatory true; mandatory true;
description "relay forward sent counter"; description
"Previous router";
} }
leaf relay-rep-sent-count { }
type uint32; list next-entity {
key dest-addr;
description "This node defines a list that is used to
describe the next hop entity of this relay agent.
Different entities are distinguished by their
addresses.";
leaf dest-addr {
type inet:ipv6-address;
mandatory true; mandatory true;
description "relay reply sent counter"; description "destination addr";
} }
leaf discarded-packet-count { container packet-stats {
type uint32; description "packet statistics";
mandatory true; leaf solicit-rvd-count {
description "discarded packet counter"; type uint32;
mandatory true;
description "solicit received counter";
}
leaf request-rvd-count {
type uint32;
mandatory true;
description "request received counter";
}
leaf renew-rvd-count {
type uint32;
mandatory true;
description "renew received counter";
}
leaf rebind-rvd-count {
type uint32;
mandatory true;
description "rebind recevied counter";
}
leaf decline-rvd-count {
type uint32;
mandatory true;
description "decline received counter";
}
leaf release-rvd-count {
type uint32;
mandatory true;
description "release received counter";
}
leaf info-req-rvd-count {
type uint32;
mandatory true;
description "information request counter";
}
leaf relay-for-rvd-count {
type uint32;
mandatory true;
description "relay forward received counter";
}
leaf relay-rep-rvd-count {
type uint32;
mandatory true;
description "relay reply received counter";
}
leaf packet-to-cli-count {
type uint32;
mandatory true;
description "packet to client counter";
}
leaf adver-sent-count {
type uint32;
mandatory true;
description "advertisement sent counter";
}
leaf confirm-sent-count {
type uint32;
mandatory true;
description "confirm sent counter";
}
leaf reply-sent-count {
type uint32;
mandatory true;
description "reply sent counter";
}
leaf reconfig-sent-count {
type uint32;
mandatory true;
description "reconfigure sent counter";
}
leaf relay-for-sent-count {
type uint32;
mandatory true;
description "relay forward sent counter";
}
leaf relay-rep-sent-count {
type uint32;
mandatory true;
description "relay reply sent counter";
}
} }
} }
}
} container relay-stats {
config "false";
description
"Relay statistics";
leaf cli-packet-rvd-count {
type uint32;
mandatory true;
description
"Client packet received counter";
}
leaf relay-for-rvd-count {
type uint32;
mandatory true;
description
"Relay forward received counter";
}
leaf relay-rep-rvd-count {
type uint32;
mandatory true;
description
"Relay reply recevied counter";
}
leaf packet-to-cli-count {
type uint32;
mandatory true;
description
"Packet to client counter";
}
leaf relay-for-sent-count {
type uint32;
mandatory true;
description
"Relay forward sent counter";
}
leaf relay-rep-sent-count {
type uint32;
mandatory true;
description
"Relay reply sent counter";
}
leaf discarded-packet-count {
type uint32;
mandatory true;
description
"Discarded packet counter";
}
}
}
} }
/* /*
* Notifications * Notifications
*/ */
notification notifications { notification notifications {
description "dhcpv6 relay notification module"; description "DHCPv6 relay notification module";
container dhcpv6-relay-event { container dhcpv6-relay-event {
description "dhcpv6 relay event"; description
"DHCPv6 relay event";
container topo-changed { container topo-changed {
description "raised when the topology description
of the relay agent is changed."; "Raised when the topology of the relay agent is changed.";
leaf relay-if-name { leaf relay-if-name {
type string; type string;
mandatory true; mandatory true;
description "relay interface name"; description
"Relay interface name";
} }
leaf first-hop { leaf first-hop {
type boolean; type boolean;
mandatory true; mandatory true;
description "first hop"; description
"First hop";
} }
leaf last-entity-addr { leaf last-entity-addr {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description "last entity address"; description
"Last entity address";
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3.3. DHCPv6 Client YANG Model 3.3. DHCPv6 Client YANG Model
This module imports typedefs from [RFC6991]. This module imports typedefs from [RFC6991], [RFC7223].
<CODE BEGINS> file "ietf-dhcpv6-client@2017-12-22.yang" <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 {
prefix inet;
revision-date "2013-07-15";
}
import ietf-yang-types {
prefix yang;
revision-date "2013-07-15";
}
import ietf-dhcpv6-options { import ietf-dhcpv6-options {
prefix dhcpv6-options; prefix dhcpv6-options;
revision-date "2017-12-22"; }
import ietf-dhcpv6-types {
prefix dhcpv6-types;
}
import ietf-interfaces {
prefix if;
} }
organization "DHC WG"; organization "DHC WG";
contact "yong@csnet1.cs.tsinghua.edu.cn contact
"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 ";
description "This model defines a YANG data model that can be description "This model defines a YANG data model that can be
used to configure and manage a DHCPv6 client."; used to configure and manage a DHCPv6 client.";
revision 2018-03-04 {
description "Resolved most issues on the DHC official
github";
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 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";
} }
/* /*
* Grouping * Data Nodes
*/ */
grouping vendor-infor { container client {
description "Vendor information."; presence "Enables the client";
container vendor-info { description "dhcpv6 client portion";
description "";
leaf ent-num {
type uint32;
mandatory true;
description "enterprise number";
}
leaf-list data {
type string;
description "specific vendor info";
}
}
}
grouping duid { container client-config {
description "DHCP Unique Identifier"; description "configuration tree of client";
reference "RFC3315: Section 9"; container duid {
leaf type-code { description "Sets the DUID";
type uint16; uses dhcpv6-types:duid;
default 65535; }
description "Type code of this DUID"; list client-if {
key if-name;
description "A client may have several interfaces, it is more reasonable to
configure and manage parameters on the interface-level. The list defines
specific client interfaces and their data. Different interfaces are
distinguished by the key which is a configurable string value.";
leaf if-name {
type if:interface-ref;
mandatory true;
description "interface name";
} }
choice duid-type {
default duid-invalid; leaf cli-id {
description "Selects the format for the DUID."; type uint32;
case duid-llt { mandatory true;
description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; description "client id";
reference "RFC3315 Section 9.2";
leaf duid-llt-hardware-type {
type uint16;
description "Hardware type as assigned by IANA (RFC826).";
}
leaf duid-llt-time {
type yang:timeticks;
description "The time value is the time that the DUID is generated
represented in seconds since midnight (UTC), January 1, 2000,
modulo 2^32.";
}
leaf duid-llt-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
}
} }
case duid-en {
description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; /*
reference "RFC3315 Section 9.3"; leaf description {
leaf duid-en-enterprise-number { type string;
type uint32; description "description of the client interface";
description "Vendor's registered Private Enterprise Number as
maintained by IANA";
}
leaf duid-en-identifier {
type string;
description "Indentifier, unique to the device that is using it";
}
} }
case duid-ll { */
description "DUID Based on Link-layer Address (Type 3 - DUID-LL)";
reference "RFC3315 Section 9.4"; leaf pd-function {
leaf duid-ll-hardware-type { type boolean;
type uint16; mandatory true;
description "Hardware type as assigned by IANA (RFC826)."; description "Whether the client can act as a requesting router
} to request prefixes using prefix delegation ([RFC3633]).";
leaf duid-ll-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
} }
leaf rapid-commit {
type boolean;
mandatory true;
description "'1' indicates a client can initiate a Solicit-Reply message
exchange by adding a Rapid Commit option in Solicit message. '0' means
the client is not allowed to add a Rapid Commit option to request
addresses in a two-message exchange pattern.";
} }
case duid-uuid {
description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)";
reference "RFC6335 Defination of the UUID-Based Unique Identifier";
leaf uuid {
type yang:uuid;
description "A Universally Unique IDentifier in the string representation
defined in RFC 4122. The canonical representation uses
lowercase characters";
/*
container mo-tab {
description "The management tab label indicates the operation mode of the
DHCPv6 client.
'm'=1 and 'o'=1 indicate the client will use DHCPv6 to obtain all the configuration
data.
'm'=1 and 'o'=0 are a meaningless combination.
'm'=0 and 'o'=1 indicate the client will use stateless DHCPv6 to obtain configuration
data apart from addresses/prefixes data.
'm'=0 and 'o'=0 represent the client will not use DHCPv6 but use SLAAC to
achieve configuration.";
// if - not sure about the intended use here as it seems
// to be redfining what will be received in the PIO. Is
// the intention to be whether they PIO options will be
// obeyed as received or overridden?
leaf m-tab {
type boolean;
mandatory true;
description "m tab";
} }
} leaf o-tab {
case duid-invalid { type boolean;
description "DUID based on free raw bytes"; mandatory true;
leaf data { description "o tab";
type binary;
description "The bits to be used as the identifier";
} }
} }
*/
container client-configured-options {
description "client configured options";
uses dhcpv6-options:client-option-definitions;
}
} }
} }
grouping portset-para {
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";
}
}
}
grouping iaid { container client-state {
description "IA is a construct through which a server and a config "false";
client can identify, group, and manage a set of related IPv6 description "state tree of client";
addresses. The key of the list is a 4-byte number IAID defined container if-other-paras {
in [RFC3315]."; description "A client can obtain extra configuration
list identity-association { data other than address and prefix information through
DHCPv6. This container describes such data the client
was configured. The potential configuration data may
include DNS server addresses, SIP server domain names, etc.";
uses dhcpv6-options:server-option-definitions;
}
container packet-stats {
config "false"; config "false";
key iaid; description "A container records
description "IA"; all the packet status information
leaf iaid { of a specific interface.";
leaf solicit-count {
type uint32; type uint32;
mandatory true; mandatory true;
description "IAID"; description "solicit counter";
} }
leaf ia-type { leaf request-count {
type string; type uint32;
mandatory true; mandatory true;
description "IA type"; description "request counter";
} }
leaf-list ipv6-addr { leaf renew-count {
type inet:ipv6-address; type uint32;
description "ipv6 address"; mandatory true;
description "renew counter";
} }
leaf-list ipv6-prefix { leaf rebind-count {
type inet:ipv6-prefix; type uint32;
description "ipv6 prefix"; mandatory true;
description "rebind counter";
} }
leaf-list prefix-length { leaf decline-count {
type uint8; type uint32;
description "ipv6 prefix length"; mandatory true;
description "decline counter";
} }
leaf t1-time { leaf release-count {
type yang:timeticks; type uint32;
mandatory true; mandatory true;
description "t1 time"; description "release counter";
} }
leaf t2-time { leaf info-req-count {
type yang:timeticks; type uint32;
mandatory true; mandatory true;
description "t2 time"; description "information request counter";
} }
leaf preferred-lifetime { leaf advertise-count {
type yang:timeticks; type uint32;
mandatory true; mandatory true;
description "preferred lifetime"; description "advertise counter";
} }
leaf valid-lifetime { leaf confirm-count {
type yang:timeticks; type uint32;
mandatory true; mandatory true;
description "valid lifetime"; description "confirm counter";
}
leaf reply-count {
type uint32;
mandatory true;
description "reply counter";
}
leaf reconfigure-count {
type uint32;
mandatory true;
description "recofigure counter";
} }
} }
}
/*
* Data Nodes
*/
container client {
presence "Enables the client";
description "dhcpv6 client portion";
container client-config{
description "configuration tree of client";
container duid {
description "Sets the DUID";
uses duid;
}
list client-if {
key if-name;
description "A client may have several
interfaces, it is more reasonable to
configure and manage parameters on
the interface-level. The list defines
specific client interfaces and their
data. Different interfaces are distinguished
by the key which is a configurable string
value.";
leaf if-name {
type string;
mandatory true;
description "interface name";
}
leaf cli-id {
type uint32;
mandatory true;
description "client id";
}
leaf description {
type string;
description
"description of the client interface";
}
leaf pd-function {
type boolean;
mandatory true;
description "Whether the client
can act as a requesting router
to request prefixes using prefix
delegation ([RFC3633]).";
}
leaf rapid-commit {
type boolean;
mandatory true;
description "'1' indicates a client can initiate a Solicit-Reply
message exchange by adding a Rapid Commit option in Solicit
message. '0' means the client is not allowed to add a Rapid
Commit option to request addresses in a two-message exchange
pattern.";
}
container mo-tab {
description "The management tab label indicates the operation
mode of the DHCPv6 client. 'm'=1 and 'o'=1 indicate the
client will use DHCPv6 to obtain all the configuration data.
'm'=1 and 'o'=0 are a meaningless combination. 'm'=0 and 'o'=1
indicate the client will use stateless DHCPv6 to obtain
configuration data apart from addresses/prefixes data.
'm'=0 and 'o'=0 represent the client will not use DHCPv6
but use SLAAC to achieve configuration.";
// if - not sure about the intended use here as it seems
// to be redfining what will be received in the PIO. Is
// the intention to be whether they PIO options will be
// obeyed as received or overridden?
leaf m-tab {
type boolean;
mandatory true;
description "m tab";
}
leaf o-tab {
type boolean;
mandatory true;
description "o tab";
}
}
container client-configured-options {
description "client configured options";
uses dhcpv6-options:client-option-definitions;
}
}
} }
container client-state{
config "false";
description "state tree of client";
container if-other-paras {
description "A client can obtain
extra configuration data other than
address and prefix information through
DHCPv6. This container describes such
data the client was configured. The
potential configuration data may
include DNS server addresses, SIP
server domain names, etc.";
uses dhcpv6-options:server-option-definitions;
}
}
} }
/* /*
* Notifications * Notifications
*/ */
notification notifications { notification notifications {
description "dhcpv6 client notification module"; description "dhcpv6 client notification module";
container dhcpv6-client-event { container dhcpv6-client-event {
description "dhcpv6 client event"; description "dhcpv6 client event";
container ia-lease-event { container ia-lease-event {
description "raised when the description "raised when the client was allocated
client was allocated a new IA from a new IA from the server or it renew/rebind/release
the server or it renew/rebind/release
its current IA"; its current IA";
leaf event-type { leaf event-type {
type enumeration{ type enumeration {
enum "allocation" { enum "allocation" {
description "allocate"; description "allocate";
} }
enum "rebind" { enum "rebind" {
description "rebind"; description "rebind";
} }
enum "renew" { enum "renew" {
description "renew"; description "renew";
} }
enum "release" { enum "release" {
description "release"; description "release";
} }
} }
mandatory true; mandatory true;
description "event type"; description "event type";
} }
container duid { container duid {
description "Sets the DUID"; description "Sets the DUID";
uses duid; uses dhcpv6-types:duid;
} }
leaf iaid { leaf iaid {
type uint32; type uint32;
mandatory true; mandatory true;
description "IAID"; description "IAID";
} }
leaf serv-name { leaf serv-name {
type string; type string;
description "server name"; description "server name";
} }
skipping to change at page 66, line 4 skipping to change at page 60, line 34
description "IAID"; description "IAID";
} }
leaf serv-name { leaf serv-name {
type string; type string;
description "server name"; description "server name";
} }
leaf description { leaf description {
type string; type string;
description "description of event"; description "description of event";
} }
} }
container invalid-ia-detected { container invalid-ia-detected {
description "raised when the identity description "raised when the identity association of the
association of the client can be proved client can be proved to be invalid. Possible condition
to be invalid. Possible condition includes includes duplicated address, illegal address, etc.";
duplicated address, illegal address, etc.";
container duid { container duid {
description "Sets the DUID"; description "Sets the DUID";
uses duid; uses dhcpv6-types:duid;
} }
leaf cli-duid { leaf cli-duid {
type uint32; type uint32;
mandatory true; mandatory true;
description "duid of client"; description "duid of client";
} }
leaf iaid { leaf iaid {
type uint32; type uint32;
mandatory true; mandatory true;
description "IAID"; description "IAID";
skipping to change at page 66, line 34 skipping to change at page 61, line 15
} }
leaf serv-name { leaf serv-name {
type string; type string;
description "server name"; description "server name";
} }
leaf description { leaf description {
type string; type string;
description "description of the event"; description "description of the event";
} }
} }
container retransmission-failed { container retransmission-failed {
description "raised when the retransmission description "raised when the retransmission mechanism defined
mechanism defined in [RFC3315] is failed."; in [RFC3315] is failed.";
container duid { container duid {
description "Sets the DUID"; description "Sets the DUID";
uses duid; uses dhcpv6-types:duid;
} }
leaf description { leaf description {
type enumeration { type enumeration {
enum "MRC failed" { enum "MRC failed" {
description "MRC failed"; description "MRC failed";
} }
enum "MRD failed" { enum "MRD failed" {
description "MRD failed"; description "MRD failed";
} }
} }
skipping to change at page 67, line 4 skipping to change at page 61, line 35
enum "MRC failed" { enum "MRC failed" {
description "MRC failed"; description "MRC failed";
} }
enum "MRD failed" { enum "MRD failed" {
description "MRD failed"; description "MRD failed";
} }
} }
mandatory true; mandatory true;
description "description of failure"; description "description of failure";
} }
} }
container failed-status-turn-up { container failed-status-turn-up {
description "raised when the client receives description "raised when the client receives a message includes
a message includes an unsuccessful Status Code an unsuccessful Status Code option.";
option.";
container duid { container duid {
description "Sets the DUID"; description "Sets the DUID";
uses duid; uses dhcpv6-types:duid;
} }
leaf status-code { leaf status-code {
type enumeration { type enumeration {
enum "1" { enum "1" {
description "UnspecFail"; description "UnspecFail";
} }
enum "2" { enum "2" {
description "NoAddrAvail"; description "NoAddrAvail";
} }
enum "3" { enum "3" {
skipping to change at page 67, line 36 skipping to change at page 62, line 18
description "NotOnLink"; description "NotOnLink";
} }
enum "5" { enum "5" {
description "UseMulticast"; description "UseMulticast";
} }
} }
mandatory true; mandatory true;
description "employed status code"; description "employed status code";
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3.4. DHCPv6 Options YANG Model 3.4. DHCPv6 Options YANG Model
This module imports typedefs from [RFC6991]. This module imports typedefs from [RFC6991], [RFC7223].
<CODE BEGINS> file "ietf-dhcpv6-options@2017-12-22.yang" <CODE BEGINS> file "ietf-dhcpv6-options.yang"
module ietf-dhcpv6-options { module ietf-dhcpv6-options {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options";
prefix "dhcpv6-options"; prefix "dhcpv6-options";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
revision-date "2013-07-15";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
revision-date "2013-07-15"; }
import ietf-dhcpv6-types {
prefix dhcpv6-types;
} }
organization "DHC WG"; organization "DHC WG";
contact "yong@csnet1.cs.tsinghua.edu.cn contact
"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";
description "This model defines a YANG data model that can be description "This model defines a YANG data model that can be
used to configure and manage a DHCPv6 server."; used to configure DHCPv6 options.";
revision 2018-03-04 {
description "Resolved most issues on the DHC official
github";
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 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 * Features
*/ */
// features for server options // features for server options
feature server-unicast-op { feature server-unicast-op {
description "Support for Server Unicast option"; description "Support for Server Unicast option";
skipping to change at page 68, line 49 skipping to change at page 63, line 39
// features for server options // features for server options
feature server-unicast-op { feature server-unicast-op {
description "Support for Server Unicast option"; description "Support for Server Unicast option";
} }
feature sip-server-domain-name-list-op { feature sip-server-domain-name-list-op {
description "Support for SIP Server Domain Name List option"; description "Support for SIP Server Domain Name List option";
} }
feature sip-server-address-list-op { feature sip-server-address-list-op {
description "Support for SIP Server Address List option"; description "Support for SIP Server Address List option";
} }
feature dns-config-op { feature dns-servers-op {
description "Support for DNS Recursive Name Server option"; description "Support for DNS Servers Option";
} }
feature domain-searchlist-op { feature domain-searchlist-op {
description "Support for Domain Search List Option"; description "Support for Domain Search List Option";
} }
feature nis-config-op { feature nis-config-op {
description "Support for Network Information Service (NIS) description "Support for Network Information Service (NIS)
Servers option"; Servers option";
} }
feature nis-plus-config-op { feature nis-plus-config-op {
description "Support for Network Information Service V2 (NIS+) description "Support for Network Information Service V2 (NIS+)
skipping to change at page 70, line 43 skipping to change at page 65, line 31
description "Support for S46 Default Mapping Rule description "Support for S46 Default Mapping Rule
(DMR) option"; (DMR) option";
} }
feature s46-v4-v6-binding-op { feature s46-v4-v6-binding-op {
description "Support for S46 IPv4/IPv6 Address description "Support for S46 IPv4/IPv6 Address
Bind option"; Bind option";
} }
// features for relay-supplied options // features for relay-supplied options
feature erp-local-domain-name-op { feature erp-local-domain-name-op {
description "Support for ERP Local Domain description "Support for ERP Local Domain Name option";
Name option";
} }
// features for client options // features for client options
feature option-request-op { feature option-request-op {
description "Support for Option Request option"; description "Support for Option Request option";
} }
feature rapid-commit-op { feature rapid-commit-op {
description "Support for Rapid Commit option"; description "Support for Rapid Commit option";
} }
feature user-class-op { feature user-class-op {
skipping to change at page 71, line 47 skipping to change at page 66, line 34
description "Support for Option with Single Flag"; description "Support for Option with Single Flag";
} }
feature operator-op-ipv6-prefix { feature operator-op-ipv6-prefix {
description "Support for Option with IPv6 Prefix"; description "Support for Option with IPv6 Prefix";
} }
feature operator-op-int32 { feature operator-op-int32 {
description "Support for Opion with 32-bit description "Support for Opion with 32-bit
Integer Value"; Integer Value";
} }
feature operator-op-int16 { feature operator-op-int16 {
description "Support for Opion with 16-bit description "Support for Opion with 16-bit Integer Value";
Integer Value";
} }
feature operator-op-int8 { feature operator-op-int8 {
description "Support for Opion with 8-bit description "Support for Opion with 8-bit Integer Value";
Integer Value";
} }
feature operator-op-uri { feature operator-op-uri {
description "Support for Opion with URI"; description "Support for Opion with URI";
} }
feature operator-op-textstring { feature operator-op-textstring {
description "Support for Opion with Text description "Support for Opion with Text String";
String";
} }
feature operator-op-var-data { feature operator-op-var-data {
description "Support for Opion with description "Support for Opion with Variable-Length Data";
Variable-Length Data";
} }
feature operator-op-dns-wire { feature operator-op-dns-wire {
description "Support for Opion with DNS Wire description "Support for Opion with DNS Wire
Format Domain Name List"; Format Domain Name List";
} }
/* /*
* Groupings * Groupings
*/ */
grouping portset-para {
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";
}
}
}
grouping duid {
description "DHCP Unique Identifier";
reference "RFC3315: Section 9";
leaf type-code {
type uint16;
default 65535;
description "Type code of this DUID";
}
choice duid-type {
default duid-invalid;
description "Selects the format for the DUID.";
case duid-llt {
description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)";
reference "RFC3315 Section 9.2";
leaf duid-llt-hardware-type {
type uint16;
description "Hardware type as assigned by IANA (RFC826).";
}
leaf duid-llt-time {
type yang:timeticks;
description "The time value is the time that the DUID is generated
represented in seconds since midnight (UTC), January 1, 2000,
modulo 2^32.";
}
leaf duid-llt-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
}
}
case duid-en {
description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)";
reference "RFC3315 Section 9.3";
leaf duid-en-enterprise-number {
type uint32;
description "Vendor's registered Private Enterprise Number as
maintained by IANA";
}
leaf duid-en-identifier {
type string;
description "Indentifier, unique to the device that is using it";
}
}
case duid-ll {
description "DUID Based on Link-layer Address (Type 3 - DUID-LL)";
reference "RFC3315 Section 9.4";
leaf duid-ll-hardware-type {
type uint16;
description "Hardware type as assigned by IANA (RFC826).";
}
leaf duid-ll-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
}
}
case duid-uuid {
description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)";
reference "RFC6335 Defination of the UUID-Based Unique Identifier";
leaf uuid {
type yang:uuid;
description "A Universally Unique IDentifier in the string representation
defined in RFC 4122. The canonical representation uses
lowercase characters";
}
}
case duid-invalid {
description "DUID based on free raw bytes";
leaf data {
type binary;
description "The bits to be used as the identifier";
}
}
}
}
grouping server-option-definitions { grouping server-option-definitions {
description "Contains definitions for options configured on the description "Contains definitions for options configured on the
DHCPv6 server which will be supplied to clients."; DHCPv6 server which will be supplied to clients.";
container server-unicast-option { container server-unicast-option {
if-feature server-unicast-op; if-feature server-unicast-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_UNICAST (12) Server Unicast Option"; description "OPTION_UNICAST (12) Server Unicast Option";
reference "RFC3315: Dynamic Host Configuration Protocol reference "RFC3315: Dynamic Host Configuration Protocol for
for IPv6 (DHCPv6)"; IPv6 (DHCPv6)";
leaf server-address { leaf server-address {
type inet:ipv6-address; type inet:ipv6-address;
description "server ipv6 address"; description "server ipv6 address";
} }
} }
container sip-server-domain-name-list-option { container sip-server-domain-name-list-option {
if-feature sip-server-domain-name-list-op; if-feature sip-server-domain-name-list-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List"; description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name 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 string;
type string; mandatory true;
mandatory true; description "sip server domain name";
description "sip server domain }
name";
}
} }
container sip-server-address-list-option { container sip-server-address-list-option {
if-feature sip-server-address-list-op; if-feature sip-server-address-list-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List"; description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List";
reference "RFC3319: Dynamic Host Configuration Protocol reference "RFC3319: Dynamic Host Configuration Protocol (DHCPv6)
(DHCPv6) Options for Session Initiation Protocol (SIP) Options for Session Initiation Protocol (SIP) Servers";
Servers"; list sip-server {
list sip-server { key sip-serv-id;
key sip-serv-id; description "sip server info";
description "sip server info"; leaf sip-serv-id {
leaf sip-serv-id { type uint8;
type uint8; mandatory true;
mandatory true; description "sip server id";
description "sip server id";
}
leaf sip-serv-addr {
type inet:ipv6-address;
mandatory true;
description "sip server addr";
}
} }
leaf sip-serv-addr {
type inet:ipv6-address;
mandatory true;
description "sip server addr";
}
}
} }
container dns-config-option {
if-feature dns-config-op; container dns-servers-option {
if-feature dns-servers-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_DNS_SERVERS (23) DNS recursive Name description "OPTION_DNS_SERVERS (23) DNS recursive Name Server option";
Server option"; reference "RFC3646: DNS Configuration options for Dynamic Host Configuration
reference "RFC3646: DNS Configuration options for Dynamic Protocol for IPv6 (DHCPv6)";
Host Configuration Protocol for IPv6 (DHCPv6)";
list dns-server { list dns-server {
key dns-serv-id; key dns-serv-id;
description "dns server info"; description "dns server info";
leaf dns-serv-id { leaf dns-serv-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "DNS server list entry ID."; description "DNS server list entry ID.";
} }
leaf dns-serv-addr { leaf dns-serv-addr {
type inet:ipv6-address; type inet:ipv6-address;
skipping to change at page 77, line 31 skipping to change at page 70, line 15
if-feature nis-domain-name-op; if-feature nis-domain-name-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_NIS_DOMAIN_NAME (29) Network Information description "OPTION_NIS_DOMAIN_NAME (29) Network Information
Service (NIS) Domain Name Option"; Service (NIS) Domain Name Option";
reference "RFC3989: Network Information Service (NIS) reference "RFC3989: Network Information Service (NIS)
Configuration Options for Dynamic Host Configuration Protocol Configuration Options for Dynamic Host Configuration Protocol
for IPv6 (DHCPv6)"; for IPv6 (DHCPv6)";
leaf nis-domain-name { leaf nis-domain-name {
type string; type string;
description "The Network Information Service (NIS) Domain Name description "The Network Information Service (NIS) Domain Name
option is used by the server to convey client's NIS Domain Name option is used by the server to convey client's NIS Domain Name
info to the client."; info to the client.";
} }
} }
container nis-plus-domain-name-option { container nis-plus-domain-name-option {
if-feature nis-plus-domain-name-op; if-feature nis-plus-domain-name-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_NISP_DOMAIN_NAME (30) Network Information description "OPTION_NISP_DOMAIN_NAME (30) Network Information
Service V2 (NIS+) Domain Name Option"; Service V2 (NIS+) Domain Name Option";
reference "RFC3989: Network Information Service (NIS) reference "RFC3989: Network Information Service (NIS)
Configuration Options for Dynamic Host Configuration Protocol Configuration Options for Dynamic Host Configuration Protocol
for IPv6 (DHCPv6)"; for IPv6 (DHCPv6)";
leaf nis-plus-domain-name { leaf nis-plus-domain-name {
type string; type string;
description "The Network Information Service V2 (NIS+) Domain Name description "The Network Information Service V2 (NIS+) Domain Name
option is used by the server to convey client's NIS+ Domain Name option is used by the server to convey client's NIS+ Domain Name
info to the client."; info to the client.";
}
} }
}
container sntp-server-option { container sntp-server-option {
if-feature sntp-server-op; if-feature sntp-server-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_SNTP_SERVERS (31) Simple Network Time Protocol description "OPTION_SNTP_SERVERS (31) Simple Network Time Protocol
(SNTP) Servers Option"; (SNTP) Servers Option";
reference "RFC4075: Simple Network Time Protocol (SNTP) Configuration reference "RFC4075: Simple Network Time Protocol (SNTP) Configuration
Option for DHCPv6"; Option for DHCPv6";
list sntp-server { list sntp-server {
key sntp-serv-id; key sntp-serv-id;
description "sntp server info"; description "sntp server info";
skipping to change at page 79, line 34 skipping to change at page 72, line 24
if-feature tzdb-timezone-op; if-feature tzdb-timezone-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_NEW_TZDB_TIMEZONE (42) Timezone Database option"; description "OPTION_NEW_TZDB_TIMEZONE (42) Timezone Database option";
reference "RFC4822: Timezone Options for DHCP"; reference "RFC4822: Timezone Options for DHCP";
leaf tz-database { leaf tz-database {
type string; type string;
mandatory true; mandatory true;
description "Reference to the TZ Database"; description "Reference to the TZ Database";
} }
} }
container ntp-server-option { container ntp-server-option {
//This option looks like it needs work to correctly model the //This option looks like it needs work to correctly model the
//option as defined in the RFC. //option as defined in the RFC.
// Zihao - Re-modelled so it only contains one // Zihao - Re-modelled so it only contains one time source suboption
// time source suboption
if-feature ntp-server-op; if-feature ntp-server-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_NTP_SERVER (56) NTP Server Option for DHCPv6"; description "OPTION_NTP_SERVER (56) NTP Server Option for DHCPv6";
reference "RFC5908: Network Time Protocol (NTP) Server Option for reference "RFC5908: Network Time Protocol (NTP) Server Option for
DHCPv6"; DHCPv6";
list ntp-server { list ntp-server {
key ntp-serv-id; key ntp-serv-id;
description "ntp server info"; description "ntp server info";
leaf ntp-serv-id { leaf ntp-serv-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "ntp server id"; description "NTP server id";
} }
choice ntp-time-source-suboption { choice ntp-time-source-suboption {
description "Select a NTP time source suboption."; description "Select a NTP time source suboption.";
case server-address { case server-address {
leaf-list ntp-serv-addr-suboption { leaf-list ntp-serv-addr-suboption {
type inet:ipv6-address; type inet:ipv6-address;
description "ntp server addr"; description "NTP server addr";
} }
} }
case server-multicast-address { case server-multicast-address {
leaf-list ntp-serv-mul-addr-suboption { leaf-list ntp-serv-mul-addr-suboption {
type inet:ipv6-address; type inet:ipv6-address;
description "ntp server multicast addr"; description "NTP server multicast addr";
} }
} }
case server-fqdn { case server-fqdn {
leaf-list ntp-serv-fqdn-suboption { leaf-list ntp-serv-fqdn-suboption {
type string; type string;
description "ntp server fqdn"; description "NTP server fqdn";
} }
} }
} }
} }
} }
container boot-file-url-option { container boot-file-url-option {
if-feature boot-file-url-op; if-feature boot-file-url-op;
presence "Enable this option"; presence "Enable this option";
description "OPT_BOOTFILE_URL (59) Boot File URL option"; description "OPT_BOOTFILE_URL (59) Boot File URL option";
reference "RFC5970: DHCPv6 Options for Network Boot"; reference "RFC5970: DHCPv6 Options for Network Boot";
list boot-file { list boot-file {
key boot-file-id; key boot-file-id;
description "boot file info"; description "boot file info";
leaf boot-file-id { leaf boot-file-id {
type uint8; type uint8;
skipping to change at page 80, line 42 skipping to change at page 73, line 33
description "OPT_BOOTFILE_URL (59) Boot File URL option"; description "OPT_BOOTFILE_URL (59) Boot File URL option";
reference "RFC5970: DHCPv6 Options for Network Boot"; reference "RFC5970: DHCPv6 Options for Network Boot";
list boot-file { list boot-file {
key boot-file-id; key boot-file-id;
description "boot file info"; description "boot file info";
leaf boot-file-id { leaf boot-file-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "boot file id"; description "boot file id";
} }
leaf-list suitable-arch-type { leaf-list suitable-arch-type {
type uint16; type uint16;
description "architecture type"; description "architecture type";
} }
leaf-list suitable-net-if { leaf-list suitable-net-if {
type uint32; type uint32;
description "network interface"; description "network interface";
} }
leaf boot-file-url { leaf boot-file-url {
type string; type string;
mandatory true; mandatory true;
description "url for boot file"; description "url for boot file";
} }
} }
} }
container boot-file-param-option { container boot-file-param-option {
if-feature boot-file-param-op; if-feature boot-file-param-op;
presence "Enable this option"; presence "Enable this option";
description "OPT_BOOTFiLE_PARAM (60) Boot File Parameters Option"; description "OPT_BOOTFiLE_PARAM (60) Boot File Parameters Option";
reference "RFC5970: DHCPv6 Options for Network Boot"; reference "RFC5970: DHCPv6 Options for Network Boot";
list boot-file-paras { list boot-file-paras {
key para-id; key para-id;
description "boot file parameters"; description "boot file parameters";
leaf para-id { leaf para-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "parameter id"; description "parameter id";
} }
leaf parameter { leaf parameter {
type string; type string;
mandatory true; mandatory true;
description "parameter description "parameter value";
value"; }
} }
}
} }
container aftr-name-option { container aftr-name-option {
if-feature aftr-name-op; if-feature aftr-name-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_AFTR_NAME (64) AFTR-Name DHCPv6 Option"; description "OPTION_AFTR_NAME (64) AFTR-Name DHCPv6 Option";
reference "RFC6334: Dynamic Host Configuration Protocol for IPv6 reference "RFC6334: Dynamic Host Configuration Protocol for IPv6
(DHCPv6) Option for Dual-Stack Lite"; (DHCPv6) Option for Dual-Stack Lite";
leaf tunnel-endpoint-name { leaf tunnel-endpoint-name {
type string; type string;
mandatory true; mandatory true;
description "aftr name"; description "aftr name";
} }
} }
container kbr-default-name-option { container kbr-default-name-option {
if-feature kbr-default-name-op; if-feature kbr-default-name-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_KRB_DEFAULT_REALM_NAME (77) Kerberos Default Realm Name Option"; description "OPTION_KRB_DEFAULT_REALM_NAME (77) Kerberos Default Realm Name Option";
reference "RFC6784: Kerberos Options for DHCPv6"; reference "RFC6784: Kerberos Options for DHCPv6";
leaf default-realm-name { leaf default-realm-name {
type string; type string;
mandatory true; mandatory true;
description "default realm name"; description "default realm name";
} }
} }
container kbr-kdc-option { container kbr-kdc-option {
if-feature kbr-kdc-op; if-feature kbr-kdc-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_KRB_KDC (78) Kerberos KDB Option"; description "OPTION_KRB_KDC (78) Kerberos KDB Option";
reference "RFC6784: Kerberos Options for DHCPv6"; reference "RFC6784: Kerberos Options for DHCPv6";
list kdc-info { list kdc-info {
key kdc-id; key kdc-id;
description "kdc info"; description "kdc info";
leaf kdc-id { leaf kdc-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "kdc id"; description "kdc id";
} }
leaf priority { leaf priority {
type uint16; type uint16;
mandatory true; mandatory true;
description "priority"; description "priority";
} }
leaf weight { leaf weight {
type uint16; type uint16;
mandatory true; mandatory true;
description "weight"; description "weight";
} }
leaf transport-type { leaf transport-type {
type uint8; type uint8;
mandatory true; mandatory true;
description "transport type"; description "transport type";
} }
leaf port-number { leaf port-number {
type uint16; type uint16;
mandatory true; mandatory true;
description "port number"; description "port number";
} }
leaf kdc-ipv6-addr { leaf kdc-ipv6-addr {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description "kdc ipv6 addr"; description "kdc ipv6 addr";
} }
leaf realm-name { leaf realm-name {
type string; type string;
mandatory true; mandatory true;
description "realm name"; description "realm name";
} }
} }
} }
container sol-max-rt-option { container sol-max-rt-option {
if-feature sol-max-rt-op; if-feature sol-max-rt-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_SOL_MAX_RT (82) sol max rt option"; description "OPTION_SOL_MAX_RT (82) sol max rt option";
reference "RFC7083: Modification to Default Values of reference "RFC7083: Modification to Default Values of
SOL_MAX_RT and INF_MAX_RT"; SOL_MAX_RT and INF_MAX_RT";
leaf sol-max-rt-value { leaf sol-max-rt-value {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "sol max rt value"; description "sol max rt value";
skipping to change at page 83, line 26 skipping to change at page 76, line 22
presence "Enable this option"; presence "Enable this option";
description "OPTION_INF_MAX_RT (83) inf max rt option"; description "OPTION_INF_MAX_RT (83) inf max rt option";
reference "RFC7083: Modification to Default Values of reference "RFC7083: Modification to Default Values of
SOL_MAX_RT and INF_MAX_RT"; SOL_MAX_RT and INF_MAX_RT";
leaf inf-max-rt-value { leaf inf-max-rt-value {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "inf max rt value"; description "inf max rt value";
} }
} }
container addr-selection-option { container addr-selection-option {
if-feature addr-selection-op; if-feature addr-selection-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_ADDRSEL (84) and OPTION_ADDRSEL_TABLE (85)"; description "OPTION_ADDRSEL (84) and OPTION_ADDRSEL_TABLE (85)";
reference "RFC7078: Distributing Address Selection Policy Using reference "RFC7078: Distributing Address Selection Policy Using
DHCPv6"; DHCPv6";
// if - Needs checking to see if this matches the RFC - there // if - Needs checking to see if this matches the RFC - there
// are two options here. // are two options here.
// Zihao - I think this matches RFC7078 // Zihao - I think this matches RFC7078
leaf a-bit-set { leaf a-bit-set {
type boolean; type boolean;
mandatory true; mandatory true;
description "a bit"; description "a bit";
} }
leaf p-bit-set { leaf p-bit-set {
type boolean; type boolean;
skipping to change at page 84, line 28 skipping to change at page 77, line 24
mandatory true; mandatory true;
description "prefix length"; description "prefix length";
} }
leaf prefix { leaf prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "prefix"; description "prefix";
} }
} }
} }
container pcp-server-option { container pcp-server-option {
if-feature pcp-server-op; if-feature pcp-server-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_V6_PCP_SERVER (86) description "OPTION_V6_PCP_SERVER (86) pcp server option";
pcp server option";
reference "RFC7291: DHCP Options for the Port Control reference "RFC7291: DHCP Options for the Port Control
Protocol (PCP)"; Protocol (PCP)";
list pcp-server { list pcp-server {
key pcp-serv-id; key pcp-serv-id;
description "pcp server info"; description "pcp server info";
leaf pcp-serv-id { leaf pcp-serv-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "pcp server id"; description "pcp server id";
} }
skipping to change at page 85, line 18 skipping to change at page 78, line 16
key rule-id; key rule-id;
description "s46 rule"; description "s46 rule";
leaf rule-id { leaf rule-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "rule id"; description "rule id";
} }
leaf rule-type { leaf rule-type {
type enumeration { type enumeration {
enum "BMR" { enum "BMR" {
description "BMR"; description "BMR";
} }
enum "FMR" { enum "FMR" {
description "FMR"; description "FMR";
}
} }
mandatory true;
description "rule type";
}
leaf prefix4-len {
type uint8;
mandatory true;
description "ipv4 prefix length";
} }
mandatory true;
description "rule type";
}
leaf prefix4-len {
type uint8;
mandatory true;
description "ipv4 prefix length";
}
leaf ipv4-prefix { leaf ipv4-prefix {
type inet:ipv4-prefix; type inet:ipv4-prefix;
mandatory true; mandatory true;
description "ipv4 prefix"; description "ipv4 prefix";
} }
leaf prefix6-len { leaf prefix6-len {
type uint8; type uint8;
mandatory true; mandatory true;
description "ipv6 prefix length"; description "ipv6 prefix length";
} }
leaf ipv6-prefix { leaf ipv6-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "ipv6 prefix"; description "ipv6 prefix";
} }
uses portset-para; uses dhcpv6-types:portset-para;
} }
} }
container s46-br-option { container s46-br-option {
if-feature s46-br-op; if-feature s46-br-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_S46_BR (90) S46 BR Option"; description "OPTION_S46_BR (90) S46 BR Option";
reference "RFC7598: DHCPv6 Options for Configuration of reference "RFC7598: DHCPv6 Options for Configuration of
Softwire Address and Port-Mapped Clients"; Softwire Address and Port-Mapped Clients";
list br { list br {
key br-id; key br-id;
description "br info"; description "br info";
leaf br-id { leaf br-id {
skipping to change at page 87, line 32 skipping to change at page 80, line 33
type uint8; type uint8;
mandatory true; mandatory true;
description "bind ipv6 prefix description "bind ipv6 prefix
length"; length";
} }
leaf bind-ipv6-prefix { leaf bind-ipv6-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "bind ipv6 prefix"; description "bind ipv6 prefix";
} }
uses portset-para; uses dhcpv6-types:portset-para;
} }
} }
} }
//if - NB - The list of options needs to be updated. //if - NB - The list of options needs to be updated.
grouping relay-supplied-option-definitions { grouping relay-supplied-option-definitions {
// if - The structure here needs to be checked and probably reworked. // if - The structure here needs to be checked and probably reworked.
description "OPTION_RSOO (66) Relay-Supplied Options option"; description "OPTION_RSOO (66) Relay-Supplied Options option";
reference "RFC6422: Relay-Supplied DHCP Options"; reference "RFC6422: Relay-Supplied DHCP Options";
container erp-local-domain-name-option { container erp-local-domain-name-option {
if-feature erp-local-domain-name-op; if-feature erp-local-domain-name-op;
presence "Enable this option"; presence "Enable this option";
skipping to change at page 88, line 13 skipping to change at page 81, line 17
description "erp for client"; description "erp for client";
leaf cli-id { leaf cli-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "client id"; description "client id";
} }
container duid { container duid {
description "Sets the DUID"; description "Sets the DUID";
// uses duid; // uses duid;
// if - Maybe DUID definition needs to be moved to this module. // if - Maybe DUID definition needs to be moved to this module.
uses duid; uses dhcpv6-types:duid;
} }
leaf erp-name { leaf erp-name {
type string; type string;
mandatory true; mandatory true;
description "erp name"; description "erp name";
} }
} }
} }
} }
skipping to change at page 89, line 8 skipping to change at page 82, line 12
leaf option-reference { leaf option-reference {
type string; type string;
description "the reference of option"; description "the reference of option";
} }
leaf option-value { leaf option-value {
type string; type string;
mandatory true; mandatory true;
description "the option value"; description "the option value";
} }
} }
container option-request-option { container option-request-option {
if-feature option-request-op; if-feature option-request-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_ORO (6) Option Request Option"; description "OPTION_ORO (6) Option Request Option";
reference "RFC3315: Dynamic Host Configuration Protocol reference "RFC3315: Dynamic Host Configuration Protocol for
for IPv6 (DHCPv6)"; IPv6 (DHCPv6)";
list oro-option { list oro-option {
key option-code; key option-code;
description "oro option"; description "oro option";
leaf option-code { leaf option-code {
type uint16; type uint16;
mandatory true; mandatory true;
description "option code"; description "option code";
} }
leaf description { leaf description {
type string; type string;
skipping to change at page 89, line 36 skipping to change at page 82, line 41
options"; options";
} }
} }
} }
container user-class-option { container user-class-option {
if-feature user-class-op; if-feature user-class-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_USER_CLASS (15) User Class Option"; description "OPTION_USER_CLASS (15) User Class Option";
reference "RFC3315: Dynamic Host Configuration Protocol reference "RFC3315: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6)"; for IPv6 (DHCPv6)";
list user-class { list user-class {
key user-class-id; key user-class-id;
description "user class"; description "user class";
leaf user-class-id { leaf user-class-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "user class id"; description "user class id";
} }
leaf user-class-data { leaf user-class-data {
type string; type string;
skipping to change at page 90, line 4 skipping to change at page 83, line 9
mandatory true; mandatory true;
description "user class id"; description "user class id";
} }
leaf user-class-data { leaf user-class-data {
type string; type string;
mandatory true; mandatory true;
description "The information contained in the data area description "The information contained in the data area
of this option is contained in one or more opaque of this option is contained in one or more opaque
fields that represent the user class or classes of fields that represent the user class or classes of
which the client is a member. "; which the client is a member. ";
} }
} }
} }
container vendor-class-option { container vendor-class-option {
if-feature vendor-class-op; if-feature vendor-class-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_VENDOR_CLASS (16) Vendor Class Option"; description "OPTION_VENDOR_CLASS (16) Vendor Class Option";
reference "RFC3315: Dynamic Host Configuration Protocol reference "RFC3315: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6)"; for IPv6 (DHCPv6)";
leaf enterprise-number { leaf enterprise-number {
type uint32; type uint32;
mandatory true; mandatory true;
description "enterprise number"; description "enterprise number";
} }
list vendor-class { list vendor-class {
key vendor-class-id; key vendor-class-id;
description "vendor class"; description "vendor class";
leaf vendor-class-id { leaf vendor-class-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "vendor class id"; description "vendor class id";
} }
leaf vendor-class-data { leaf vendor-class-data {
type string; type string;
mandatory true; mandatory true;
description "The vendor-class-data is composed of a series description "The vendor-class-data is composed of a series of
of separate items, each of which describes some separate items, each of which describes some characteristic
characteristic of the client's hardware configuration. of the client's hardware configuration. Examples of
Examples of vendor-class-data instances might include the vendor-class-data instances might include the version of the
version of the operating system the client is running or operating system the client is running or the amount of memory
the amount of memory installed on the client."; installed on the client.";
} }
} }
} }
container client-fqdn-option { container client-fqdn-option {
if-feature client-fqdn-op; if-feature client-fqdn-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_CLIENT_FQDN (39) The Dynamic Host description "OPTION_CLIENT_FQDN (39) The Dynamic Host
Configuration Protocol for IPv6 (DHCPv6) Client Fully Configuration Protocol for IPv6 (DHCPv6) Client Fully
Qualified Domain Name (FQDN) Option"; Qualified Domain Name (FQDN) Option";
reference "RFC4704: The Dynamic Host Configuration Protocol reference "RFC4704: The Dynamic Host Configuration Protocol
for IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN) for IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN)
Option"; Option";
leaf fqdn { leaf fqdn {
skipping to change at page 92, line 36 skipping to change at page 85, line 46
mandatory true; mandatory true;
description "This field specifies the type of name that follows."; description "This field specifies the type of name that follows.";
} }
leaf name-string { leaf name-string {
type string; type string;
mandatory true; mandatory true;
description "This field encodes a sequence of components that form description "This field encodes a sequence of components that form
a name, each component encoded as a KerberoString"; a name, each component encoded as a KerberoString";
} }
} }
} }
container kbr-realm-name-option { container kbr-realm-name-option {
if-feature kbr-realm-name-op; if-feature kbr-realm-name-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_KRB_REALM_NAME (76) Kerberos Realm Name Option"; description "OPTION_KRB_REALM_NAME (76) Kerberos Realm Name Option";
reference "RFC6784: Kerberos Options for DHCPv6"; reference "RFC6784: Kerberos Options for DHCPv6";
leaf realm-name { leaf realm-name {
type string; type string;
mandatory true; mandatory true;
description "realm name"; description "realm name";
} }
skipping to change at page 93, line 20 skipping to change at page 86, line 32
description "Client link-layer address type. The link-layer description "Client link-layer address type. The link-layer
type MUST be a valid hardware type assigned by the IANA, type MUST be a valid hardware type assigned by the IANA,
as described in [RFC0826]"; as described in [RFC0826]";
} }
leaf link-layer-addr { leaf link-layer-addr {
type string; type string;
mandatory true; mandatory true;
description "Client link-layer address"; description "Client link-layer address";
} }
} }
}
}
grouping custom-option-definitions { grouping custom-option-definitions {
description "operator customized options"; description "operator customized options";
container operator-option-ipv6-address { container operator-option-ipv6-address {
if-feature operator-op-ipv6-address; if-feature operator-op-ipv6-address;
presence "Enable this option"; presence "Enable this option";
description "operator ipv6 address option"; description "operator ipv6 address option";
reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options";
list operator-ipv6-addr { list operator-ipv6-addr {
key operator-ipv6-addr-id; key operator-ipv6-addr-id;
description "operator ipv6 address info"; description "operator ipv6 address info";
leaf operator-ipv6-addr-id { leaf operator-ipv6-addr-id {
type uint8; type uint8;
skipping to change at page 94, line 20 skipping to change at page 87, line 33
mandatory true; mandatory true;
description "operator single flag id"; description "operator single flag id";
} }
leaf flag-value{ leaf flag-value{
type boolean; type boolean;
mandatory true; mandatory true;
description "operator single flag value"; description "operator single flag value";
} }
} }
} }
container operator-option-ipv6-prefix { container operator-option-ipv6-prefix {
if-feature operator-op-ipv6-prefix; if-feature operator-op-ipv6-prefix;
presence "Enable this option"; presence "Enable this option";
description "operator ipv6 prefix option"; description "operator ipv6 prefix option";
reference "RFC7227: Guidelines for Creating New DHCPv6 reference "RFC7227: Guidelines for Creating New DHCPv6
Options"; Options";
list operator-ipv6-prefix{ list operator-ipv6-prefix {
key operator-ipv6-prefix-id; key operator-ipv6-prefix-id;
description "operator ipv6 prefix info"; description "operator ipv6 prefix info";
leaf operator-ipv6-prefix-id { leaf operator-ipv6-prefix-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator ipv6 prefix id"; description "operator ipv6 prefix id";
} }
leaf operator-ipv6-prefix6-len{ leaf operator-ipv6-prefix6-len {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator ipv6 prefix length"; description "operator ipv6 prefix length";
} }
leaf operator-ipv6-prefix { leaf operator-ipv6-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "operator ipv6 prefix"; description "operator ipv6 prefix";
} }
} }
} }
container operator-option-int32 { container operator-option-int32 {
if-feature operator-op-int32; if-feature operator-op-int32;
presence "Enable this option"; presence "Enable this option";
description "operator integer 32 option"; description "operator integer 32 option";
reference "RFC7227: Guidelines for Creating New DHCPv6 reference "RFC7227: Guidelines for Creating New DHCPv6
Options"; Options";
list int32val{ list int32val {
key int32val-id; key int32val-id;
description "operator integer 32 info"; description "operator integer 32 info";
leaf int32val-id { leaf int32val-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator integer 32 id"; description "operator integer 32 id";
} }
leaf int32val{ leaf int32val {
type uint32; type uint32;
mandatory true; mandatory true;
description "operator integer 32 value"; description "operator integer 32 value";
} }
} }
} }
container operator-option-int16 { container operator-option-int16 {
if-feature operator-op-int16; if-feature operator-op-int16;
presence "Enable this option"; presence "Enable this option";
description "operator integer 16 option"; description "operator integer 16 option";
reference "RFC7227: Guidelines for Creating New DHCPv6 reference "RFC7227: Guidelines for Creating New DHCPv6
Options"; Options";
list int16val{ list int16val {
key int16val-id; key int16val-id;
description "operator integer 16 info"; description "operator integer 16 info";
leaf int16val-id { leaf int16val-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator integer 16 id"; description "operator integer 16 id";
} }
leaf int16val{ leaf int16val {
type uint16; type uint16;
mandatory true; mandatory true;
description "operator integer 16 value"; description "operator integer 16 value";
} }
} }
} }
container operator-option-int8 { container operator-option-int8 {
if-feature operator-op-int8; if-feature operator-op-int8;
presence "Enable this option"; presence "Enable this option";
description "operator integer 8 option"; description "operator integer 8 option";
reference "RFC7227: Guidelines for Creating New DHCPv6 reference "RFC7227: Guidelines for Creating New DHCPv6
Options"; Options";
list int8val{ list int8val {
key int8val-id; key int8val-id;
description "operator integer 8 info"; description "operator integer 8 info";
leaf int8val-id { leaf int8val-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator integer 8 id"; description "operator integer 8 id";
} }
leaf int8val{ leaf int8val {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator integer 8 value"; description "operator integer 8 value";
} }
} }
} }
container operator-option-uri { container operator-option-uri {
if-feature operator-op-uri; if-feature operator-op-uri;
presence "Enable this option"; presence "Enable this option";
description "operator uri option"; description "operator uri option";
reference "RFC7227: Guidelines for Creating New DHCPv6 reference "RFC7227: Guidelines for Creating New DHCPv6 Options";
Options";
list uri{ list uri{
key uri-id; key uri-id;
description "operator uri info"; description "operator uri info";
leaf uri-id { leaf uri-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator uri id"; description "operator uri id";
} }
leaf uri{ leaf uri {
type string; type string;
mandatory true; mandatory true;
description "operator uri value"; description "operator uri value";
} }
} }
} }
container operator-option-textstring { container operator-option-textstring {
if-feature operator-op-textstring; if-feature operator-op-textstring;
presence "Enable this option"; presence "Enable this option";
description "operator itext string option"; description "operator itext string option";
reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options";
list textstring{ list textstring{
key textstring-id; key textstring-id;
description "operator text string info"; description "operator text string info";
leaf textstring-id { leaf textstring-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator text string id"; description "operator text string id";
} }
leaf textstring{ leaf textstring {
type string; type string;
mandatory true; mandatory true;
description "operator text string value"; description "operator text string value";
} }
} }
} }
container operator-option-var-data { container operator-option-var-data {
if-feature operator-op-var-data; if-feature operator-op-var-data;
presence "Enable this option"; presence "Enable this option";
description "operator variable length data option"; description "operator variable length data option";
reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options";
list int32val{ list int32val {
key var-data-id; key var-data-id;
description "operator ivariable length data info"; description "operator ivariable length data info";
leaf var-data-id { leaf var-data-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator variable length id"; description "operator variable length id";
} }
leaf var-data{ leaf var-data {
type binary; type binary;
mandatory true; mandatory true;
description "operator variable length value"; description "operator variable length value";
} }
} }
} }
container operator-option-dns-wire { container operator-option-dns-wire {
if-feature operator-op-dns-wire; if-feature operator-op-dns-wire;
presence "Enable this option"; presence "Enable this option";
description "operator dns wire format domain name list option"; description "operator dns wire format domain name list option";
reference "RFC7227: Guidelines for Creating New DHCPv6 reference "RFC7227: Guidelines for Creating New DHCPv6
Options"; Options";
list operator-option-dns-wire{
list operator-option-dns-wire {
key operator-option-dns-wire-id; key operator-option-dns-wire-id;
description "operator dns wire format info"; description "operator dns wire format info";
leaf operator-option-dns-wire-id { leaf operator-option-dns-wire-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "operator dns wire format id"; description "operator dns wire format id";
} }
leaf operator-option-dns-wire{ leaf operator-option-dns-wire{
type binary; type binary;
mandatory true; mandatory true;
description "operator dns wire format value"; description "operator dns wire format value";
} }
} }
} }
} }
} }
<CODE ENDS>
3.5. DHCPv6 Types YANG Model
This module imports typedefs from [RFC6991].
<CODE BEGINS> file "ietf-dhcpv6-types.yang"
module ietf-dhcpv6-types {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types";
prefix "dhcpv6-types";
import ietf-inet-types {
prefix inet;
}
import ietf-yang-types {
prefix yang;
}
organization "DHC WG";
contact
"cuiyong@tsinghua.edu.cn
lh.sunlinh@gmail.com
ian.farrer@telekom.de
sladjana.zechlin@telekom.de
hezihao9512@gmail.com";
description "This model defines a YANG data model that can be
used to define some commonly used DHCPv6 types";
revision 2018-01-30 {
description "Initial revision";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
/*
* Grouping
*/
grouping vendor-infor {
description "Vendor information.";
container vendor-info {
description "";
leaf ent-num {
type uint32;
mandatory true;
description "enterprise number";
}
leaf-list data {
type string;
description "specific vendor info";
}
}
}
grouping duid {
description
"Each server and client has only one DUID (DHCP Unique Identifier).
The DUID here identifies a unique DHCPv6 server for clients. DUID
consists of a two-octet type field and an arbitrary length (no more
than 128 bytes) content field. Currently there are four defined types
of DUIDs in RFC3315 and RFC6355 - DUID-LLT, DUID-EN, DUID-LL and
DUID-UUID. DUID-Uknown represents those unconventional DUIDs.";
reference "RFC3315: Section 9 and RFC6355: Section 4";
leaf type-code {
type uint16;
default 65535;
description "Type code of this DUID";
}
choice duid-type {
default duid-unknown;
description "Selects the format for the DUID.";
case duid-llt {
description "DUID Based on Link-layer Address Plus Time
(Type 1 - DUID-LLT)";
reference "RFC3315 Section 9.2";
leaf duid-llt-hardware-type {
type uint16;
description "Hardware type as assigned by IANA (RFC826).";
}
leaf duid-llt-time {
type yang:timeticks;
description "The time value is the time that the DUID is
generated represented in seconds since midnight (UTC),
January 1, 2000, modulo 2^32.";
}
leaf duid-llt-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
}
}
case duid-en {
description "DUID Assigned by Vendor Based on Enterprise Number
(Type 2 - DUID-EN)";
reference "RFC3315 Section 9.3";
leaf duid-en-enterprise-number {
type uint32;
description "Vendor's registered Private Enterprise Number as
maintained by IANA";
}
leaf duid-en-identifier {
type string;
description "Indentifier, unique to the device that is
using it";
}
}
case duid-ll {
description "DUID Based on Link-layer Address (Type 3 - DUID-LL)";
reference "RFC3315 Section 9.4";
leaf duid-ll-hardware-type {
type uint16;
description "Hardware type as assigned by IANA (RFC826).";
}
leaf duid-ll-link-layer-addr {
type yang:mac-address;
description "Link-layer address as described in RFC2464";
}
}
case duid-uuid {
description "DUID Based on Universally Unique Identifier
(Type 4 - DUID-UUID)";
reference "RFC6335 Defination of the UUID-Based Unique Identifier";
leaf uuid {
type yang:uuid;
description "A Universally Unique IDentifier in the string
representation defined in RFC 4122. The canonical
representation uses lowercase characters";
}
}
case duid-unknown {
description "DUID based on free raw bytes";
leaf data {
type binary;
description "The bits to be used as the identifier";
}
}
}
}
grouping portset-para {
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";
}
}
}
grouping iaid {
description "IA is a construct through which a server and a
client can identify, group, and manage a set of related IPv6
addresses. The key of the list is a 4-byte number IAID defined
in [RFC3315].";
list identity-association {
config "false";
description "IA";
leaf iaid {
type uint32;
mandatory true;
description "IAID";
}
leaf ia-type {
type string;
mandatory true;
description "IA type";
}
leaf-list ipv6-addr {
type inet:ipv6-address;
description "ipv6 address";
}
leaf-list ipv6-prefix {
type inet:ipv6-prefix;
description "ipv6 prefix";
}
leaf-list prefix-length {
type uint8;
description "ipv6 prefix length";
}
leaf t1-time {
type yang:timeticks;
mandatory true;
description "t1 time";
}
leaf t2-time {
type yang:timeticks;
mandatory true;
description "t2 time";
}
leaf preferred-lifetime {
type yang:timeticks;
mandatory true;
description "preferred lifetime";
}
leaf valid-lifetime {
type yang:timeticks;
mandatory true;
description "valid lifetime";
}
}
}
}
<CODE ENDS> <CODE ENDS>
4. Security Considerations (TBD) 4. Security Considerations (TBD)
TBD TBD
5. IANA Considerations (TBD) 5. IANA Considerations (TBD)
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
skipping to change at page 98, line 41 skipping to change at page 96, line 38
Phone: +86-10-6278-5822 Phone: +86-10-6278-5822
Email: wangh13@mails.tsinghua.edu.cn Email: wangh1