draft-ietf-dhc-dhcpv6-yang-06.txt   draft-ietf-dhc-dhcpv6-yang-07.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: September 5, 2018 I. Farrer Expires: March 8, 2019 I. Farrer
S. Zechlin S. Zechlin
Deutsche Telekom AG Deutsche Telekom AG
Z. He Z. He
Tsinghua University Tsinghua University
March 4, 2018 September 4, 2018
YANG Data Model for DHCPv6 Configuration YANG Data Model for DHCPv6 Configuration
draft-ietf-dhc-dhcpv6-yang-06 draft-ietf-dhc-dhcpv6-yang-07
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 September 5, 2018. This Internet-Draft will expire on March 8, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 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
skipping to change at page 2, line 22 skipping to change at page 2, line 22
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 . . . . . . . . . . . . . . . 19 2.3. DHCPv6 Client Tree Diagrams . . . . . . . . . . . . . . . 20
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 . . . . . . . . . . . . . . . . . 45 3.2. DHCPv6 Relay YANG Model . . . . . . . . . . . . . . . . . 47
3.3. DHCPv6 Client YANG Model . . . . . . . . . . . . . . . . 55 3.3. DHCPv6 Client YANG Model . . . . . . . . . . . . . . . . 57
3.4. DHCPv6 Options YANG Model . . . . . . . . . . . . . . . . 62 3.4. DHCPv6 Options YANG Model . . . . . . . . . . . . . . . . 65
3.5. DHCPv6 Types YANG Model . . . . . . . . . . . . . . . . . 91 3.5. DHCPv6 Types YANG Model . . . . . . . . . . . . . . . . . 94
4. Security Considerations (TBD) . . . . . . . . . . . . . . . . 95 4. Security Considerations (TBD) . . . . . . . . . . . . . . . . 99
5. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 96 5. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 99
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 96 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 99
7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 96 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 99
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 96 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.1. Normative References . . . . . . . . . . . . . . . . . . 97 8.1. Normative References . . . . . . . . . . . . . . . . . . 100
8.2. Informative References . . . . . . . . . . . . . . . . . 97 8.2. Informative References . . . . . . . . . . . . . . . . . 100
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 99 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 102
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 36 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 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-unknown)
| | | +--rw data? binary | | | +--rw data? binary
| | +--rw name? string | | +--rw name? string
| | +--rw description? string | | +--rw description? string
| | +--rw ipv6-address* inet:ipv6-address | | +--rw ipv6-address* inet:ipv6-address
| | +--rw interfaces-config* if:interface-ref | | +--rw interfaces-config* if:interface-ref
| | +--rw vendor-info | | +--rw lease-storage
| | +--rw ent-num uint32 | | | +--rw (storage-type)?
| | +--rw data* string | | | +--:(memfile)
| +--rw option-sets | | | | +--rw memfile-name? string
| | +--rw option-set* [option-set-id] | | | | +--rw memfile-lfc-interval? uint64
| | +--rw option-set-id uint32 | | | +--:(mysql)
| | +--rw server-unicast-option! {server-unicast-op}? | | | | +--rw mysql-name? string
| | | +--rw server-address? inet:ipv6-address | | | | +--rw mysql-host? string
| | +--rw sip-server-domain-name-list-option! | | | | +--rw mysql-password? string
{sip-server-domain-name-list-op}? | | | | +--rw mysql-port? uint8
| | | +--rw sip-serv-domain-name string | | | | +--rw mysql-lfc-interval? uint64
| | +--rw sip-server-address-list-option! | | | | +--rw mysql-connect-timeout? uint64
{sip-server-address-list-op}? | | | +--:(postgresql)
| | | +--rw sip-server* [sip-serv-id] | | | | +--rw postgresql-name? string
| | | +--rw sip-serv-id uint8 | | | | +--rw postgresql-host? string
| | | +--rw sip-serv-addr inet:ipv6-address | | | | +--rw postgresql-password? string
| | +--rw dns-servers-option! {dns-servers-op}? | | | | +--rw postgresql-port? uint8
| | | +--rw dns-server* [dns-serv-id] | | | | +--rw postgresql-lfc-interval? uint64
| | | +--rw dns-serv-id uint8 | | | | +--rw postgresql-connect-timeout? uint64
| | | +--rw dns-serv-addr inet:ipv6-address | | | +--:(cassandra)
| | +--rw domain-searchlist-option! {domain-searchlist-op}? | | | +--rw cassandra-name? string
| | | +--rw domain-searchlist* [domain-searchlist-id] | | | +--rw cassandra-contact-points? string
| | | +--rw domain-searchlist-id uint8 | | | +--rw cassandra-password? string
| | | +--rw domain-search-list-entry string | | | +--rw cassandra-lfc-interval? uint64
| | +--rw nis-config-option! {nis-config-op}? | | | +--rw cassandra-connect-timeout? uint64
| | | +--rw nis-server* [nis-serv-id] | | +--rw vendor-info
| | | +--rw nis-serv-id uint8 | | +--rw ent-num uint32
| | | +--rw nis-serv-addr inet:ipv6-address | | +--rw data* string
| | +--rw nis-plus-config-option! {nis-plus-config-op}? | +--rw option-sets
| | | +--rw nis-plus-server* [nis-plus-serv-id] | | +--rw option-set* [option-set-id]
| | | +--rw nis-plus-serv-id uint8 | | +--rw option-set-id uint32
| | | +--rw nis-plus-serv-addr inet:ipv6-address | | +--rw server-unicast-option! {server-unicast-op}?
| | +--rw nis-domain-name-option! {nis-domain-name-op}? | | | +--rw server-address? inet:ipv6-address
| | | +--rw nis-domain-name? string | | +--rw sip-server-domain-name-list-option! {sip-server-domain-name-list-op}?
| | +--rw nis-plus-domain-name-option! | | | +--rw sip-serv-domain-name string
{nis-plus-domain-name-op}? | | +--rw sip-server-address-list-option! {sip-server-address-list-op}?
| | | +--rw nis-plus-domain-name? string | | | +--rw sip-server* [sip-serv-id]
| | +--rw sntp-server-option! {sntp-server-op}? | | | +--rw sip-serv-id uint8
| | | +--rw sntp-server* [sntp-serv-id] | | | +--rw sip-serv-addr inet:ipv6-address
| | | +--rw sntp-serv-id uint8 | | +--rw dns-servers-option! {dns-servers-op}?
| | | +--rw sntp-serv-addr inet:ipv6-address | | | +--rw dns-server* [dns-serv-id]
| | +--rw info-refresh-time-option! {info-refresh-time-op}? | | | +--rw dns-serv-id uint8
| | | +--rw info-refresh-time yang:timeticks | | | +--rw dns-serv-addr inet:ipv6-address
| | +--rw client-fqdn-option! {client-fqdn-op}? | | +--rw domain-searchlist-option! {domain-searchlist-op}?
| | | +--rw server-initiate-update boolean | | | +--rw domain-searchlist* [domain-searchlist-id]
| | | +--rw client-initiate-update boolean | | | +--rw domain-searchlist-id uint8
| | | +--rw modify-name-from-cli boolean | | | +--rw domain-search-list-entry string
| | +--rw posix-timezone-option! {posix-timezone-op}? | | +--rw nis-config-option! {nis-config-op}?
| | | +--rw tz-posix string | | | +--rw nis-server* [nis-serv-id]
| | +--rw tzdb-timezone-option! {tzdb-timezone-op}? | | | +--rw nis-serv-id uint8
| | | +--rw tz-database string | | | +--rw nis-serv-addr inet:ipv6-address
| | +--rw ntp-server-option! {ntp-server-op}? | | +--rw nis-plus-config-option! {nis-plus-config-op}?
| | | +--rw ntp-server* [ntp-serv-id] | | | +--rw nis-plus-server* [nis-plus-serv-id]
| | | +--rw ntp-serv-id uint8 | | | +--rw nis-plus-serv-id uint8
| | | +--rw (ntp-time-source-suboption)? | | | +--rw nis-plus-serv-addr inet:ipv6-address
| | | +--:(server-address) | | +--rw nis-domain-name-option! {nis-domain-name-op}?
| | | | +--rw ntp-serv-addr-suboption* | | | +--rw nis-domain-name? string
inet:ipv6-address | | +--rw nis-plus-domain-name-option! {nis-plus-domain-name-op}?
| | | +--:(server-multicast-address) | | | +--rw nis-plus-domain-name? string
| | | | +--rw ntp-serv-mul-addr-suboption* | | +--rw sntp-server-option! {sntp-server-op}?
inet:ipv6-address | | | +--rw sntp-server* [sntp-serv-id]
| | | +--:(server-fqdn) | | | +--rw sntp-serv-id uint8
| | | +--rw ntp-serv-fqdn-suboption* string | | | +--rw sntp-serv-addr inet:ipv6-address
| | +--rw boot-file-url-option! {boot-file-url-op}? | | +--rw info-refresh-time-option! {info-refresh-time-op}?
| | | +--rw boot-file* [boot-file-id] | | | +--rw info-refresh-time yang:timeticks
| | | +--rw boot-file-id uint8 | | +--rw client-fqdn-option! {client-fqdn-op}?
| | | +--rw suitable-arch-type* uint16 | | | +--rw server-initiate-update boolean
| | | +--rw suitable-net-if* uint32 | | | +--rw client-initiate-update boolean
| | | +--rw boot-file-url string | | | +--rw modify-name-from-cli boolean
| | +--rw boot-file-param-option! {boot-file-param-op}? | | +--rw posix-timezone-option! {posix-timezone-op}?
| | | +--rw boot-file-paras* [para-id] | | | +--rw tz-posix string
| | | +--rw para-id uint8 | | +--rw tzdb-timezone-option! {tzdb-timezone-op}?
| | | +--rw parameter string | | | +--rw tz-database string
| | +--rw aftr-name-option! {aftr-name-op}? | | +--rw ntp-server-option! {ntp-server-op}?
| | | +--rw tunnel-endpoint-name string | | | +--rw ntp-server* [ntp-serv-id]
| | +--rw kbr-default-name-option! {kbr-default-name-op}? | | | +--rw ntp-serv-id uint8
| | | +--rw default-realm-name string | | | +--rw (ntp-time-source-suboption)?
| | +--rw kbr-kdc-option! {kbr-kdc-op}? | | | +--:(server-address)
| | | +--rw kdc-info* [kdc-id] | | | | +--rw ntp-serv-addr-suboption* inet:ipv6-address
| | | +--rw kdc-id uint8 | | | +--:(server-multicast-address)
| | | +--rw priority uint16 | | | | +--rw ntp-serv-mul-addr-suboption* inet:ipv6-address
| | | +--rw weight uint16 | | | +--:(server-fqdn)
| | | +--rw transport-type uint8 | | | +--rw ntp-serv-fqdn-suboption* string
| | | +--rw port-number uint16 | | +--rw boot-file-url-option! {boot-file-url-op}?
| | | +--rw kdc-ipv6-addr inet:ipv6-address | | | +--rw boot-file* [boot-file-id]
| | | +--rw realm-name string | | | +--rw boot-file-id uint8
| | +--rw sol-max-rt-option! {sol-max-rt-op}? | | | +--rw suitable-arch-type* uint16
| | | +--rw sol-max-rt-value yang:timeticks | | | +--rw suitable-net-if* uint32
| | +--rw inf-max-rt-option! {inf-max-rt-op}? | | | +--rw boot-file-url string
| | | +--rw inf-max-rt-value yang:timeticks | | +--rw boot-file-param-option! {boot-file-param-op}?
| | +--rw addr-selection-option! {addr-selection-op}? | | | +--rw boot-file-paras* [para-id]
| | | +--rw a-bit-set boolean | | | +--rw para-id uint8
| | | +--rw p-bit-set boolean | | | +--rw parameter string
| | | +--rw policy-table* [policy-id] | | +--rw aftr-name-option! {aftr-name-op}?
| | | +--rw policy-id uint8 | | | +--rw tunnel-endpoint-name string
| | | +--rw label uint8 | | +--rw kbr-default-name-option! {kbr-default-name-op}?
| | | +--rw precedence uint8 | | | +--rw default-realm-name string
| | | +--rw prefix-len uint8 | | +--rw kbr-kdc-option! {kbr-kdc-op}?
| | | +--rw prefix inet:ipv6-prefix | | | +--rw kdc-info* [kdc-id]
| | +--rw pcp-server-option! {pcp-server-op}? | | | +--rw kdc-id uint8
| | | +--rw pcp-server* [pcp-serv-id] | | | +--rw priority uint16
| | | +--rw pcp-serv-id uint8 | | | +--rw weight uint16
| | | +--rw pcp-serv-addr inet:ipv6-address | | | +--rw transport-type uint8
| | +--rw s46-rule-option! {s46-rule-op}? | | | +--rw port-number uint16
| | | +--rw s46-rule* [rule-id] | | | +--rw kdc-ipv6-addr inet:ipv6-address
| | | +--rw rule-id uint8 | | | +--rw realm-name string
| | | +--rw rule-type enumeration | | +--rw sol-max-rt-option! {sol-max-rt-op}?
| | | +--rw prefix4-len uint8 | | | +--rw sol-max-rt-value yang:timeticks
| | | +--rw ipv4-prefix inet:ipv4-prefix | | +--rw inf-max-rt-option! {inf-max-rt-op}?
| | | +--rw prefix6-len uint8 | | | +--rw inf-max-rt-value yang:timeticks
| | | +--rw ipv6-prefix inet:ipv6-prefix | | +--rw addr-selection-option! {addr-selection-op}?
| | | +--rw port-parameter | | | +--rw a-bit-set boolean
| | | +--rw offset uint8 | | | +--rw p-bit-set boolean
| | | +--rw psid-len uint8 | | | +--rw policy-table* [policy-id]
| | | +--rw psid uint16 | | | +--rw policy-id uint8
| | +--rw s46-br-option! {s46-br-op}? | | | +--rw label uint8
| | | +--rw br* [br-id] | | | +--rw precedence uint8
| | | +--rw br-id uint8 | | | +--rw prefix-len uint8
| | | +--rw br-ipv6-addr inet:ipv6-address | | | +--rw prefix inet:ipv6-prefix
| | +--rw s46-dmr-option! {s46-dmr-op}? | | +--rw pcp-server-option! {pcp-server-op}?
| | | +--rw dmr* [dmr-id] | | | +--rw pcp-server* [pcp-serv-id]
| | | +--rw dmr-id uint8 | | | +--rw pcp-serv-id uint8
| | | +--rw dmr-prefix-len uint8 | | | +--rw pcp-serv-addr inet:ipv6-address
| | | +--rw dmr-ipv6-prefix inet:ipv6-prefix | | +--rw s46-rule-option! {s46-rule-op}?
| | +--rw s46-v4-v6-binding-option! {s46-v4-v6-binding-op}? | | | +--rw s46-rule* [rule-id]
| | | +--rw ce* [ce-id] | | | +--rw rule-id uint8
| | | +--rw ce-id uint8 | | | +--rw rule-type enumeration
| | | +--rw ipv4-addr inet:ipv4-address | | | +--rw prefix4-len uint8
| | | +--rw bind-prefix6-len uint8 | | | +--rw ipv4-prefix inet:ipv4-prefix
| | | +--rw bind-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 operator-option-ipv6-address! | | | +--rw psid uint16
{operator-op-ipv6-address}? | | +--rw s46-br-option! {s46-br-op}?
| | | +--rw br* [br-id]
| | | +--rw operator-ipv6-addr* [operator-ipv6-addr-id] | | | +--rw br-id uint8
| | | +--rw operator-ipv6-addr-id uint8 | | | +--rw br-ipv6-addr inet:ipv6-address
| | | +--rw operator-ipv6-addr inet:ipv6-address | | +--rw s46-dmr-option! {s46-dmr-op}?
| | +--rw operator-option-single-flag! | | | +--rw dmr* [dmr-id]
{operator-op-single-flag}? | | | +--rw dmr-id uint8
| | | +--rw flag* [flag-id] | | | +--rw dmr-prefix-len uint8
| | | +--rw flag-id uint8 | | | +--rw dmr-ipv6-prefix inet:ipv6-prefix
| | | +--rw flag-value boolean | | +--rw s46-v4-v6-binding-option! {s46-v4-v6-binding-op}?
| | +--rw operator-option-ipv6-prefix! | | | +--rw ce* [ce-id]
{operator-op-ipv6-prefix}? | | | +--rw ce-id uint8
| | | +--rw operator-ipv6-prefix* [operator-ipv6-prefix-id] | | | +--rw ipv4-addr inet:ipv4-address
| | | +--rw operator-ipv6-prefix-id uint8 | | | +--rw bind-prefix6-len uint8
| | | +--rw operator-ipv6-prefix6-len uint8 | | | +--rw bind-ipv6-prefix inet:ipv6-prefix
| | | +--rw operator-ipv6-prefix inet:ipv6-prefix | | | +--rw port-parameter
| | +--rw operator-option-int32! {operator-op-int32}? | | | +--rw offset uint8
| | | +--rw int32val* [int32val-id] | | | +--rw psid-len uint8
| | | +--rw int32val-id uint8 | | | +--rw psid uint16
| | | +--rw int32val uint32 | | +--rw operator-option-ipv6-address! {operator-op-ipv6-address}?
| | +--rw operator-option-int16! {operator-op-int16}? | | | +--rw operator-ipv6-addr* [operator-ipv6-addr-id]
| | | +--rw int16val* [int16val-id] | | | +--rw operator-ipv6-addr-id uint8
| | | +--rw int16val-id uint8 | | | +--rw operator-ipv6-addr inet:ipv6-address
| | | +--rw int16val uint16 | | +--rw operator-option-single-flag! {operator-op-single-flag}?
| | +--rw operator-option-int8! {operator-op-int8}? | | | +--rw flag* [flag-id]
| | | +--rw int8val* [int8val-id] | | | +--rw flag-id uint8
| | | +--rw int8val-id uint8 | | | +--rw flag-value boolean
| | | +--rw int8val uint8 | | +--rw operator-option-ipv6-prefix! {operator-op-ipv6-prefix}?
| | +--rw operator-option-uri! {operator-op-uri}? | | | +--rw operator-ipv6-prefix* [operator-ipv6-prefix-id]
| | | +--rw uri* [uri-id] | | | +--rw operator-ipv6-prefix-id uint8
| | | +--rw uri-id uint8 | | | +--rw operator-ipv6-prefix6-len uint8
| | | +--rw uri string | | | +--rw operator-ipv6-prefix inet:ipv6-prefix
| | +--rw operator-option-textstring! {operator-op-textstring}? | | +--rw operator-option-int32! {operator-op-int32}?
| | | +--rw textstring* [textstring-id] | | | +--rw int32val* [int32val-id]
| | | +--rw textstring-id uint8 | | | +--rw int32val-id uint8
| | | +--rw textstring string | | | +--rw int32val uint32
| | +--rw operator-option-var-data! {operator-op-var-data}? | | +--rw operator-option-int16! {operator-op-int16}?
| | | +--rw int32val* [var-data-id] | | | +--rw int16val* [int16val-id]
| | | +--rw var-data-id uint8 | | | +--rw int16val-id uint8
| | | +--rw var-data binary | | | +--rw int16val uint16
| | +--rw operator-option-dns-wire! {operator-op-dns-wire}? | | +--rw operator-option-int8! {operator-op-int8}?
| | +--rw operator-option-dns-wire* | | | +--rw int8val* [int8val-id]
[operator-option-dns-wire-id] | | | +--rw int8val-id uint8
| | +--rw operator-option-dns-wire-id uint8 | | | +--rw int8val uint8
| | +--rw operator-option-dns-wire binary | | +--rw operator-option-uri! {operator-op-uri}?
| +--rw network-ranges | | | +--rw uri* [uri-id]
| | +--rw option-set-id? | | | +--rw uri-id uint8
-> /server/server-config/option-sets/option-set/option-set-id | | | +--rw uri string
| | +--rw network-range* [network-range-id] | | +--rw operator-option-textstring! {operator-op-textstring}?
| | +--rw network-range-id uint32 | | | +--rw textstring* [textstring-id]
| | +--rw network-description string | | | +--rw textstring-id uint8
| | +--rw network-prefix inet:ipv6-prefix | | | +--rw textstring string
| | +--rw option-set-id? | | +--rw operator-option-var-data! {operator-op-var-data}?
-> /server/server-config/option-sets/option-set/option-set-id | | | +--rw int32val* [var-data-id]
| | +--rw address-pools | | | +--rw var-data-id uint8
| | | +--rw address-pool* [pool-id] | | | +--rw var-data binary
| | | +--rw pool-id uint32 | | +--rw operator-option-dns-wire! {operator-op-dns-wire}?
| | | +--rw pool-prefix inet:ipv6-prefix | | +--rw operator-option-dns-wire* [operator-option-dns-wire-id]
| | | +--rw start-address inet:ipv6-address-no-zone | | +--rw operator-option-dns-wire-id uint8
| | | +--rw end-address inet:ipv6-address-no-zone | | +--rw operator-option-dns-wire binary
| | | +--rw client-class? string | +--rw network-ranges
| | | +--rw valid-lifetime yang:timeticks | | +--rw option-set-id? -> /server/server-config/option-sets/option-set/option-set-id
| | | +--rw renew-time yang:timeticks | | +--rw network-range* [network-range-id]
| | | +--rw rebind-time yang:timeticks | | +--rw network-range-id uint32
| | | +--rw preferred-lifetime yang:timeticks | | +--rw network-description string
| | | +--rw rapid-commit boolean | | +--rw network-prefix inet:ipv6-prefix
| | | +--rw max-address-count threshold | | +--rw option-set-id? -> /server/server-config/option-sets/option-set/option-set-id
| | | +--rw option-set-id | | +--rw address-pools
-> /server/server-config/option-sets/option-set/option-set-id | | | +--rw address-pool* [pool-id]
| | +--rw pd-pools | | | +--rw pool-id uint32
| | | +--rw pd-pool* [pool-id] | | | +--rw pool-prefix inet:ipv6-prefix
| | | +--rw pool-id uint32 | | | +--rw start-address inet:ipv6-address-no-zone
| | | +--rw prefix inet:ipv6-prefix | | | +--rw end-address inet:ipv6-address-no-zone
| | | +--rw prefix-length uint8 | | | +--rw valid-lifetime yang:timeticks
| | | +--rw client-class? string | | | +--rw renew-time yang:timeticks
| | | +--rw valid-lifetime yang:timeticks | | | +--rw rebind-time yang:timeticks
| | | +--rw renew-time yang:timeticks | | | +--rw preferred-lifetime yang:timeticks
| | | +--rw rebind-time yang:timeticks | | | +--rw rapid-commit boolean
| | | +--rw preferred-lifetime yang:timeticks | | | +--rw client-class? string
| | | +--rw rapid-commit boolean | | | +--rw max-address-count threshold
| | | +--rw max-pd-space-utlization threshold | | | +--rw option-set-id -> /server/server-config/option-sets/option-set/option-set-id
| | | +--rw option-set-id | | +--rw pd-pools
-> /server/server-config/option-sets/option-set/option-set-id | | | +--rw pd-pool* [pool-id]
| | +--rw host-reservations | | | +--rw pool-id uint32
| | +--rw host-reservation* [cli-id] | | | +--rw prefix inet:ipv6-prefix
| | +--rw cli-id uint32 | | | +--rw prefix-length uint8
| | +--rw (client-identifier)? | | | +--rw valid-lifetime yang:timeticks
| | | +--:(duid) | | | +--rw renew-time yang:timeticks
| | | | +--rw type-code? uint16 | | | +--rw rebind-time yang:timeticks
| | | | +--rw (duid-type)? | | | +--rw preferred-lifetime yang:timeticks
| | | | +--:(duid-llt) | | | +--rw rapid-commit boolean
| | | | | +--rw duid-llt-hardware-type? uint16 | | | +--rw client-class? string
| | | | | +--rw duid-llt-time? | | | +--rw max-pd-space-utilization threshold
yang:timeticks | | | +--rw option-set-id -> /server/server-config/option-sets/option-set/option-set-id
| | | | | +--rw duid-llt-link-layer-addr? | | +--rw host-reservations
yang:mac-address | | +--rw host-reservation* [cli-id]
| | | | +--:(duid-en) | | +--rw cli-id uint32
| | | | | +--rw duid-en-enterprise-number? uint32 | | +--rw (client-identifier)?
| | | | | +--rw duid-en-identifier? string | | | +--:(duid)
| | | | +--:(duid-ll) | | | | +--rw type-code? uint16
| | | | | +--rw duid-ll-hardware-type? uint16 | | | | +--rw (duid-type)?
| | | | | +--rw duid-ll-link-layer-addr? | | | | +--:(duid-llt)
yang:mac-address | | | | | +--rw duid-llt-hardware-type? uint16
| | | | +--:(duid-uuid) | | | | | +--rw duid-llt-time? yang:timeticks
| | | | | +--rw uuid? yang:uuid | | | | | +--rw duid-llt-link-layer-addr? yang:mac-address
| | | | +--:(duid-unknown) | | | | +--:(duid-en)
| | | | +--rw data? binary | | | | | +--rw duid-en-enterprise-number? uint32
| | | +--:(hw-address) | | | | | +--rw duid-en-identifier? string
| | | +--rw hardware-address? yang:mac-address | | | | +--:(duid-ll)
| | +--rw reserv-addr* inet:ipv6-address | | | | | +--rw duid-ll-hardware-type? uint16
| | +--rw prefix-reservation* [reserv-prefix-id] | | | | | +--rw duid-ll-link-layer-addr? yang:mac-address
| | | +--rw reserv-prefix-id uint32 | | | | +--:(duid-uuid)
| | | +--rw reserv-prefix inet:ipv6-prefix | | | | | +--rw uuid? yang:uuid
| | | +--rw reserv-prefix-len uint8 | | | | +--:(duid-unknown)
| | +--rw hostname? string | | | | +--rw data? binary
| | +--rw option-set-id? | | | +--:(hw-address)
-> /server/server-config/option-sets/option-set/option-set-id | | | +--rw hardware-address? yang:mac-address
| +--rw relay-opaque-paras | | +--rw reserv-addr* inet:ipv6-address
| | +--rw relays* [relay-name] | | +--rw prefix-reservation* [reserv-prefix-id]
| | +--rw relay-name string | | | +--rw reserv-prefix-id uint32
| | +--rw interface-info* [if-name] | | | +--rw reserv-prefix inet:ipv6-prefix
| | | +--rw if-name string | | | +--rw reserv-prefix-len uint8
| | | +--rw interface-id string | | +--rw hostname? string
| | +--rw subscribers* [subscriber] | | +--rw option-set-id? -> /server/server-config/option-sets/option-set/option-set-id
| | | +--rw subscriber uint32 | +--rw relay-opaque-paras
| | | +--rw subscriber-id string | | +--rw relays* [relay-name]
| | +--rw remote-host* [ent-num] | | +--rw relay-name string
| | +--rw ent-num uint32 | | +--rw interface-info* [if-name]
| | +--rw remote-id string | | | +--rw if-name string
| +--rw rsoo-enabled-options | | | +--rw interface-id string
| +--rw rsoo-enabled-option* [option-code] | | +--rw subscribers* [subscriber]
| +--rw option-code uint16 | | | +--rw subscriber uint32
| +--rw description string | | | +--rw subscriber-id string
+--ro server-state | | +--rw remote-host* [ent-num]
+--ro network-ranges | | +--rw ent-num uint32
| +--ro network-range* [network-range-id] | | +--rw remote-id string
| +--ro network-range-id uint32 | +--rw rsoo-enabled-options
| +--ro address-pools | +--rw rsoo-enabled-option* [option-code]
| | +--ro address-pool* [pool-id] | +--rw option-code uint16
| | | +--ro pool-id uint32 | +--rw description string
| | | +--ro total-address-count uint64 +--ro server-state
| | | +--ro allocated-address-conut uint64 +--ro network-ranges
| | +--ro binding-info* [cli-id] | +--ro network-range* [network-range-id]
| | +--ro cli-id uint32 | +--ro network-range-id uint32
| | +--ro duid | +--ro address-pools
| | | +--ro type-code? uint16 | | +--ro address-pool* [pool-id]
| | | +--ro (duid-type)? | | | +--ro pool-id uint32
| | | +--:(duid-llt) | | | +--ro total-address-count uint64
| | | | +--ro duid-llt-hardware-type? uint16 | | | +--ro allocated-address-conut uint64
| | | | +--ro duid-llt-time? yang:timeticks | | +--ro binding-info* [cli-id]
| | | | +--ro duid-llt-link-layer-addr? | | +--ro cli-id uint32
yang:mac-address | | +--ro duid
| | | +--:(duid-en) | | | +--ro type-code? uint16
| | | | +--ro duid-en-enterprise-number? uint32 | | | +--ro (duid-type)?
| | | | +--ro duid-en-identifier? string | | | +--:(duid-llt)
| | | +--:(duid-ll) | | | | +--ro duid-llt-hardware-type? uint16
| | | | +--ro duid-ll-hardware-type? uint16 | | | | +--ro duid-llt-time? yang:timeticks
| | | | +--ro duid-ll-link-layer-addr? | | | | +--ro duid-llt-link-layer-addr? yang:mac-address
yang:mac-address | | | +--:(duid-en)
| | | +--:(duid-uuid) | | | | +--ro duid-en-enterprise-number? uint32
| | | | +--ro uuid? yang:uuid | | | | +--ro duid-en-identifier? string
| | | +--:(duid-unknown) | | | +--:(duid-ll)
| | | +--ro data? binary | | | | +--ro duid-ll-hardware-type? uint16
| | +--ro cli-ia* [iaid] | | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | +--ro ia-type string | | | +--:(duid-uuid)
| | +--ro iaid uint32 | | | | +--ro uuid? yang:uuid
| | +--ro cli-addr* inet:ipv6-address | | | +--:(duid-unknown)
| | +--ro pool-id uint32 | | | +--ro data? binary
| +--ro pd-pools | | +--ro cli-ia* [iaid]
| | +--ro prefix-pool* [pool-id] | | +--ro ia-type string
| | | +--ro pool-id uint32 | | +--ro iaid uint32
| | | +--ro pd-space-utilization threshold | | +--ro cli-addr* inet:ipv6-address
| | +--ro binding-info* [cli-id] | | +--ro pool-id uint32
| | +--ro cli-id uint32 | +--ro pd-pools
| | +--ro duid | | +--ro prefix-pool* [pool-id]
| | | +--ro type-code? uint16 | | | +--ro pool-id uint32
| | | +--ro (duid-type)? | | | +--ro pd-space-utilization threshold
| | | +--:(duid-llt) | | +--ro binding-info* [cli-id]
| | | | +--ro duid-llt-hardware-type? uint16 | | +--ro cli-id uint32
| | | | +--ro duid-llt-time? yang:timeticks | | +--ro duid
| | | | +--ro duid-llt-link-layer-addr? | | | +--ro type-code? uint16
yang:mac-address | | | +--ro (duid-type)?
| | | +--:(duid-en) | | | +--:(duid-llt)
| | | | +--ro duid-en-enterprise-number? uint32 | | | | +--ro duid-llt-hardware-type? uint16
| | | | +--ro duid-en-identifier? string | | | | +--ro duid-llt-time? yang:timeticks
| | | +--:(duid-ll) | | | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | | | +--ro duid-ll-hardware-type? uint16 | | | +--:(duid-en)
| | | | +--ro duid-ll-link-layer-addr? | | | | +--ro duid-en-enterprise-number? uint32
yang:mac-address | | | | +--ro duid-en-identifier? string
| | | +--:(duid-uuid) | | | +--:(duid-ll)
| | | | +--ro uuid? yang:uuid | | | | +--ro duid-ll-hardware-type? uint16
| | | +--:(duid-unknown) | | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | | +--ro data? binary | | | +--:(duid-uuid)
| | +--ro cli-iapd* [iaid] | | | | +--ro uuid? yang:uuid
| | +--ro iaid uint32 | | | +--:(duid-unknown)
| | +--ro cli-prefix* inet:ipv6-prefix | | | +--ro data? binary
| | +--ro cli-prefix-len* uint8 | | +--ro cli-iapd* [iaid]
| | +--ro pool-id uint32 | | +--ro iaid uint32
| +--ro host-reservations | | +--ro cli-prefix* inet:ipv6-prefix
| +--ro binding-info* [cli-id] | | +--ro cli-prefix-len* uint8
| +--ro cli-id uint32 | | +--ro pool-id uint32
| +--ro duid | +--ro host-reservations
| | +--ro type-code? uint16 | +--ro binding-info* [cli-id]
| | +--ro (duid-type)? | +--ro cli-id uint32
| | +--:(duid-llt) | +--ro duid
| | | +--ro duid-llt-hardware-type? uint16 | | +--ro type-code? uint16
| | | +--ro duid-llt-time? yang:timeticks | | +--ro (duid-type)?
| | | +--ro duid-llt-link-layer-addr? | | +--:(duid-llt)
yang:mac-address | | | +--ro duid-llt-hardware-type? uint16
| | +--:(duid-en) | | | +--ro duid-llt-time? yang:timeticks
| | | +--ro duid-en-enterprise-number? uint32 | | | +--ro duid-llt-link-layer-addr? yang:mac-address
| | | +--ro duid-en-identifier? string | | +--:(duid-en)
| | +--:(duid-ll) | | | +--ro duid-en-enterprise-number? uint32
| | | +--ro duid-ll-hardware-type? uint16 | | | +--ro duid-en-identifier? string
| | | +--ro duid-ll-link-layer-addr? | | +--:(duid-ll)
yang:mac-address | | | +--ro duid-ll-hardware-type? uint16
| | +--:(duid-uuid) | | | +--ro duid-ll-link-layer-addr? yang:mac-address
| | | +--ro uuid? yang:uuid | | +--:(duid-uuid)
| | +--:(duid-unknown) | | | +--ro uuid? yang:uuid
| | +--ro data? binary | | +--:(duid-unknown)
| +--ro cli-ia* [iaid] | | +--ro data? binary
| | +--ro ia-type string | +--ro cli-ia* [iaid]
| | +--ro iaid uint32 | | +--ro ia-type string
| | +--ro cli-addr* inet:ipv6-address | | +--ro iaid uint32
| +--ro cli-iapd* [iaid] | | +--ro cli-addr* inet:ipv6-address
| +--ro iaid uint32 | +--ro cli-iapd* [iaid]
| +--ro cli-prefix* inet:ipv6-prefix | +--ro iaid uint32
| +--ro cli-prefix-len* uint8 | +--ro cli-prefix* inet:ipv6-prefix
+--ro packet-stats | +--ro cli-prefix-len* uint8
+--ro solicit-count uint32 +--ro packet-stats
+--ro request-count uint32 +--ro solicit-count uint32
+--ro renew-count uint32 +--ro request-count uint32
+--ro rebind-count uint32 +--ro renew-count uint32
+--ro decline-count uint32 +--ro rebind-count uint32
+--ro release-count uint32 +--ro decline-count uint32
+--ro info-req-count uint32 +--ro release-count uint32
+--ro advertise-count uint32 +--ro info-req-count uint32
+--ro confirm-count uint32 +--ro advertise-count uint32
+--ro reply-count uint32 +--ro confirm-count uint32
+--ro reconfigure-count uint32 +--ro reply-count uint32
+--ro relay-forward-count uint32 +--ro reconfigure-count uint32
+--ro relay-reply-count uint32 +--ro relay-forward-count uint32
+--ro relay-reply-count uint32
notifications: notifications:
+---n notifications +---n notifications
+--ro dhcpv6-server-event +--ro dhcpv6-server-event
+--ro address-pool-running-out +--ro address-pool-running-out
| +--ro total-address-count uint64 | +--ro total-address-count uint64
| +--ro max-address-count uint64 | +--ro max-address-count uint64
| +--ro allocated-address-conut uint64 | +--ro allocated-address-conut uint64
| +--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
skipping to change at page 12, line 35 skipping to change at page 12, line 37
| | +--:(duid-uuid) | | +--:(duid-uuid)
| | | +--ro uuid? yang:uuid | | | +--ro uuid? yang:uuid
| | +--:(duid-unknown) | | +--:(duid-unknown)
| | +--ro data? binary | | +--ro data? binary
| +--ro serv-name? string | +--ro serv-name? string
| +--ro pool-name string | +--ro pool-name string
+--ro pd-pool-running-out +--ro pd-pool-running-out
| +--ro max-pd-space-utilization threshold | +--ro max-pd-space-utilization threshold
| +--ro pd-space-utilization threshold | +--ro pd-space-utilization threshold
| +--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-unknown) | | +--:(duid-unknown)
| | +--ro data? binary | | +--ro data? binary
| +--ro serv-name? string | +--ro serv-name? string
| +--ro pool-name string | +--ro pool-name string
+--ro invalid-client-detected +--ro invalid-client-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
skipping to change at page 13, line 43 skipping to change at page 13, line 46
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-Unknown represents LLT, DUID-EN, DUID-LL and DUID-UUID. DUID-Unknown represents
those unconventional DUIDs. those unconventional DUIDs.
o lease-storage: The server can store lease data in different
repositories, whether in a CSV file for smaller deployments or in
a database for larger deployments.
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 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
skipping to change at page 27, line 26 skipping to change at page 27, line 37
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], [RFC7223]. This module imports typedefs from [RFC6991], [RFC7223].
<CODE BEGINS> file "ietf-dhcpv6-server.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;
}
import ietf-yang-types {
prefix yang;
} }
import ietf-dhcpv6-options { import ietf-yang-types {
prefix dhcpv6-options; prefix yang;
}
import ietf-dhcpv6-options {
prefix dhcpv6-options;
} }
import ietf-dhcpv6-types { import ietf-dhcpv6-types {
prefix dhcpv6-types; prefix dhcpv6-types;
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
} }
organization "DHC WG"; organization "DHC WG";
contact contact
"cuiyong@tsinghua.edu.cn "cuiyong@tsinghua.edu.cn
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 and manage a DHCPv6 server.";
revision 2018-03-04 { revision 2018-09-04 {
description "Resolved most issues on the DHC official description "";
github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
revision 2017-12-22 { revision 2018-03-04 {
description "Resolve most issues on Ian's github."; description "Resolved most issues on the DHC official
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
revision 2017-11-24 { revision 2017-12-22 {
description "First version of the separated server specific description "Resolve most issues on Ian's github.";
YANG model."; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; }
}
/* revision 2017-11-24 {
* Typedef description "First version of the separated server specific
*/ YANG model.";
typedef threshold { reference "I-D: draft-ietf-dhc-dhcpv6-yang";
type union {
type uint16 {
range 0..100;
}
type enumeration {
enum "disabled" {
description "No threshold";
} }
}
}
description "Threshold value in percent";
}
/* /*
* Data Nodes * Typedef
*/ */
container server { typedef threshold {
presence "Enables the server"; type union {
description "DHCPv6 server portion"; type uint16 {
range 0..100;
}
type enumeration {
enum "disabled" {
description "No threshold";
}
}
}
description "Threshold value in percent";
}
/*
* Data Nodes
*/
container server {
presence "Enables the server";
description "DHCPv6 server portion";
/* /*
* Configuration data * Configuration data
*/ */
container server-config { container server-config {
description "This container contains the configuration data description "This container contains the configuration data
of a server."; of a server.";
container serv-attributes { container serv-attributes {
description description
"This container contains basic attributes of a DHCPv6 server "This container contains basic attributes of a DHCPv6 server
such as IPv6 address, server name and so on. Some optional such as IPv6 address, 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.";
container duid { container duid {
description "Sets the DUID of server"; description "Sets the DUID of server";
uses dhcpv6-types:duid; uses dhcpv6-types:duid;
} }
leaf name { leaf name {
type string; type string;
description "server's name"; description "server's name";
} }
leaf description { leaf description {
type string; type string;
description "description of the server."; description "description of the server.";
} }
leaf-list ipv6-address { leaf-list ipv6-address {
type inet:ipv6-address; type inet:ipv6-address;
description "server's IPv6 address."; description "server's IPv6 address.";
} }
leaf-list interfaces-config { leaf-list interfaces-config {
// Note - this should probably be references to // Note - this should probably be references to
// entries in the ietf-interfaces model // entries in the ietf-interfaces model
type if:interface-ref; type if:interface-ref;
description "A leaf list to denote which one or more interfaces description "A leaf list to denote which one or more interfaces
the server should listen on. The default value is to listen the server should listen on. The default value is to listen
on all the interfaces. This node is also used to set a unicast on all the interfaces. This node is also used to set a unicast
address for the server to listen with a specific interface. 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 For example, if people want the server to listen on a unicast
'eth1/2001:db8::1'."; address with a specific interface, he can use the format like
'eth1/2001:db8::1'.";
}
container lease-storage {
description "Indicates how the server stores the lease";
choice storage-type {
description "the type of lease storage";
// leaf persist {
// type boolean;
// mandatory true;
// description "controls whether the new leases and updates to existing leases are
// written to the file";
// }
case memfile {
description "the server stores lease information in a CSV file";
leaf memfile-name {
type string;
description "specifies an absolute location of the lease file in which new leases
and lease updates will be recorded";
}
leaf memfile-lfc-interval {
type uint64;
description "specifies the interval in seconds, at which the server will perform a
lease file cleanup (LFC)";
}
}
case mysql {
leaf mysql-name {
type string;
description "type of the database";
}
leaf mysql-host {
type string;
description "If the database is located
on a different system to the DHCPv6 server, the database host name must also be specified.";
}
leaf mysql-password {
type string;
description "the credentials of the account under which the server will access the database";
}
leaf mysql-port {
type uint8;
description "If the database is located on a different system, the port number may be specified";
}
leaf mysql-lfc-interval {
type uint64;
description "specifies the interval in seconds, at which the server will perform a
lease file cleanup (LFC)";
}
leaf mysql-connect-timeout {
type uint64;
description "If the database is located on a different system, a longer interval needs to be specified";
}
}
case postgresql {
leaf postgresql-name {
type string;
description "type of the database";
}
leaf postgresql-host {
type string;
description "If the database is located
on a different system to the DHCPv6 server, the database host name must also be specified.";
}
leaf postgresql-password {
type string;
description "the credentials of the account under which the server will access the database";
}
leaf postgresql-port {
type uint8;
description "If the database is located on a different system, the port number may be specified";
}
leaf postgresql-lfc-interval {
type uint64;
description "specifies the interval in seconds, at which the server will perform a
lease file cleanup (LFC)";
}
leaf postgresql-connect-timeout {
type uint64;
description "If the database is located on a different system, a longer interval needs to be specified";
}
}
case cassandra {
leaf cassandra-name {
type string;
description "type of the database";
}
leaf cassandra-contact-points {
type string;
description "Cassandra takes a list of comma separated IP addresses to contact the cluster";
}
leaf cassandra-password {
type string;
description "the credentials of the account under which the server will access the database";
}
leaf cassandra-lfc-interval {
type uint64;
description "specifies the interval in seconds, at which the server will perform a
lease file cleanup (LFC)";
}
leaf cassandra-connect-timeout {
type uint64;
description "If the database is located on a different system, a longer interval needs to be specified";
}
}
}
}
uses dhcpv6-types:vendor-infor;
} }
uses dhcpv6-types:vendor-infor;
}
container option-sets { container option-sets {
description "DHCPv6 employs various options to carry additional description "DHCPv6 employs various options to carry additional
information and parameters in DHCP messages. This container defines information and parameters in DHCP messages. This container defines
all the possible options that need to be configured at the server all the possible options that need to be configured at the server
side. "; side. ";
list option-set { list option-set {
key option-set-id; key option-set-id;
description "A server may allow different option sets to be description "A server may allow different option sets to be
configured for different conditions (i.e. different networks, configured for different conditions (i.e. different networks,
clients and etc). This 'option-set' list enables various sets of clients and etc). This 'option-set' list enables various sets of
options being defined and configured in a single server. Different options being defined and configured in a single server. Different
sets are distinguished by the key called 'option-set-id'. All the sets are distinguished by the key called 'option-set-id'. All the
possible options discussed above are defined in the list and each possible options discussed above are defined in the list and each
option is corresponding to a container. Since all the options in option is corresponding to a container. Since all the options in
the list are optional, each container in this list has a 'presence' the list are optional, each container in this list has a 'presence'
statement to indicate whether this option (container) will be statement to indicate whether this option (container) will be
included in the current option set or not. In addition, each container included in the current option set or not. In addition, each container
also has a 'if-feature' statement to indicate whether the server also has a 'if-feature' statement to indicate whether the server
supports this option (container)."; supports this option (container).";
leaf option-set-id { leaf option-set-id {
type uint32; type uint32;
description "option set id"; description "option set id";
} }
uses dhcpv6-options:server-option-definitions; uses dhcpv6-options:server-option-definitions;
uses dhcpv6-options:custom-option-definitions; uses dhcpv6-options:custom-option-definitions;
} }
} }
container network-ranges {
container network-ranges {
description "This model supports a hierarchy description "This model supports a hierarchy
to achieve dynamic configuration. That is to say we could configure the 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 server at different levels through this model. The top level is a global
level which is defined as the container 'network-ranges'. The following level which is defined as the container 'network-ranges'. The following
levels are defined as sub-containers under it. The 'network-ranges' levels are defined as sub-containers under it. The 'network-ranges'
contains the parameters (e.g. option-sets) that would be allocated to contains the parameters (e.g. option-sets) that would be allocated to
all the clients served by this server."; all the clients served by this server.";
leaf option-set-id { leaf option-set-id {
type leafref { type leafref {
path "/server/server-config/option-sets/option-set/option-set-id"; path "/server/server-config/option-sets/option-set/option-set-id";
} }
description description
"The ID field of relevant global option-set to be provisioned to "The ID field of relevant global option-set to be provisioned to
clients."; clients.";
} }
list network-range { list network-range {
key network-range-id; key network-range-id;
description description
"Under the 'network-ranges' container, a 'network-range' list "Under the 'network-ranges' container, a 'network-range' list
is defined to configure the server at a network level which is also is defined to configure the server at a network level which is also
considered as the second level. Different network are identified by the considered as the second level. Different network are identified by the
key 'network-range-id'. This is because a server may have different key 'network-range-id'. This is because a server may have different
configuration parameters (e.g. option sets) for different networks."; configuration parameters (e.g. option sets) for different networks.";
leaf network-range-id { leaf network-range-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "equivalent to subnet id"; description "equivalent to subnet id";
} }
leaf network-description { leaf network-description {
type string; type string;
mandatory true; mandatory true;
description "description of the subnet"; description "description of the subnet";
} }
leaf network-prefix { leaf network-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "subnet prefix"; description "subnet prefix";
} }
leaf option-set-id { leaf option-set-id {
type leafref { type leafref {
path "/server/server-config/option-sets/option-set/option-set-id"; path "/server/server-config/option-sets/option-set/option-set-id";
} }
description "The ID field of relevant option-set to be provisioned to description "The ID field of relevant option-set to be provisioned to
clients of this network-range."; clients of this network-range.";
} }
container address-pools {
container address-pools {
description description
"A container that describes the DHCPv6 server's "A container that describes the DHCPv6 server's
address pools."; address pools.";
list address-pool { list address-pool {
key pool-id; key pool-id;
description "A DHCPv6 server can be configured with description "A DHCPv6 server can be configured with
several address pools. This list defines such address pools several address pools. This list defines such address pools
which are distinguished by the key called 'pool-id'."; which are distinguished by the key called 'pool-id'.";
leaf pool-id { leaf pool-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "pool id"; description "pool id";
} }
leaf pool-prefix { leaf pool-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "pool prefix"; description "pool prefix";
} }
leaf start-address { leaf start-address {
type inet:ipv6-address-no-zone; type inet:ipv6-address-no-zone;
mandatory true; mandatory true;
description "start address"; description "start address";
} }
leaf end-address { leaf end-address {
type inet:ipv6-address-no-zone; type inet:ipv6-address-no-zone;
mandatory true; mandatory true;
description "end address"; description "end address";
} }
leaf valid-lifetime { leaf valid-lifetime {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "valid liftime for IA"; description "valid liftime for IA";
} }
leaf renew-time { leaf renew-time {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "renew time"; description "renew time";
} }
leaf rebind-time { leaf rebind-time {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "rebind time"; description "rebind time";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "preferred lifetime for IA"; description "preferred lifetime for IA";
} }
leaf rapid-commit { leaf rapid-commit {
type boolean; type boolean;
mandatory true; mandatory true;
description "A boolean value specifies whether the pool description "A boolean value specifies whether the pool
supports client-server exchanges involving two messages."; supports client-server exchanges involving two messages.";
} }
leaf client-class { leaf client-class {
type string; type string;
description description
"If this leaf is specified, this pool will only serve "If this leaf is specified, this pool will only serve
the clients belonging to this class."; the clients belonging to this class.";
} }
leaf max-address-count { leaf max-address-count {
type threshold; type threshold;
mandatory true; mandatory true;
description "maximum count of addresses that can description "maximum count of addresses that can
be allocated in this pool. This value may be be allocated in this pool. This value may be
less than count of total addresses."; less than count of total addresses.";
} }
leaf option-set-id { leaf option-set-id {
type leafref { type leafref {
path "/server/server-config/option-sets/option-set/option-set-id"; path "/server/server-config/option-sets/option-set/option-set-id";
} }
mandatory true; 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 address-pool."; provisioned to clients of this address-pool.";
} }
} }
} }
container pd-pools {
container pd-pools {
description "If a server supports prefix delegation function, this description "If a server supports prefix delegation function, this
container will be used to define the delegating router's prefix container will be used to define the delegating router's prefix
pools."; pools.";
list pd-pool { list pd-pool {
key pool-id; key pool-id;
description "Similar to server's address pools, a delegating description "Similar to server's address pools, a delegating
router can also be configured with multiple prefix pools router can also be configured with multiple prefix pools
specified by a list called 'prefix-pool'."; specified by a list 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 { leaf prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "ipv6 prefix"; description "ipv6 prefix";
}
leaf prefix-length { }
type uint8; leaf prefix-length {
mandatory true; type uint8;
description "prefix length"; mandatory true;
} description "prefix length";
leaf valid-lifetime { }
type yang:timeticks; leaf valid-lifetime {
type yang:timeticks;
mandatory true; mandatory true;
description "valid lifetime for IA"; description "valid lifetime for IA";
} }
leaf renew-time { leaf renew-time {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "renew time"; description "renew time";
} }
leaf rebind-time { leaf rebind-time {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "rebind time"; description "rebind time";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type yang:timeticks; type yang:timeticks;
mandatory true; mandatory true;
description "preferred lifetime for IA"; description "preferred lifetime for IA";
} }
leaf rapid-commit { leaf rapid-commit {
type boolean; type boolean;
mandatory true; mandatory true;
description "A boolean value specifies whether the server description "A boolean value specifies whether the server
support client-server exchanges involving two messages defined."; support client-server exchanges involving two messages defined.";
} }
leaf client-class { leaf client-class {
type string; type string;
description "client class"; description "client class";
} }
leaf max-pd-space-utlization { leaf max-pd-space-utilization {
type threshold; type threshold;
mandatory true; mandatory true;
description "Maximum utilization of pd space in this pool"; description "Maximum utilization of pd space in this pool";
} }
leaf option-set-id { leaf option-set-id {
type leafref { type leafref {
path "/server/server-config/option-sets/option-set/option-set-id"; path "/server/server-config/option-sets/option-set/option-set-id";
}
mandatory true;
description "The ID field of relevant option-set to be
provisioned to clients of this prefix-pool.";
}
} }
mandatory true; }
description "The ID field of relevant option-set to be
provisioned to clients of this prefix-pool.";
}
}
}
container host-reservations { container host-reservations {
description description
"This container allows the server to make reservations at host level."; "This container allows the server to make reservations at host level.";
list host-reservation { list host-reservation {
key cli-id; key cli-id;
description "This list allows the server to reserve addresses, description "This list allows the server to reserve addresses,
prefixes, hostname and options for different clients."; prefixes, hostname and options for different clients.";
leaf cli-id { leaf cli-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "client id"; description "client id";
} }
choice client-identifier { choice client-identifier {
description "When making reservations, the server needs to choose a description "When making reservations, the server needs to choose a
identifier to identify the server. Currently 'DUID' and 'hardware identifier to identify the client. Currently 'DUID' and 'hardware
address' are supported."; address' are supported.";
case duid { case duid {
description "DUID"; description "DUID";
uses dhcpv6-types:duid; uses dhcpv6-types:duid;
} }
case hw-address { case hw-address {
description "hardware address"; description "hardware address";
leaf hardware-address { leaf hardware-address {
type yang:mac-address; type yang:mac-address;
description "MAC address of client"; description "MAC address of client";
skipping to change at page 35, line 17 skipping to change at page 37, line 48
leaf-list reserv-addr { leaf-list reserv-addr {
type inet:ipv6-address; type inet:ipv6-address;
description "reserved addr"; description "reserved addr";
} }
list prefix-reservation { list prefix-reservation {
key reserv-prefix-id; key reserv-prefix-id;
description "reserved prefix reservation"; description "reserved prefix reservation";
leaf reserv-prefix-id { leaf reserv-prefix-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "reserved prefix id"; description "reserved prefix id";
} }
leaf reserv-prefix { leaf reserv-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "reserved prefix"; description "reserved prefix";
} }
leaf reserv-prefix-len { leaf reserv-prefix-len {
type uint8; type uint8;
mandatory true; mandatory true;
description "reserved prefix length"; description "reserved prefix length";
} }
} }
leaf hostname { leaf hostname {
type string; type string;
description "reserved hostname"; description "reserved hostname";
} }
leaf option-set-id { leaf option-set-id {
type leafref { type leafref {
path "/server/server-config/option-sets/option-set/option-set-id"; path "/server/server-config/option-sets/option-set/option-set-id";
} }
description "The ID field of relevant option-set to be provisioned description "The ID field of relevant option-set to be provisioned
in the host reservation."; in the host reservation.";
} }
} }
} }
} }
} }
container relay-opaque-paras { container relay-opaque-paras {
description "This container contains some opaque values in Relay Agent description "This container contains some opaque values in Relay Agent
options that need to be configured on the server side only for value options that need to be configured on the server side only for value
match. Such Relay Agent options include Interface-Id option, match. Such Relay Agent options include Interface-Id option,
Remote-Id option and Subscriber-Id option."; Remote-Id option and Subscriber-Id option.";
list relays { list relays {
key relay-name; key relay-name;
description "relay agents"; description "relay agents";
leaf relay-name { leaf relay-name {
type string; type string;
mandatory true; mandatory true;
description "relay agent name"; 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
*/
container server-state {
config "false";
description "states of server";
container network-ranges {
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.";
list network-range {
key network-range-id;
description "The ID field of relevant option-set to be provisioned
to clients of this network-range.";
leaf network-range-id {
type uint32;
mandatory true;
description "equivalent to subnet id";
} }
container address-pools { list interface-info {
description "A container that describes the DHCPv6 server's address pools"; key if-name;
list address-pool { description "interface info";
key pool-id; leaf if-name {
description "A DHCPv6 server can be configured with type string;
several address pools. This list defines such address pools mandatory true;
which are distinguished by the key called 'pool-id'."; description "interface name";
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
} }
leaf total-address-count { leaf interface-id {
type uint64; type string;
mandatory true; mandatory true;
description "count of total addresses in the pool"; description "interface id";
} }
leaf allocated-address-conut {
type uint64;
mandatory true;
description "count of allocated addresses in the pool";
} }
} list subscribers {
list binding-info { key subscriber;
key cli-id; description "subscribers";
description "A list that records a binding information for each DHCPv6 leaf subscriber {
client that has already been allocated IPv6 addresses."; type uint32;
leaf cli-id { mandatory true;
type uint32; description "subscriber";
mandatory true; }
description "client id"; leaf subscriber-id {
type string;
mandatory true;
description "subscriber id";
} }
container duid {
description "Read the DUID";
uses dhcpv6-types:duid;
} }
list cli-ia { list remote-host {
key iaid; key ent-num;
description "client IA"; description "remote host";
leaf ia-type { leaf ent-num {
type string; type uint32;
mandatory true; mandatory true;
description "IA type"; description "enterprise number";
}
leaf iaid {
type uint32;
mandatory true;
description "IAID";
}
leaf-list cli-addr {
type inet:ipv6-address;
description "client addr";
}
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
} }
} leaf remote-id {
} type string;
container pd-pools { mandatory true;
description "If a server supports prefix delegation function, description "remote id";
this container will be used to define the delegating
router's prefix 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 pd-space-utilization {
type threshold;
mandatory true;
description "current PD space utilization";
} }
} }
list binding-info {
key cli-id;
description "A list records a binding information for each DHCPv6
client that has already been alloated IPv6 prefixes.";
leaf cli-id {
type uint32;
mandatory true;
description "client id";
} }
container duid {
description "Reads the DUID";
uses dhcpv6-types:duid;
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";
} }
list cli-iapd { leaf description {
key iaid; type string;
description "client IAPD"; mandatory true;
leaf iaid { description "description of the option";
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";
}
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
} }
} }
} }
container host-reservations {
description "This container provides host reservations in the host level.";
list binding-info {
key cli-id;
description
"A list records a binding information for each DHCPv6
client that has already been alloated IPv6 addresses or prefixes
by host reservations.";
leaf cli-id {
type uint32;
mandatory true;
description "client id";
}
container duid {
description "Reads the DUID";
uses dhcpv6-types:duid;
}
list cli-ia {
key iaid;
description "client IA";
leaf ia-type {
type string;
mandatory true;
description "IA type, IA_NA or IA_TA";
} }
leaf iaid {
type uint32; /*
mandatory true; * State data
description "IAID"; */
container server-state {
config "false";
description "states of server";
container network-ranges {
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.";
list network-range {
key network-range-id;
description "The ID field of relevant option-set to be provisioned
to clients of this network-range.";
leaf network-range-id {
type uint32;
mandatory true;
description "equivalent to subnet id";
} }
leaf-list cli-addr { container address-pools {
type inet:ipv6-address; description "A container that describes the DHCPv6 server's address pools";
description "client addr"; list address-pool {
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-id'.";
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
leaf total-address-count {
type uint64;
mandatory true;
description "count of total addresses in the pool";
}
leaf allocated-address-conut {
type uint64;
mandatory true;
description "count of allocated addresses in the pool";
}
}
list binding-info {
key cli-id;
description "A list that records a binding information for each DHCPv6
client that has already been allocated IPv6 addresses.";
leaf cli-id {
type uint32;
mandatory true;
description "client id";
} }
} container duid {
description "Read the DUID";
list cli-iapd { uses dhcpv6-types:duid;
key iaid;
description "client IAPD";
leaf iaid {
type uint32;
mandatory true;
description "IAID";
} }
leaf-list cli-prefix { list cli-ia {
type inet:ipv6-prefix; key iaid;
description "client ipv6 prefix"; description "client IA";
leaf ia-type {
type string;
mandatory true;
description "IA type";
}
leaf iaid {
type uint32;
mandatory true;
description "IAID";
}
leaf-list cli-addr {
type inet:ipv6-address;
description "client addr";
}
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
}
}
}
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 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-list cli-prefix-len { leaf pd-space-utilization {
type uint8; type threshold;
description "client prefix length"; mandatory true;
description "current PD space utilization";
} }
} }
} list binding-info {
} key cli-id;
description "A list records a binding information for each DHCPv6
client that has already been alloated IPv6 prefixes.";
leaf cli-id {
type uint32;
mandatory true;
description "client id";
}
container duid {
description "Reads the DUID";
uses dhcpv6-types:duid;
}
list cli-iapd {
key iaid;
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";
}
leaf pool-id {
type uint32;
mandatory true;
description "pool id";
}
}
}
}
} container host-reservations {
} description "This container provides host reservations in the host level.";
list binding-info {
key cli-id;
description
"A list records a binding information for each DHCPv6
client that has already been alloated IPv6 addresses or prefixes
by host reservations.";
leaf cli-id {
type uint32;
mandatory true;
description "client id";
}
container duid {
description "Reads the DUID";
uses dhcpv6-types:duid;
}
list cli-ia {
key iaid;
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";
}
}
list cli-iapd {
key iaid;
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 the packet statistics related to description "A container presents 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 { leaf advertise-count {
type uint32; type uint32;
mandatory true; mandatory true;
description "advertise counter"; description "advertise counter";
} }
leaf confirm-count { leaf confirm-count {
type uint32; type uint32;
mandatory true; mandatory true;
description "confirm counter"; description "confirm counter";
} }
leaf reply-count { leaf reply-count {
type uint32; type uint32;
mandatory true; mandatory true;
description "reply counter"; description "reply counter";
} }
leaf reconfigure-count { leaf reconfigure-count {
type uint32; type uint32;
mandatory true; mandatory true;
description "reconfigure counter"; description "reconfigure counter";
} }
leaf relay-forward-count { leaf relay-forward-count {
type uint32; type uint32;
mandatory true; mandatory true;
description "relay forward counter"; description "relay forward counter";
} }
leaf relay-reply-count { leaf relay-reply-count {
type uint32; type uint32;
mandatory true; mandatory true;
description "relay reply counter"; 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 address-pool-running-out { container address-pool-running-out {
description "raised when the address 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 total-address-count { leaf total-address-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "count of total addresses in the pool"; description "count of total addresses in the pool";
} }
leaf max-address-count { leaf max-address-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "maximum count of addresses that can be allocated description "maximum count of addresses that can be allocated
in the pool. This value may be less than count of total in the pool. This value may be less than count of total
addresses"; addresses";
} }
leaf allocated-address-conut { leaf allocated-address-conut {
type uint64; type uint64;
mandatory true; mandatory true;
description "count of allocated addresses in the pool"; description "count of allocated addresses in the pool";
}
container duid {
description "server duid";
uses dhcpv6-types:duid;
} }
container duid {
description "server duid";
uses dhcpv6-types:duid;
}
leaf serv-name { leaf serv-name {
type string; type string;
description "server name"; description "server name";
} }
leaf pool-name { leaf pool-name {
type string; type string;
mandatory true; mandatory true;
description "pool name"; description "pool name";
} }
}
container pd-pool-running-out {
description "raised when the address/prefix pool is going to
run out. A threshold for utilization ratio of the pool has
been defined in the server feature so that it will notify the
administrator when the utilization ratio reaches the
threshold, and such threshold is a settable parameter";
leaf max-pd-space-utilization {
type threshold;
mandatory true;
description "maximum pd space utilization";
}
leaf pd-space-utilization {
type threshold;
mandatory true;
description "current pd space utilization";
} }
container pd-pool-running-out {
description "raised when the address/prefix pool is going to
run out. A threshold for utilization ratio of the pool has
been defined in the server feature so that it will notify the
administrator when the utilization ratio reaches the
threshold, and such threshold is a settable parameter";
leaf max-pd-space-utilization {
type threshold;
mandatory true;
description "maximum pd space utilization";
}
leaf pd-space-utilization {
type threshold;
mandatory true;
description "current pd space utilization";
}
container duid { container duid {
description "Sets the DUID"; description "Sets the DUID";
uses dhcpv6-types:duid; uses dhcpv6-types:duid;
} }
leaf serv-name { leaf serv-name {
type string; type string;
description "server name"; description "server name";
} }
leaf pool-name { leaf pool-name {
type string; type string;
mandatory true; mandatory true;
description "pool name"; description "pool name";
} }
} }
container invalid-client-detected { container invalid-client-detected {
description "raised when the server has found a client which description "raised when the server has found a client which
can be regarded as a potential attacker. Some description can be regarded as a potential attacker. Some description
could also be included."; could also be included.";
container duid { container duid {
description "Sets the DUID"; description "Sets the DUID";
uses dhcpv6-types:duid; uses dhcpv6-types:duid;
} }
leaf description { leaf description {
type string; type string;
description "description of the event"; 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], [RFC7223]. This module imports typedefs from [RFC6991], [RFC7223].
<CODE BEGINS> file "ietf-dhcpv6-relay.yang" <CODE BEGINS> file "ietf-dhcpv6-relay.yang"
module ietf-dhcpv6-relay { module ietf-dhcpv6-relay {
yang-version 1.1; yang-version 1.1;
skipping to change at page 45, line 51 skipping to change at page 48, line 33
"cuiyong@tsinghua.edu.cn "cuiyong@tsinghua.edu.cn
lh.sunlinh@gmail.com lh.sunlinh@gmail.com
ian.farrer@telekom.de ian.farrer@telekom.de
sladjana.zechlin@telekom.de sladjana.zechlin@telekom.de
hezihao9512@gmail.com"; hezihao9512@gmail.com";
description description
"This model defines a YANG data model that can be "This model defines a YANG data model that can be
used to configure and manage a DHCPv6 relay."; used to configure and manage a DHCPv6 relay.";
revision 2018-09-04 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2018-03-04 { revision 2018-03-04 {
description "Resolved most issues on the DHC official description "Resolved most issues on the DHC official
github"; github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
revision 2017-12-22 { revision 2017-12-22 {
description description
"Resolve most issues on Ian's github."; "Resolve most issues on Ian's github.";
reference reference
skipping to change at page 55, line 44 skipping to change at page 58, line 31
"cuiyong@tsinghua.edu.cn "cuiyong@tsinghua.edu.cn
wangh13@mails.tsinghua.edu.cn wangh13@mails.tsinghua.edu.cn
lh.sunlinh@gmail.com lh.sunlinh@gmail.com
ian.farrer@telekom.de ian.farrer@telekom.de
sladjana.zechlin@telekom.de sladjana.zechlin@telekom.de
hezihao9512@gmail.com "; hezihao9512@gmail.com ";
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-09-04 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2018-03-04 { revision 2018-03-04 {
description "Resolved most issues on the DHC official description "Resolved most issues on the DHC official
github"; github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
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";
} }
/* /*
* Data Nodes * Data Nodes
*/ */
container client { container client {
presence "Enables the client"; presence "Enables the client";
description "dhcpv6 client portion"; description "dhcpv6 client portion";
container client-config { container client-config {
description "configuration tree of client"; description "configuration tree of client";
skipping to change at page 63, line 8 skipping to change at page 65, line 49
"cuiyong@tsinghua.edu.cn "cuiyong@tsinghua.edu.cn
wangh13@mails.tsinghua.edu.cn wangh13@mails.tsinghua.edu.cn
lh.sunlinh@gmail.com lh.sunlinh@gmail.com
ian.farrer@telekom.de ian.farrer@telekom.de
sladjana.zechlin@telekom.de sladjana.zechlin@telekom.de
hezihao9512@gmail.com"; hezihao9512@gmail.com";
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 DHCPv6 options."; used to configure DHCPv6 options.";
revision 2018-09-04 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2018-03-04 { revision 2018-03-04 {
description "Resolved most issues on the DHC official description "Resolved most issues on the DHC official
github"; github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
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";
} }
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-servers-op { feature dns-servers-op {
description "Support for DNS Servers 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+)
Servers option"; Servers option";
} }
feature nis-domain-name-op { feature nis-domain-name-op {
description "Support for Network Information Service (NIS) description "Support for Network Information Service (NIS)
Domain Name option"; Domain Name option";
}
feature nis-plus-domain-name-op {
description "Support for Network Information Service V2 (NIS+)
Server option";
}
feature sntp-server-op {
description "Support for Simple Network Protocol Configuration
(SNTP) Servers option";
}
feature info-refresh-time-op {
description "Support for Information Refresh Time option";
}
feature client-fqdn-op {
description "Support for Client FQDN option";
}
feature posix-timezone-op {
description "Support for New POIX Timezone option";
}
feature tzdb-timezone-op {
description "Support for New TZDB Timezone option";
}
feature ntp-server-op {
description "Support for Network Time Protocol (NTP)
Server option";
}
feature boot-file-url-op {
description "Support for Boot File URL option";
}
feature boot-file-param-op {
description "Support for Boot File Parameters option";
}
feature aftr-name-op {
description "Support for Address Family Transition
Router (AFTR) option";
}
feature kbr-default-name-op {
description "Support for Kerberos Default Name
Option";
}
feature kbr-kdc-op {
description "Support for Kerberos KDC option";
}
feature sol-max-rt-op {
description "Support for SOL_MAX_RT option";
}
feature inf-max-rt-op {
description "Support for INF_MAX_RT option";
}
feature addr-selection-op {
description "Support for Address Selection opiton";
}
feature pcp-server-op {
description "Support for Port Control Protocol (PCP)
option";
}
feature s46-rule-op {
description "Support for S46 Rule option";
}
feature s46-br-op {
description "Support for S46 Border Relay (BR) option";
}
feature s46-dmr-op {
description "Support for S46 Default Mapping Rule
(DMR) option";
}
feature s46-v4-v6-binding-op {
description "Support for S46 IPv4/IPv6 Address
Bind option";
}
// features for relay-supplied options }
feature erp-local-domain-name-op { feature nis-plus-domain-name-op {
description "Support for ERP Local Domain Name option"; description "Support for Network Information Service V2 (NIS+)
} Server option";
}
feature sntp-server-op {
description "Support for Simple Network Protocol Configuration
(SNTP) Servers option";
}
feature info-refresh-time-op {
description "Support for Information Refresh Time option";
}
feature client-fqdn-op {
description "Support for Client FQDN option";
}
feature posix-timezone-op {
description "Support for New POIX Timezone option";
}
feature tzdb-timezone-op {
description "Support for New TZDB Timezone option";
}
feature ntp-server-op {
description "Support for Network Time Protocol (NTP)
Server option";
}
feature boot-file-url-op {
description "Support for Boot File URL option";
}
feature boot-file-param-op {
description "Support for Boot File Parameters option";
}
feature aftr-name-op {
description "Support for Address Family Transition
Router (AFTR) option";
}
feature kbr-default-name-op {
description "Support for Kerberos Default Name
Option";
}
feature kbr-kdc-op {
description "Support for Kerberos KDC option";
}
feature sol-max-rt-op {
description "Support for SOL_MAX_RT option";
}
feature inf-max-rt-op {
description "Support for INF_MAX_RT option";
}
feature addr-selection-op {
description "Support for Address Selection opiton";
}
feature pcp-server-op {
description "Support for Port Control Protocol (PCP)
option";
}
feature s46-rule-op {
description "Support for S46 Rule option";
}
feature s46-br-op {
description "Support for S46 Border Relay (BR) option";
}
feature s46-dmr-op {
description "Support for S46 Default Mapping Rule
(DMR) option";
}
feature s46-v4-v6-binding-op {
description "Support for S46 IPv4/IPv6 Address
Bind option";
}
// features for client options // features for relay-supplied options
feature option-request-op { feature erp-local-domain-name-op {
description "Support for Option Request option"; description "Support for ERP Local Domain Name option";
} }
feature rapid-commit-op {
description "Support for Rapid Commit option"; // features for client options
} feature option-request-op {
feature user-class-op { description "Support for Option Request option";
description "Support for User Class option"; }
} feature rapid-commit-op {
feature vendor-class-op { description "Support for Rapid Commit option";
description "Support for Vendor Class option"; }
} feature user-class-op {
feature client-arch-type-op { description "Support for User Class option";
description "Support for Client System Architecture }
Type option"; feature vendor-class-op {
} description "Support for Vendor Class option";
feature client-network-interface-identifier-op { }
description "Support for Client Network Interface feature client-arch-type-op {
Identifier option"; description "Support for Client System Architecture
} Type option";
feature kbr-principal-name-op { }
description "Support for Kerberos Principal feature client-network-interface-identifier-op {
Name option"; description "Support for Client Network Interface
} Identifier option";
feature kbr-realm-name-op { }
description "Support Kerberos Realm Name option"; feature kbr-principal-name-op {
} description "Support for Kerberos Principal
feature client-link-layer-addr-op { Name option";
description "Support for Client Link-Layer Address }
Option"; feature kbr-realm-name-op {
} description "Support Kerberos Realm Name option";
}
feature client-link-layer-addr-op {
description "Support for Client Link-Layer Address
Option";
}
// features for custom options
feature operator-op-ipv6-address {
description "Support for Option with IPv6 Addresses";
}
feature operator-op-single-flag {
description "Support for Option with Single Flag";
}
feature operator-op-ipv6-prefix {
description "Support for Option with IPv6 Prefix";
}
feature operator-op-int32 {
description "Support for Opion with 32-bit
Integer Value";
}
feature operator-op-int16 {
description "Support for Opion with 16-bit Integer Value";
}
feature operator-op-int8 {
description "Support for Opion with 8-bit Integer Value";
}
feature operator-op-uri {
description "Support for Opion with URI";
}
feature operator-op-textstring {
description "Support for Opion with Text String";
}
feature operator-op-var-data {
description "Support for Opion with Variable-Length Data";
}
feature operator-op-dns-wire {
description "Support for Opion with DNS Wire
Format Domain Name List";
}
// features for custom options
feature operator-op-ipv6-address {
description "Support for Option with IPv6 Addresses";
}
feature operator-op-single-flag {
description "Support for Option with Single Flag";
}
feature operator-op-ipv6-prefix {
description "Support for Option with IPv6 Prefix";
}
feature operator-op-int32 {
description "Support for Opion with 32-bit
Integer Value";
}
feature operator-op-int16 {
description "Support for Opion with 16-bit Integer Value";
}
feature operator-op-int8 {
description "Support for Opion with 8-bit Integer Value";
}
feature operator-op-uri {
description "Support for Opion with URI";
}
feature operator-op-textstring {
description "Support for Opion with Text String";
}
feature operator-op-var-data {
description "Support for Opion with Variable-Length Data";
}
feature operator-op-dns-wire {
description "Support for Opion with DNS Wire
Format Domain Name List";
}
/* /*
* Groupings * Groupings
*/ */
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;
skipping to change at page 72, line 45 skipping to change at page 75, line 43
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;
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 value"; description "parameter 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;
skipping to change at page 80, line 29 skipping to change at page 83, line 27
mandatory true; mandatory true;
description "ce ipv4 addr"; description "ce ipv4 addr";
} }
leaf bind-prefix6-len { leaf bind-prefix6-len {
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-address;
mandatory true; mandatory true;
description "bind ipv6 prefix"; description "bind ipv6 prefix";
} }
uses dhcpv6-types: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.
skipping to change at page 83, line 25 skipping to change at page 86, line 23
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 of description "The vendor-class-data is composed of a series of
separate items, each of which describes some characteristic separate items, each of which describes some characteristic
skipping to change at page 84, line 49 skipping to change at page 87, line 48
mandatory true; mandatory true;
description "most preferred flag"; description "most preferred flag";
} }
} }
} }
container client-network-interface-identifier-option { container client-network-interface-identifier-option {
if-feature client-network-interface-identifier-op; if-feature client-network-interface-identifier-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_NII (62) Client Network Interface description "OPTION_NII (62) Client Network Interface
Identifier Option"; Identifier Option";
reference "RFC5970: DHCPv6 Options for Network Boot"; reference "RFC5970: DHCPv6 Options for Network Boot";
leaf type { leaf type {
type uint8; type uint8;
mandatory true; mandatory true;
description "type"; description "type";
} }
leaf major { leaf major {
type uint8; type uint8;
mandatory true; mandatory true;
description "major"; description "major";
skipping to change at page 85, line 27 skipping to change at page 88, line 25
} }
} }
container kbr-principal-name-option { container kbr-principal-name-option {
if-feature kbr-principal-name-op; if-feature kbr-principal-name-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_KRB_PRINCIPAL_NAME (75) Kerberos description "OPTION_KRB_PRINCIPAL_NAME (75) Kerberos
Principal Name Option"; Principal Name Option";
reference "RFC6784: Kerberos Options for DHCPv6"; reference "RFC6784: Kerberos Options for DHCPv6";
list principle-name { list principle-name {
key principle-name-id; key principle-name-id;
description "principle name"; description "principle name";
leaf principle-name-id { leaf principle-name-id {
type uint8; type uint8;
mandatory true; mandatory true;
description "principle name id"; description "principle name id";
} }
leaf name-type { leaf name-type {
type int32; type int32;
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";
} }
} }
container client-link-layer-addr-option { container client-link-layer-addr-option {
if-feature client-link-layer-addr-op; if-feature client-link-layer-addr-op;
presence "Enable this option"; presence "Enable this option";
description "OPTION_CLIENT_LINKLAYER_ADDR (79) DHCPv6 Client description "OPTION_CLIENT_LINKLAYER_ADDR (79) DHCPv6 Client
Link-Layer Address Option"; Link-Layer Address Option";
reference "RFC6939: Client Link-Layer Address Option in reference "RFC6939: Client Link-Layer Address Option in
DHCPv6"; DHCPv6";
leaf link-layer-type { leaf link-layer-type {
skipping to change at page 91, line 52 skipping to change at page 94, line 51
contact contact
"cuiyong@tsinghua.edu.cn "cuiyong@tsinghua.edu.cn
lh.sunlinh@gmail.com lh.sunlinh@gmail.com
ian.farrer@telekom.de ian.farrer@telekom.de
sladjana.zechlin@telekom.de sladjana.zechlin@telekom.de
hezihao9512@gmail.com"; hezihao9512@gmail.com";
description "This model defines a YANG data model that can be description "This model defines a YANG data model that can be
used to define some commonly used DHCPv6 types"; used to define some commonly used DHCPv6 types";
revision 2018-09-04 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2018-01-30 { revision 2018-01-30 {
description "Initial revision"; description "Initial revision";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
/* /*
* Grouping * Grouping
*/ */
grouping vendor-infor { grouping vendor-infor {
description "Vendor information."; description "Vendor information.";
 End of changes. 153 change blocks. 
1264 lines changed or deleted 1409 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/