--- 1/draft-ietf-dhc-dhcpv6-yang-12.txt 2020-12-10 06:13:13.103117955 -0800 +++ 2/draft-ietf-dhc-dhcpv6-yang-13.txt 2020-12-10 06:13:13.271122228 -0800 @@ -1,25 +1,25 @@ DHC Working Group Y. Cui Internet-Draft L. Sun Intended status: Standards Track Tsinghua University -Expires: 7 June 2021 I.F. Farrer +Expires: 13 June 2021 I.F. Farrer S.Z. Zechlin Deutsche Telekom AG Z. He Tsinghua University M.N. Nowikowski Internet Systems Consortium - 4 December 2020 + 10 December 2020 YANG Data Model for DHCPv6 Configuration - draft-ietf-dhc-dhcpv6-yang-12 + draft-ietf-dhc-dhcpv6-yang-13 Abstract This document describes YANG data modules for the configuration and management of DHCPv6 servers, relays, and clients. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and @@ -35,21 +35,21 @@ Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." - This Internet-Draft will expire on 7 June 2021. + This Internet-Draft will expire on 13 June 2021. Copyright Notice Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights @@ -66,38 +66,38 @@ 1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 5 2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 5 2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 12 2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 14 3. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 17 3.1. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 17 3.2. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 31 3.3. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 40 - 3.4. RFC8415 Server Options YANG Module . . . . . . . . . . . 49 - 3.5. RFC8415 Relay Options YANG Module . . . . . . . . . . . . 56 - 3.6. RFC8415 Client Options YANG Module . . . . . . . . . . . 62 - 3.7. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 67 - 4. Security Considerations . . . . . . . . . . . . . . . . . . . 71 - 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 72 - 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 73 - 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 74 - 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 74 - 8.1. Normative References . . . . . . . . . . . . . . . . . . 74 - 8.2. Informative References . . . . . . . . . . . . . . . . . 76 + 3.4. RFC8415 Server Options YANG Module . . . . . . . . . . . 50 + 3.5. RFC8415 Relay Options YANG Module . . . . . . . . . . . . 57 + 3.6. RFC8415 Client Options YANG Module . . . . . . . . . . . 64 + 3.7. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 70 + 4. Security Considerations . . . . . . . . . . . . . . . . . . . 74 + 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 75 + 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 76 + 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 76 + 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 77 + 8.1. Normative References . . . . . . . . . . . . . . . . . . 77 + 8.2. Informative References . . . . . . . . . . . . . . . . . 79 Appendix A. Example of Augmenting Additional DHCPv6 Option - Definitions . . . . . . . . . . . . . . . . . . . . . . . 76 + Definitions . . . . . . . . . . . . . . . . . . . . . . . 79 Appendix B. Example Vendor Specific Server Configuration - Module . . . . . . . . . . . . . . . . . . . . . . . . . 79 + Module . . . . . . . . . . . . . . . . . . . . . . . . . 83 Appendix C. Example definition of class selector - configuration . . . . . . . . . . . . . . . . . . . . . . 85 - Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 91 + configuration . . . . . . . . . . . . . . . . . . . . . . 89 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 95 1. Introduction DHCPv6 [RFC8415] is widely used for supplying configuration and other relevant parameters to clients in IPv6 networks. This document defines YANG modules for the configuration and management of DHCPv6 servers, relays and clients. Separate 'element' modules are defined for each of these. There is an additional module per-element defining DHCP options which are relevant for that element (taken from the options defined in [RFC8415]. @@ -271,21 +271,21 @@ +--rw option-set-id* leafref +--rw valid-lifetime? | dhcpv6-common:timer-seconds32 +--rw renew-time? | dhcpv6-common:timer-seconds32 +--rw rebind-time? | dhcpv6-common:timer-seconds32 +--rw preferred-lifetime? | dhcpv6-common:timer-seconds32 +--rw rapid-commit? boolean - +--rw network-range* [network-range-id] + +--rw network-range* [id] | +--rw id uint32 | +--rw description string | +--rw network-prefix inet:ipv6-prefix | +--rw option-set-id* leafref | +--rw valid-lifetime? | | dhcpv6-common:timer-seconds32 | +--rw renew-time? | | dhcpv6-common:timer-seconds32 | +--rw rebind-time? | | dhcpv6-common:timer-seconds32 @@ -794,21 +794,21 @@ * retransmission-failed: Raised when the retransmission mechanism defined in [RFC8415] has failed. 3. DHCPv6 YANG Modules 3.1. DHCPv6 Server YANG Module This module imports typedefs from [RFC6991], [RFC8343]. - file ietf-dhcpv6-server.yang + file "ietf-dhcpv6-server.yang" module ietf-dhcpv6-server { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; prefix "dhcpv6-server"; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; @@ -849,24 +849,29 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 8513; see the RFC itself for full legal notices."; + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } + revision 2020-05-26 { description "Version update for draft -11 publication and to align revisions across the different modules."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; } revision 2019-12-02 { description "Major reworking of the module."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; } @@ -891,30 +896,31 @@ description "First version of the separated server specific YANG model."; reference "I-D: draft-ietf-dhc-dhcpv6-yang"; } /* * Identities */ identity server { - description "DHCPv6 server identity."; base "dhcpv6-common:dhcpv6-node"; + description "DHCPv6 server identity."; } leaf dhcpv6-node-type { - description "Type for a DHCPv6 server."; type identityref { base "dhcpv6-common:dhcpv6-node"; } + description "Type for a DHCPv6 server."; } + /* * Features */ feature prefix-delegation { description "Denotes that the server implements DHCPv6 prefix delegation."; } /* @@ -949,132 +955,134 @@ type dhcpv6-common:timer-seconds32; description "Preferred lifetime for the Identity Association (IA)."; } leaf rapid-commit { type boolean; description "A value of 1 specifies that the pool supports client-server exchanges involving two messages."; } } + grouping lease-information { description "Binding information for each client that has been allocated an IPv6 address or prefix."; leaf client-duid { - description "Client DUID."; type binary; + description "Client DUID."; } leaf iaid { type uint32; mandatory true; description "Client's IAID"; } leaf allocation-time { - description "Time and date that the lease was made."; type yang:date-and-time; + description "Time and date that the lease was made."; } leaf last-renew-rebind { + type yang:date-and-time; description "Time of the last successful renew or rebind."; - type yang:date-and-time; } leaf preferred-lifetime { + type dhcpv6-common:timer-seconds32; description "The preferred lifetime expressed in seconds."; - type dhcpv6-common:timer-seconds32; } leaf valid-lifetime { + type dhcpv6-common:timer-seconds32; description "The valid lifetime for the leased prefix expressed in seconds."; - type dhcpv6-common:timer-seconds32; } leaf lease-t1 { + type dhcpv6-common:timer-seconds32; description "The time interval after which the client should contact the server from which the addresses in the IA_NA were obtained to extend the lifetimes of the addresses assigned to the IA_PD."; - type dhcpv6-common:timer-seconds32; } leaf lease-t2 { + type dhcpv6-common:timer-seconds32; description "The time interval after which the client should contact any available server to extend the lifetimes of the addresses assigned to the IA_PD."; - type dhcpv6-common:timer-seconds32; } } grouping message-stats { description "Counters for DHCPv6 messages."; leaf solicit-count { - config "false"; type uint32; + config "false"; description "Number of Solicit (1) messages received."; } leaf advertise-count { - config "false"; type uint32; + config "false"; description "Number of Advertise (2) messages sent."; } leaf request-count { - config "false"; type uint32; + config "false"; description "Number of Request (3) messages received."; } leaf confirm-count { - config "false"; type uint32; + config "false"; description "Number of Confirm (4) messages received."; } leaf renew-count { - config "false"; type uint32; + config "false"; description "Number of Renew (5) messages received."; } leaf rebind-count { - config "false"; type uint32; + config "false"; description "Number of Rebind (6) messages received."; } leaf reply-count { - config "false"; type uint32; + config "false"; description "Number of Reply (7) messages sent."; } leaf release-count { - config "false"; type uint32; + config "false"; description "Number of Release (8) messages received."; } leaf decline-count { - config "false"; type uint32; + config "false"; description "Number of Decline (9) messages received."; } leaf reconfigure-count { - config "false"; type uint32; + config "false"; description "Number of Reconfigure (10) messages sent."; } leaf information-request-count { - config "false"; type uint32; + config "false"; description "Number of Information-request (11) messages received."; } } /* * Data Nodes */ container dhcpv6-server { + description "Configuration nodes for the DHCPv6 server."; container server-duid { description "DUID of the server."; uses dhcpv6-common:duid; } container vendor-config { description "This container provides a location for augmenting vendor or implementation specific configuration nodes."; } container option-sets { @@ -1110,23 +1119,23 @@ their own class-selector YANG."; } container network-ranges { description "This model is based on an address and parameter allocation hierarchy. The top level is 'global' - which is defined as the container for all network-ranges. Under this are the individual network-ranges."; uses resource-config; list network-range { - key network-range-id; + key id; description "Network-ranges are identified by the - 'network-range-id' key."; + 'id' key."; leaf id { type uint32; mandatory true; description "Equivalent to subnet ID."; } leaf description { type string; mandatory true; description "Description for the network range."; } @@ -1169,62 +1178,64 @@ mandatory true; description "Maximum number of addresses that can be simultaneously allocated from this pool."; } uses resource-config; container host-reservations { description "Configuration for host reservations from the address pool."; list host-reservation { key reserved-addr; + description "List of host reservations."; leaf client-duid { type binary; description "Client DUID for the reservation."; } leaf reserved-addr { type inet:ipv6-address; description "Reserved IPv6 address."; } uses resource-config; } } container active-leases { + config false; description "Holds state related to active client leases."; - config false; leaf total-count { type uint64; mandatory true; description "The total number of addresses in the pool."; - } leaf allocated-count { type uint64; mandatory true; description "The number of addresses or prefixes in the pool that are currently allocated."; } list active-lease { key leased-address; + description "List of active address leases."; leaf leased-address { type inet:ipv6-address; + description "Active address lease entry."; } uses lease-information; } } } } container prefix-pools { + if-feature prefix-delegation; description "Configuration for the DHCPv6 server's prefix pools."; - if-feature prefix-delegation; list prefix-pool { key pool-id; description "List of prefix pools for allocation to clients, distinguished by 'pool-id'."; leaf pool-id { type uint32; mandatory true; description "Unique identifier for the pool."; } leaf pool-prefix { @@ -1242,80 +1253,84 @@ type dhcpv6-common:threshold; mandatory true; description "Maximum percentage utilization of the prefix pool in this pool."; } uses resource-config; container host-reservations { description "Configuration for host reservations from the prefix pool."; list prefix-reservation { - description "reserved prefix reservation"; key reserved-prefix; + description "reserved prefix reservation"; leaf client-duid { type binary; description "Client DUID for the reservation."; } leaf reserved-prefix { type inet:ipv6-prefix; description "Reserved IPv6 prefix"; } leaf reserved-prefix-len { type uint8; description "Reserved IPv6 prefix length."; } } uses resource-config; } container active-leases { + config false; description "Holds state related to for active client prefix leases."; - config false; leaf total-count { type uint64; mandatory true; description "The total number of prefixes in the pool."; } leaf allocated-count { type uint64; mandatory true; description "The number of prefixes in the pool that are currently allocated."; } list active-lease { key leased-prefix; + description "List of active prefix leases."; leaf leased-prefix { type inet:ipv6-prefix; + description "Active leased prefix entry."; } uses lease-information; } } } } } uses message-stats; } } /* * Notifications */ notification address-pool-utilization-threshold-exceeded { description "Notification sent when the address pool utilization exceeds the configured threshold."; leaf pool-id { type leafref { - path "/dhcpv6-server/network-ranges/network-range/address-poo - ls/address-pool/pool-id"; + path "/dhcpv6-server/network-ranges/network-range/" + + "address-pools/address-pool/pool-id"; } + description "Leafref to the address pool which the notification + is being generated for."; } leaf total-address-count { type uint64; mandatory true; description "Count of the total addresses in the pool."; } leaf max-address-count { type uint64; mandatory true; description "Maximum count of addresses that can be allocated @@ -1319,84 +1334,88 @@ type uint64; mandatory true; description "Maximum count of addresses that can be allocated in the pool. This value may be less than count of total addresses."; } leaf allocated-address-count { type uint64; mandatory true; description "Count of allocated addresses in the pool."; + } } notification prefix-pool-utilization-threshold-exceeded { + if-feature prefix-delegation; description "Notification sent when the prefix pool utilization exceeds the configured threshold."; - if-feature prefix-delegation; leaf pool-id { type leafref { - path "/dhcpv6-server/network-ranges/network-range/prefix-pool - s/prefix-pool/pool-id"; + path "/dhcpv6-server/network-ranges/network-range/" + + "prefix-pools/prefix-pool/pool-id"; } mandatory true; + description "Unique identifier for the pool."; } leaf max-pd-space-utilization { - description "PD space utilization threshold."; type leafref { - path "/dhcpv6-server/network-ranges/network-range/prefix-pool - s/prefix-pool/max-pd-space-utilization"; + path "/dhcpv6-server/network-ranges/network-range/" + + "prefix-pools/prefix-pool/max-pd-space-utilization"; } mandatory true; + description "PD space utilization threshold."; } leaf pd-space-utilization { - description "Current PD space utilization"; type uint64; + description "Current PD space utilization"; } } notification invalid-client-detected { description "Notification sent when the server detects an invalid client."; leaf duid { - description "Client DUID."; type binary; + description "Client DUID."; } leaf description { type string; description "Description of the event (e.g. and error code or log message)."; } } notification decline-received { description "Notification sent when the server has received a Decline (9) message from a client."; leaf duid { - description "Client DUID."; type binary; + description "Client DUID."; } list declined-resources { description "List of declined addresses and/or prefixes."; choice resource-type { + description "Type of resource that has been declined."; case declined-address { leaf address { type inet:ipv6-address; + description "Address that has been declined."; } } case declined-prefix { leaf prefix { type inet:ipv6-prefix; + description "Prefix that has been declined."; } } } - } } notification non-success-code-sent { description "Notification sent when the server responded to a client with non-success status code."; leaf status-code { type uint16; mandatory true; description "Status code returned to the client."; @@ -1395,22 +1414,22 @@ notification non-success-code-sent { description "Notification sent when the server responded to a client with non-success status code."; leaf status-code { type uint16; mandatory true; description "Status code returned to the client."; } leaf duid { - description "Client DUID."; type binary; + description "Client DUID."; } } /* * RPCs */ rpc delete-address-lease { nacm:default-deny-all; description "Deletes a client's active address lease from the @@ -1448,34 +1466,32 @@ } } output { leaf return-message { type string; description "Response message from the server."; } } } } - 3.2. DHCPv6 Relay YANG Module This module imports typedefs from [RFC6991], [RFC8343]. - file ietf-dhcpv6-relay.yang + file "ietf-dhcpv6-relay.yang" module ietf-dhcpv6-relay { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay"; prefix "dhcpv6-relay"; - import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; } import ietf-yang-types { prefix yang; reference "RFC 6991: Common YANG Data Types"; @@ -1519,29 +1536,33 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 8513; see the RFC itself for full legal notices."; + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } + revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-05-26 { description "Version update for draft -11 publication and to align revisions across the different modules."; - reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; } revision 2019-09-20 { description ""; reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; } revision 2018-03-04 { description "Resolved most issues on the DHC official @@ -1553,261 +1574,268 @@ description "Resolve most issues on Ians Github."; reference "I-D: draft-ietf-dhc-dhcpv6-yang"; } revision 2017-11-24 { description "First version of the separated relay specific YANG model."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; } /* * Identities */ identity relay { - description "DHCPv6 relay agent identity."; base "dhcpv6-common:dhcpv6-node"; + description "DHCPv6 relay agent identity."; } leaf dhcpv6-node-type { - description "Type for a DHCPv6 relay."; type identityref { base "dhcpv6-common:dhcpv6-node"; } + description "Type for a DHCPv6 relay."; } /* * Features */ feature prefix-delegation { description "Enable if the relay functions as a delegating router for DHCPv6 prefix delegation."; } /* * Groupings */ grouping pd-lease-state { description "State data for the relay."; list pd-leases { - config false; key ia-pd-prefix; + config false; description "Information about an active IA_PD prefix delegation."; leaf ia-pd-prefix { - description "Prefix that is delegated."; type inet:ipv6-prefix; + description "Prefix that is delegated."; } leaf last-renew { + type yang:date-and-time; description "Time of the last successful refresh or renew of the delegated prefix."; - type yang:date-and-time; + } leaf client-peer-address { - description "Peer-address of the client."; type inet:ipv6-address; + description "Peer-address of the client."; } leaf client-duid { - description "DUID of the leasing client."; type binary; + description "DUID of the leasing client."; } leaf server-duid { - description "DUID of the delegating server."; type binary; + description "DUID of the delegating server."; } } } grouping message-statistics { description "Contains counters for the different DHCPv6 message types."; leaf solicit-received-count { - config "false"; type uint32; + config "false"; description "Number of Solicit (1) messages received."; } leaf advertise-sent-count { - config "false"; type uint32; + config "false"; description "Number of Advertise (2) messages sent."; } leaf request-received-count { - config "false"; type uint32; + config "false"; description "Number of Request (3) messages received."; } leaf confirm-received-count { - config "false"; type uint32; + config "false"; description "Number of Confirm (4) messages received."; } leaf renew-received-count { - config "false"; type uint32; + config "false"; description "Number of Renew (5) messages received."; } leaf rebind-received-count { - config "false"; type uint32; + config "false"; description "Number of Rebind (6) messages received."; + } leaf reply-sent-count { - config "false"; type uint32; + config "false"; description "Number of Reply (7) messages received."; } leaf release-received-count { - config "false"; type uint32; + config "false"; description "Number of Release (8) messages sent."; } leaf decline-received-count { - config "false"; type uint32; + config "false"; description "Number of Decline (9) messages sent."; } leaf reconfigure-sent-count { - config "false"; type uint32; + config "false"; description "Number of Reconfigure (10) messages sent."; } leaf information-request-received-count { - config "false"; type uint32; + config "false"; description "Number of Information-request (11) messages received."; } leaf unknown-message-received-count { - config "false"; type uint32; + config "false"; description "Number of messages of unknown type that have been received."; } leaf unknown-message-sent-count { - config "false"; type uint32; + config "false"; description "Number of messages of unknown type that have been sent."; } leaf discarded-message-count { - config "false"; type uint32; + config "false"; description "Number of messages that have been discarded for any reason."; } } - grouping global-statistics { + description "Global statistics for the device."; leaf relay-forward-sent-count { - config "false"; type uint32; + config "false"; description "Number of Relay-forward (12) messages sent."; } leaf relay-forward-received-count { - config "false"; type uint32; + config "false"; description "Number of Relay-forward (12) messages received."; } leaf relay-reply-received-count { - config "false"; type uint32; + config "false"; description "Number of Relay-reply (13) messages received."; } leaf relay-forward-unknown-sent-count { - config "false"; type uint32; + config "false"; description "Number of Relay-forward (12) messages containing a message of unknown type sent."; } leaf relay-forward-unknown-received-count { - config "false"; type uint32; + config "false"; description "Number of Relay-forward (12) messages containing a message of unknown type received."; } leaf discarded-message-count { - config "false"; type uint32; + config "false"; description "Number of messages that have been discarded for any reason."; } } /* * Data Nodes */ container dhcpv6-relay { description "This container contains the configuration data nodes for the relay."; list relay-if { key if-name; + description "List of interfaces configured for DHCPv6 relaying. + + "; leaf if-name { type if:interface-ref; + description "interface-ref to the relay interface."; } leaf-list destination-addresses { type inet:ipv6-address; description "Each DHCPv6 relay agent may be configured with a list of destination addresses for relayed messages. The list may include unicast addresses, multicast addresses or other valid addresses."; } leaf link-address { - description "An address that may be used by the server - to identify the link on which the client is located."; type binary { length "0..16"; } + description "An address that may be used by the server + to identify the link on which the client is located."; } container relay-options { description "Definitions for DHCPv6 options that can be sent by the relay are augmented to this location from other YANG modules as required."; } uses message-statistics; container prefix-delegation { + if-feature prefix-delegation; + presence "Enables prefix delegation for this interface."; description "Controls and holds state information for prefix delegation."; - presence "Enables prefix delegation for this interface."; - if-feature prefix-delegation; uses pd-lease-state; } } uses global-statistics; } /* * Notifications */ notification relay-event { description "DHCPv6 relay event notifications."; container topology-change { description "Raised if the entry for and interface with DHCPv6 related configuration or state is removed from if:interface-refs."; leaf relay-if-name { - description "Name of the interface that has been removed."; type leafref { path "/dhcpv6-relay/relay-if/if-name"; } + description "Name of the interface that has been removed."; } leaf last-ipv6-addr { type inet:ipv6-address; description "Last IPv6 address configured on the interface."; } } } /* * RPCs @@ -1871,21 +1898,21 @@ } } } } 3.3. DHCPv6 Client YANG Module This module imports typedefs from [RFC6991], [RFC8343]. - file ietf-dhcpv6-client.yang + file "ietf-dhcpv6-client.yang" module ietf-dhcpv6-client { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; prefix "dhcpv6-client"; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; @@ -1929,20 +1956,25 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 8513; see the RFC itself for full legal notices."; + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } + revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-05-26 { description "Version update for draft -11 publication and to align revisions across the different modules."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; } @@ -1977,85 +2008,86 @@ /* * Identities */ identity client { base "dhcpv6-common:dhcpv6-node"; description "DHCPv6 client identity."; } leaf dhcpv6-node-type { - description "Type for a DHCPv6 client."; type identityref { base "dhcpv6-common:dhcpv6-node"; + } + description "Type for a DHCPv6 client."; } /* * Groupings */ grouping message-statistics { description "Counters for DHCPv6 messages."; leaf solicit-count { - config "false"; type uint32; + config "false"; description "Number of Solicit (1) messages sent."; } leaf advertise-count { - config "false"; type uint32; + config "false"; description "Number of Advertise (2) messages received."; } leaf request-count { - config "false"; type uint32; + config "false"; description "Number of Request (3) messages sent."; } leaf confirm-count { - config "false"; type uint32; + config "false"; description "Number of Confirm (4) messages sent."; } leaf renew-count { - config "false"; type uint32; + config "false"; description "Number of Renew (5) messages sent."; } leaf rebind-count { - config "false"; type uint32; + config "false"; description "Number of Rebind (6) messages sent."; } leaf reply-count { - config "false"; type uint32; + config "false"; description "Number of Reply (7) messages received."; } leaf release-count { - config "false"; type uint32; + config "false"; description "Number of Release (8) messages sent."; } leaf decline-count { - config "false"; type uint32; + config "false"; description "Number of Decline (9) messages sent."; } leaf reconfigure-count { - config "false"; type uint32; + config "false"; description "Number of Reconfigure (10) messages received."; } leaf information-request-count { - config "false"; type uint32; + config "false"; description "Number of Information-request (11) messages sent."; } } /* * Data Nodes */ container dhcpv6-client { @@ -2087,59 +2119,59 @@ } container ia-na-options { description "An augmentation point for additional options that the client will send in the IA_NA-options field of OPTION_IA_NA."; } container lease-state { config "false"; description "Information about the active IA_NA lease."; leaf ia-na-address { - description "Address that is currently leased."; type inet:ipv6-address; + description "Address that is currently leased."; } leaf preferred-lifetime { + type dhcpv6-common:timer-seconds32; description "The preferred lifetime for the leased address expressed in units of seconds."; - type dhcpv6-common:timer-seconds32; } leaf valid-lifetime { + type dhcpv6-common:timer-seconds32; description "The valid lifetime for the leased address expressed in units of seconds."; - type dhcpv6-common:timer-seconds32; } leaf lease-t1 { + type dhcpv6-common:timer-seconds32; description "The time interval after which the client should contact the server from which the addresses in the IA_NA were obtained to extend the lifetimes of the addresses assigned to the IA_NA."; - type dhcpv6-common:timer-seconds32; } leaf lease-t2 { + type dhcpv6-common:timer-seconds32; description "The time interval after which the client should contact any available server to extend the lifetimes of the addresses assigned to the IA_NA."; - type dhcpv6-common:timer-seconds32; } leaf allocation-time { + type yang:date-and-time; description "Time and date that the address was first leased."; - type yang:date-and-time; } leaf last-renew-rebind { + type yang:date-and-time; description "Time of the last successful renew or rebind of the leased address."; - type yang:date-and-time; } leaf server-duid { - description "DUID of the leasing server."; type binary; + description "DUID of the leasing server."; } } } list ia-ta { key iaid; description "Configuration relevant for an IA_TA."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)."; leaf iaid { type uint32; @@ -2147,107 +2179,107 @@ } container ia-ta-options { description "An augmentation point for additional options that the client will send in the IA_TA-options field of OPTION_IA_TA."; } container lease-state { config "false"; description "Information about an active IA_TA lease."; leaf ia-ta-address { - description "Address that is currently leased."; type inet:ipv6-address; + description "Address that is currently leased."; } leaf preferred-lifetime { + type dhcpv6-common:timer-seconds32; description "The preferred lifetime for the leased address expressed in units of seconds."; - type dhcpv6-common:timer-seconds32; } leaf valid-lifetime { + type dhcpv6-common:timer-seconds32; description "The valid lifetime for the leased address expressed in units of seconds."; - type dhcpv6-common:timer-seconds32; } leaf allocation-time { + type yang:date-and-time; description "Time and date that the address was first leased."; - type yang:date-and-time; } leaf last-renew-rebind { + type yang:date-and-time; description "Time of the last successful renew or rebind of the address."; - type yang:date-and-time; } leaf server-duid { - description "DUID of the leasing server."; type binary; + description "DUID of the leasing server."; } } } list ia-pd { key iaid; + description "Configuration relevant for an IA_PD."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)."; - description "Configuration relevant for an IA_PD."; leaf iaid { type uint32; description "The unique identifier for this IA_PD."; } container ia-pd-options { description "An augmentation point for additional options that the client will send in the IA_PD-options field of OPTION_IA_TA."; } container lease-state { config "false"; description "Information about an active IA_PD delegated prefix."; leaf ia-pd-prefix { - description "Delegated prefix that is currently leased."; type inet:ipv6-prefix; + description "Delegated prefix that is currently leased."; } leaf preferred-lifetime { + type dhcpv6-common:timer-seconds32; description "The preferred lifetime for the leased prefix expressed in units of seconds."; - type dhcpv6-common:timer-seconds32; } leaf valid-lifetime { + type dhcpv6-common:timer-seconds32; description "The valid lifetime for the leased prefix expressed in units of seconds."; - type dhcpv6-common:timer-seconds32; } leaf lease-t1 { + type dhcpv6-common:timer-seconds32; description "The time interval after which the client should contact the server from which the addresses in the IA_NA were obtained to extend the lifetimes of the addresses assigned to the IA_PD."; - type dhcpv6-common:timer-seconds32; } leaf lease-t2 { + type dhcpv6-common:timer-seconds32; description "The time interval after which the client should contact any available server to extend the lifetimes of the addresses assigned to the IA_PD."; - type dhcpv6-common:timer-seconds32; } leaf allocation-time { + type yang:date-and-time; description "Time and date that the prefix was first leased."; - type yang:date-and-time; } leaf last-renew-rebind { + type yang:date-and-time; description "Time of the last successful renew or rebind of the delegated prefix."; - type yang:date-and-time; } leaf server-duid { - description "DUID of the delegating server."; type binary; + description "DUID of the delegating server."; } } } uses message-statistics; } } /* * Notifications */ @@ -2286,73 +2319,73 @@ notification unsuccessful-status-code { description "Notification sent when the client receives a message that includes an unsuccessful Status Code option."; leaf status-code { type uint16; mandatory true; description "Unsuccessful status code received by a client."; } leaf server-duid { + type binary; + mandatory true; description "DUID of the server sending the unsuccessful error code."; - mandatory true; - type binary; } } notification server-duid-changed { description "Notification sent when the client receives a lease from a server with different DUID to the one currently stored by the client."; leaf new-server-duid { - description "DUID of the new server."; - mandatory true; type binary; + mandatory true; + description "DUID of the new server."; } leaf previous-server-duid { - description "DUID of the previous server."; - mandatory true; type binary; + mandatory true; + description "DUID of the previous server."; } leaf lease-ia-na { - description "Reference to the IA_NA lease."; type leafref { path "/dhcpv6-client/client-if/ia-na/iaid"; } + description "Reference to the IA_NA lease."; } leaf lease-ia-ta { - description "Reference to the IA_TA lease."; type leafref { path "/dhcpv6-client/client-if/ia-ta/iaid"; } + description "Reference to the IA_TA lease."; } leaf lease-ia-pd { - description "Reference to the IA_PD lease."; type leafref { path "/dhcpv6-client/client-if/ia-pd/iaid"; } + description "Reference to the IA_PD lease."; } } } 3.4. RFC8415 Server Options YANG Module This module imports typedefs from [RFC6991]. - file ietf-dhcpv6-options-rfc8415-server.yang + file "ietf-dhcpv6-options-rfc8415-server.yang" - module ietf-dhcpv6-options-rfc8415 { + module ietf-dhcpv6-options-rfc8415-server { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-8415-ser - ver"; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-rfc8415- + server"; prefix "rfc8415-srv"; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; } import ietf-dhcpv6-common { prefix dhcpv6-common; @@ -2369,21 +2402,39 @@ organization "DHC WG"; contact "cuiyong@tsinghua.edu.cn wangh13@mails.tsinghua.edu.cn lh.sunlinh@gmail.com ian.farrer@telekom.de sladjana.zechlin@telekom.de hezihao9512@gmail.com"; description "This YANG module contains DHCPv6 options defined - in RFC8415 that can be used by DHCPv6 servers."; + in RFC8415 that can be used by DHCPv6 servers. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8513; see + the RFC itself for full legal notices."; + + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-11-19 { description "Separated into a client specific set of options."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } @@ -2421,37 +2471,40 @@ description "First version of the separated DHCPv6 options YANG model."; reference "I-D:draft-ietf-dhc-dhcpv6-yang"; } /* * Groupings */ grouping preference-option-group { - container preference-option { - description "OPTION_PREFERENCE (7) Preference Option"; + description "OPTION_PREFERENCE (7) Preference Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container preference-option { + description "OPTION_PREFERENCE (7) Preference Option container." + ; leaf pref-value { type uint8; description "The preference value for the server in this message. A 1-octet unsigned integer."; } } } grouping auth-option-group { - container auth-option { - description "OPTION_AUTH (11) Authentication Option"; + description "OPTION_AUTH (11) Authentication Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container auth-option { + description "OPTION_AUTH (11) Authentication Option container."; leaf protocol { type uint8; description "The authentication protocol used in this Authentication option."; } leaf algorithm { type uint8; description "The algorithm used in the authentication protocol."; } @@ -2467,68 +2520,75 @@ leaf auth-information { type string; description "The authentication information, as specified by the protocol and algorithm used in this Authentication option."; } } } grouping server-unicast-option-group { - container server-unicast-option { - description "OPTION_UNICAST (12) Server Unicast Option"; + description "OPTION_UNICAST (12) Server Unicast Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container server-unicast-option { + description "OPTION_UNICAST (12) Server Unicast Option + container."; leaf server-address { type inet:ipv6-address; description "The 128-bit address to which the client should send messages delivered using unicast."; } } } grouping status-code-option-group { - container status-code-option { description "OPTION_STATUS_CODE (13) Status Code Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container status-code-option { + description "OPTION_STATUS_CODE (13) Status Code Option + container."; leaf status-code { type uint16; description "The numeric code for the status encoded in this option. See the Status Codes registry at for the current list of status codes."; } leaf status-message { type string; description "A UTF-8 encoded text string suitable for display to an end user. MUST NOT be null-terminated."; } } } grouping rapid-commit-option-group { - container rapid-commit-option { - presence "Enable sending of this option"; - description "OPTION_RAPID_COMMIT (14) Rapid Commit Option. - The presence node is used to enable the option."; + description "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container rapid-commit-option { + presence "Enable sending of this option"; + description "OPTION_RAPID_COMMIT (14) Rapid Commit Option + container."; } } grouping vendor-specific-information-option-group { - container vendor-specific-information-option { description "OPTION_VENDOR_OPTS (17) Vendor-specific - Information Option"; + Information Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container vendor-specific-information-option { + description "OPTION_VENDOR_OPTS (17) Vendor-specific + Information Option container."; list vendor-specific-information-option-instances { key enterprise-number; description "The vendor specific information option allows for multiple instances in a single message. Each list entry defines the contents of an instance of the option."; leaf enterprise-number { type uint32; description "The vendor's registered Enterprise Number, as maintained by IANA."; } @@ -2540,125 +2600,135 @@ type uint16; description "The code for the sub-option."; } leaf sub-option-data { type string; description "The data area for the sub-option."; } } } } - } grouping reconfigure-message-option-group { - container reconfigure-message-option { description "OPTION_RECONF_MSG (19) Reconfigure Message Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container reconfigure-message-option { + description "OPTION_RECONF_MSG (19) Reconfigure Message + Option."; leaf msg-type { type uint8; description "5 for Renew message, 6 for Rebind message, 11 for Information-request message."; } } } grouping reconfigure-accept-option-group { - container reconfigure-accept-option { - presence "Enable sending of this option"; description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. A client uses the Reconfigure Accept option to announce to the server whether the client is willing to accept Reconfigure messages, and a server uses this option to tell the client whether or not to accept Reconfigure messages. In the absence of this option, the default behavior is that the client is unwilling to accept Reconfigure messages. The presence node is used to enable the option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container reconfigure-accept-option { + presence "Enable sending of this option"; + description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept + Option container."; } } - grouping info-refresh-time-option-group { - container info-refresh-time-option { description "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh Time option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container info-refresh-time-option { + description "OPTION_INFORMATION_REFRESH_TIME (32) + Information Refresh Time option container."; leaf info-refresh-time { type dhcpv6-common:timer-seconds32; description "Time duration relative to the current time, expressed in units of seconds."; } } } grouping sol-max-rt-option-group { - container sol-max-rt-option { - description "OPTION_SOL_MAX_RT (82) sol max rt option"; + description "OPTION_SOL_MAX_RT (82) sol max rt option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container sol-max-rt-option { + description "OPTION_SOL_MAX_RT (82) sol max rt option container + ."; leaf sol-max-rt-value { type dhcpv6-common:timer-seconds32; description "sol max rt value"; } } } grouping inf-max-rt-option-group { - container inf-max-rt-option { - description "OPTION_INF_MAX_RT (83) inf max rt option"; + description "OPTION_INF_MAX_RT (83) inf max rt option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container inf-max-rt-option { + description "OPTION_INF_MAX_RT (83) inf max rt option container + ."; leaf inf-max-rt-value { type dhcpv6-common:timer-seconds32; description "inf max rt value"; } } } /* * Augmentations */ - augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/dhc - pv6-server:option-set" { - when "../../../dhcpv6-server:dhcpv6-node-type='dhcpv6-server:serv - er'"; + augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/" + + "dhcpv6-server:option-set" { + when "../../../dhcpv6-server:dhcpv6-node-type=" + + "'dhcpv6-server:server'"; + description "Augment the option definition groupings to the + relay module."; uses preference-option-group; uses auth-option-group; uses server-unicast-option-group; uses status-code-option-group; uses rapid-commit-option-group; uses vendor-specific-information-option-group; uses reconfigure-message-option-group; uses reconfigure-accept-option-group; uses info-refresh-time-option-group; uses sol-max-rt-option-group; uses inf-max-rt-option-group; } } 3.5. RFC8415 Relay Options YANG Module This module imports typedefs from [RFC6991]. - file ietf-dhcpv6-options-rfc8415-server.yang + file "ietf-dhcpv6-options-rfc8415-server.yang" - module ietf-dhcpv6-options-rfc8415 { + module ietf-dhcpv6-options-rfc8415-server { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-8415-ser - ver"; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-rfc8415- + server"; prefix "rfc8415-srv"; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; } import ietf-dhcpv6-common { prefix dhcpv6-common; @@ -2675,21 +2745,39 @@ organization "DHC WG"; contact "cuiyong@tsinghua.edu.cn wangh13@mails.tsinghua.edu.cn lh.sunlinh@gmail.com ian.farrer@telekom.de sladjana.zechlin@telekom.de hezihao9512@gmail.com"; description "This YANG module contains DHCPv6 options defined - in RFC8415 that can be used by DHCPv6 servers."; + in RFC8415 that can be used by DHCPv6 servers. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8513; see + the RFC itself for full legal notices."; + + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-11-19 { description "Separated into a client specific set of options."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } @@ -2727,38 +2814,39 @@ description "First version of the separated DHCPv6 options YANG model."; reference "I-D:draft-ietf-dhc-dhcpv6-yang"; } /* * Groupings */ grouping preference-option-group { - container preference-option { - description "OPTION_PREFERENCE (7) Preference Option"; + description "OPTION_PREFERENCE (7) Preference Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; - + container preference-option { + description "OPTION_PREFERENCE (7) Preference Option container." + ; leaf pref-value { type uint8; description "The preference value for the server in this message. A 1-octet unsigned integer."; } } } - grouping auth-option-group { - container auth-option { - description "OPTION_AUTH (11) Authentication Option"; + description "OPTION_AUTH (11) Authentication Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container auth-option { + description "OPTION_AUTH (11) Authentication Option container."; leaf protocol { type uint8; description "The authentication protocol used in this Authentication option."; } leaf algorithm { type uint8; description "The algorithm used in the authentication protocol."; } @@ -2774,68 +2862,74 @@ leaf auth-information { type string; description "The authentication information, as specified by the protocol and algorithm used in this Authentication option."; } } } grouping server-unicast-option-group { - container server-unicast-option { - description "OPTION_UNICAST (12) Server Unicast Option"; + description "OPTION_UNICAST (12) Server Unicast Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container server-unicast-option { + description "OPTION_UNICAST (12) Server Unicast Option + container."; leaf server-address { type inet:ipv6-address; description "The 128-bit address to which the client should send messages delivered using unicast."; } } } - grouping status-code-option-group { - container status-code-option { description "OPTION_STATUS_CODE (13) Status Code Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container status-code-option { + description "OPTION_STATUS_CODE (13) Status Code Option + container."; leaf status-code { type uint16; description "The numeric code for the status encoded in this option. See the Status Codes registry at for the current list of status codes."; } leaf status-message { type string; description "A UTF-8 encoded text string suitable for display to an end user. MUST NOT be null-terminated."; } } } grouping rapid-commit-option-group { - container rapid-commit-option { - presence "Enable sending of this option"; - description "OPTION_RAPID_COMMIT (14) Rapid Commit Option. - The presence node is used to enable the option."; + description "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container rapid-commit-option { + presence "Enable sending of this option"; + description "OPTION_RAPID_COMMIT (14) Rapid Commit Option + container."; } } grouping vendor-specific-information-option-group { - container vendor-specific-information-option { description "OPTION_VENDOR_OPTS (17) Vendor-specific - Information Option"; + Information Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container vendor-specific-information-option { + description "OPTION_VENDOR_OPTS (17) Vendor-specific + Information Option container."; list vendor-specific-information-option-instances { key enterprise-number; description "The vendor specific information option allows for multiple instances in a single message. Each list entry defines the contents of an instance of the option."; leaf enterprise-number { type uint32; description "The vendor's registered Enterprise Number, as maintained by IANA."; } @@ -2850,152 +2944,172 @@ leaf sub-option-data { type string; description "The data area for the sub-option."; } } } } } grouping reconfigure-message-option-group { - container reconfigure-message-option { description "OPTION_RECONF_MSG (19) Reconfigure Message Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container reconfigure-message-option { + description "OPTION_RECONF_MSG (19) Reconfigure Message + Option."; leaf msg-type { type uint8; description "5 for Renew message, 6 for Rebind message, 11 for Information-request message."; } } } grouping reconfigure-accept-option-group { - container reconfigure-accept-option { - presence "Enable sending of this option"; description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. A client uses the Reconfigure Accept option to announce to the server whether the client is willing to accept Reconfigure messages, and a server uses this option to tell the client whether or not to accept Reconfigure messages. In the absence of this option, the default behavior is that the client is unwilling to accept Reconfigure messages. The presence node is used to enable the option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + + container reconfigure-accept-option { + presence "Enable sending of this option"; + description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept + Option container."; } } grouping info-refresh-time-option-group { - container info-refresh-time-option { description "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh Time option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container info-refresh-time-option { + description "OPTION_INFORMATION_REFRESH_TIME (32) + Information Refresh Time option container."; leaf info-refresh-time { type dhcpv6-common:timer-seconds32; description "Time duration relative to the current time, expressed in units of seconds."; } } } grouping sol-max-rt-option-group { - container sol-max-rt-option { - description "OPTION_SOL_MAX_RT (82) sol max rt option"; + description "OPTION_SOL_MAX_RT (82) sol max rt option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container sol-max-rt-option { + description "OPTION_SOL_MAX_RT (82) sol max rt option container + ."; leaf sol-max-rt-value { type dhcpv6-common:timer-seconds32; description "sol max rt value"; } } } grouping inf-max-rt-option-group { - container inf-max-rt-option { - description "OPTION_INF_MAX_RT (83) inf max rt option"; + description "OPTION_INF_MAX_RT (83) inf max rt option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container inf-max-rt-option { + description "OPTION_INF_MAX_RT (83) inf max rt option container + ."; leaf inf-max-rt-value { type dhcpv6-common:timer-seconds32; description "inf max rt value"; } + } } /* * Augmentations */ - augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/dhc - pv6-server:option-set" { - when "../../../dhcpv6-server:dhcpv6-node-type='dhcpv6-server:serv - er'"; + augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/" + + "dhcpv6-server:option-set" { + when "../../../dhcpv6-server:dhcpv6-node-type=" + + "'dhcpv6-server:server'"; + description "Augment the option definition groupings to the + relay module."; uses preference-option-group; uses auth-option-group; uses server-unicast-option-group; uses status-code-option-group; uses rapid-commit-option-group; uses vendor-specific-information-option-group; uses reconfigure-message-option-group; uses reconfigure-accept-option-group; uses info-refresh-time-option-group; uses sol-max-rt-option-group; uses inf-max-rt-option-group; } } 3.6. RFC8415 Client Options YANG Module This module imports typedefs from [RFC6991]. - file ietf-dhcpv6-options-rfc8415-client.yang + file "ietf-dhcpv6-options-rfc8415-client.yang" - module ietf-dhcpv6-options-rfc8415 { + module ietf-dhcpv6-options-rfc8415-client { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-8415-cli - ent"; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-rfc8415- + client"; prefix "rfc8415-cli"; - import ietf-inet-types { - prefix inet; - reference - "RFC 6991: Common YANG Data Types"; - } - - import ietf-dhcpv6-common { - prefix dhcpv6-common; - reference - "To be updated on publication"; - } - import ietf-dhcpv6-client { prefix dhcpv6-client; reference "To be updated on publication"; } organization "DHC WG"; contact "cuiyong@tsinghua.edu.cn wangh13@mails.tsinghua.edu.cn lh.sunlinh@gmail.com ian.farrer@telekom.de sladjana.zechlin@telekom.de hezihao9512@gmail.com"; description "This YANG module contains DHCPv6 options defined - in RFC8415 that can be used by DHCPv6 clients."; + in RFC8415 that can be used by DHCPv6 clients. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8513; see + the RFC itself for full legal notices."; + + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-11-19 { description "Separated into a client specific set of options."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } @@ -3034,42 +3148,44 @@ description "First version of the separated DHCPv6 options YANG model."; reference "I-D:draft-ietf-dhc-dhcpv6-yang"; } /* * Groupings */ grouping option-request-option-group { - container option-request-option { description "OPTION_ORO (6) Option Request Option. A client MUST include an Option Request option in a Solicit, Request, Renew, Rebind, or Information-request message to inform - the server about options the client wants the server t - o send + the server about options the client wants the server to send to the client."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container option-request-option { + description "OPTION_ORO (6) Option Request Option container."; leaf-list oro-option { + type uint16; description "List of options that the client is requesting, identified by option code"; - type uint16; } } } grouping status-code-option-group { - container status-code-option { description "OPTION_STATUS_CODE (13) Status Code Option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container status-code-option { + description "OPTION_STATUS_CODE (13) Status Code Option + container."; leaf status-code { type uint16; description "The numeric code for the status encoded in this option. See the Status Codes registry at for the current list of status codes."; } leaf status-message { type string; description "A UTF-8 encoded text string suitable for @@ -3069,46 +3185,50 @@ in this option. See the Status Codes registry at for the current list of status codes."; } leaf status-message { type string; description "A UTF-8 encoded text string suitable for display to an end user. MUST NOT be null-terminated."; } } - } grouping rapid-commit-option-group { - container rapid-commit-option { - presence "Enable sending of this option"; description "OPTION_RAPID_COMMIT (14) Rapid Commit Option. The presence node is used to enable the option."; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container rapid-commit-option { + presence "Enable sending of this option"; + description "OPTION_RAPID_COMMIT (14) Rapid Commit Option + container."; } } grouping user-class-option-group { - container user-class-option { description "OPTION_USER_CLASS (15) User Class Option"; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container user-class-option { + description "OPTION_USER_CLASS (15) User Class Option + container."; list user-class-data { key user-class-datum-id; min-elements 1; description "The user classes of which the client is a member."; leaf user-class-datum-id { type uint8; description "User class datum ID"; + } leaf user-class-datum { type string; description "Opaque field representing a User Class of which the client is a member."; } } } } @@ -3106,24 +3226,26 @@ leaf user-class-datum { type string; description "Opaque field representing a User Class of which the client is a member."; } } } } grouping vendor-class-option-group { - container vendor-class-option { description "OPTION_VENDOR_CLASS (16) Vendor Class Option"; reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container vendor-class-option { + description "OPTION_VENDOR_CLASS (16) Vendor Class Option + container."; list vendor-class-option-instances { key enterprise-number; description "The vendor class option allows for multiple instances in a single message. Each list entry defines the contents of an instance of the option."; leaf enterprise-number { type uint32; description "The vendor's registered Enterprise Number as maintained by IANA."; } @@ -3139,25 +3261,28 @@ type string; description "Opaque field representing a vendor class of which the client is a member."; } } } } } grouping vendor-specific-information-option-group { - container vendor-specific-information-option { description "OPTION_VENDOR_OPTS (17) Vendor-specific Information Option"; + reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; + container vendor-specific-information-option { + description "OPTION_VENDOR_OPTS (17) Vendor-specific + Information Option container."; list vendor-specific-information-option-instances { key enterprise-number; description "The vendor specific information option allows for multiple instances in a single message. Each list entry defines the contents of an instance of the option."; leaf enterprise-number { type uint32; description "The vendor's registered Enterprise Number, as maintained by IANA."; } @@ -3166,67 +3291,71 @@ description "Vendor options, interpreted by vendor-specific client/server functions."; leaf sub-option-code { type uint16; description "The code for the sub-option."; } leaf sub-option-data { type string; description "The data area for the sub-option."; } - } } } } grouping reconfigure-accept-option-group { - container reconfigure-accept-option { - presence "Enable sending of this option"; description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. A client uses the Reconfigure Accept option to announce to the server whether the client is willing to accept Reconfigure messages, and a server uses this option to tell the client whether or not to accept Reconfigure messages. In the absence of this option, the default behavior is that the client is unwilling to accept Reconfigure messages. The presence node is used to enable the option."; - reference "RFC8415: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6)"; + reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 + (DHCPv6)"; + container reconfigure-accept-option { + presence "Enable sending of this option"; + description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept + Option container."; + } } /* * Augmentations */ - augment "/dhcpv6-client:dhcpv6-client/dhcpv6-client:client-if/dhcpv - 6-client:client-configured-options" { - when "../../../dhcpv6-client:dhcpv6-node-type='dhcpv6-client:clie - nt'"; + augment "/dhcpv6-client:dhcpv6-client/dhcpv6-client:client-if/" + + "dhcpv6-client:client-configured-options" { + when "../../../dhcpv6-client:dhcpv6-node-type=" + + "'dhcpv6-client:client'"; + description "Augment the option definition groupings to the + client module."; uses option-request-option-group; uses status-code-option-group; uses rapid-commit-option-group; uses user-class-option-group; uses vendor-class-option-group; uses vendor-specific-information-option-group; uses reconfigure-accept-option-group; } } 3.7. DHCPv6 Common YANG Module This module imports typedefs from [RFC6991]. - file ietf-dhcpv6-common.yang + file "ietf-dhcpv6-common.yang" module ietf-dhcpv6-common { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; prefix "dhcpv6-common"; import ietf-yang-types { prefix yang; reference "RFC 6991: Common YANG Data Types"; @@ -3234,21 +3363,39 @@ organization "DHC WG"; contact "yong@csnet1.cs.tsinghua.edu.cn lh.sunlinh@gmail.com ian.farrer@telekom.de sladjana.zechlin@telekom.de hezihao9512@gmail.com"; description "This YANG module defines common components - used for the configuration and management of DHCPv6."; + used for the configuration and management of DHCPv6. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8513; see + the RFC itself for full legal notices."; + + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-05-26 { description "Version update for draft -11 publication and to align revisions across the different modules."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; @@ -3374,23 +3521,23 @@ case duid-unstructured { description "DUID which does not follow any of the other structures, expressed as bytes."; leaf data { type binary; description "The bits to be used as the identifier."; } } } leaf active-duid { + type binary; config "false"; description "The DUID which is currently in use."; - type binary; } } } 4. Security Considerations The YANG modules defined in this document are designed to be accessed via network management protocols such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport @@ -3638,43 +3785,61 @@ * Fields which can have multiple entries or instances are defined using list or leaf-list nodes. Below the groupings for option definitions, augment statements are used to add the option definitions for use in the relevant DHCP element's module (server, relay and/or client). If an option is relevant to more than one element type, then an augment statement for each element is used. - file example-dhcpv6-options-rfc3319-server.yang + file "ietf-example-dhcpv6-options-rfc3319-server.yang" - module example-dhcpv6-options-rfc3319 { + module ietf-example-dhcpv6-options-rfc3319-server { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-options-rfc33 - 19"; - prefix "rfc3319"; + namespace "urn:ietf:params:xml:ns:yang:ietf-example-dhcpv6-options- + rfc3319-server"; + prefix "rfc3319-srv"; import ietf-inet-types { prefix inet; } import ietf-dhcpv6-server { prefix dhcpv6-server; } organization "DHC WG"; contact "ian.farrer@telekom.de godfryd@isc.org"; description "This YANG module contains DHCPv6 options defined - in RFC3319 that can be used by DHCPv6 servers."; + in RFC3319 that can be used by DHCPv6 servers. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8513; see + the RFC itself for full legal notices."; + + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-05-26 { description "Version update for draft -11 publication and to align revisions across the different modules."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; @@ -3683,72 +3848,81 @@ revision 2019-10-18 { description "Initial version."; reference "I-D: draft-ietf-dhc-dhcpv6-yang"; } /* * Groupings */ grouping sip-server-domain-name-list-option-group { - container sip-server-domain-name-list-option { description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List"; - reference "RFC3319: Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP) Servers"; + container sip-server-domain-name-list-option { + description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name Li + st + container."; list sip-server { key sip-serv-id; description "sip server info"; leaf sip-serv-id { type uint8; description "sip server id"; } leaf sip-serv-domain-name { type inet:domain-name; description "sip server domain name"; } } } } grouping sip-server-address-list-option-group { - container sip-server-address-list-option { description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List"; reference "RFC3319: Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP) Servers"; + container sip-server-address-list-option { + description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address + List container."; + list sip-server { key sip-serv-id; description "sip server info"; leaf sip-serv-id { type uint8; description "sip server id"; } leaf sip-serv-addr { type inet:ipv6-address; description "sip server addr"; } } } } /* * Augmentations */ - augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/dhc - pv6-server:option-set" { - when "../../../dhcpv6-server:dhcpv6-node-type='dhcpv6-server:serv - er'"; + augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/" + + + "dhcpv6-server:option-set" { + when "../../../dhcpv6-server:dhcpv6-node-type=" + + "'dhcpv6-server:server'"; + description "Augment the option definition groupings to the serve + r + module."; uses sip-server-domain-name-list-option-group; uses sip-server-address-list-option-group; } } The correct location to augment the new option definition(s) will vary according to the specific rules defined for the use of that specific option. E.g. for options which will be augmented into the ietf-dhcpv6-server module, in many cases, these will be augmented to: @@ -3779,26 +3953,26 @@ The example module defines additional server attributes such as name and description. Storage for leases is configured using a lease- storage container. It allows storing leases in one of three options: memory (memfile), MySQL and PosgreSQL. For each case, the necessary configuration parameters are provided. At the end there is an augment statement which adds the vendor specific configuration defined in "dhcpv6-server-config:config" under '/dhcpv6-server:config/dhcpv6-server:vendor-config' mount point. - file example-dhcpv6-server-config.yang + file "ietf-example-dhcpv6-server-config.yang" - module example-dhcpv6-server-config { + module ietf-example-dhcpv6-server-config { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-server-config - "; + namespace "urn:ietf:params:xml:ns:yang:ietf-example-dhcpv6-server-c + onfig"; prefix "dhcpv6-server-config"; import ietf-inet-types { prefix inet; } import ietf-interfaces { prefix if; } @@ -3811,21 +3985,39 @@ "cuiyong@tsinghua.edu.cn lh.sunlinh@gmail.com ian.farrer@telekom.de sladjana.zechlin@telekom.de hezihao9512@gmail.com"; description "This YANG module defines components for the configuration and management of vendor/implementation specific DHCPv6 server functionality. As this functionality varies greatly between different implementations, the module - provided as an example only."; + provided as an example only. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8513; see + the RFC itself for full legal notices."; + + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-05-26 { description "Version update for draft -11 publication and to align revisions across the different modules."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; @@ -3861,21 +4052,21 @@ description "UDP port that the server will listen on."; } choice listening-interfaces { default all-interfaces; description "Configures which interface or addresses the server will listen for incoming messages on."; case all-interfaces { container all-interfaces { presence true; description "Configures the server to listen for - incoming messages on all IPv6 addresses (unicats and + incoming messages on all IPv6 addresses (unicast and multicast) on all of its network interfaces."; } } case interface-list { leaf-list interfaces { type if:interface-ref; description "List of interfaces that the server will listen for incoming messages on. Messages addressed to any valid IPv6 address (unicast and multicast) will be received."; @@ -3915,20 +4106,21 @@ at which the server will perform a lease file cleanup (LFC)."; } } case mysql { leaf mysql-name { type string; description "Name of the database."; } choice mysql-host { + description "Define host or address for MySQL server."; case mysql-server-hostname { leaf mysql-hostname { type inet:domain-name; default "localhost"; description "If the database is located on a different system to the DHCPv6 server, the domain name can be specified."; } } case mysql-server-address { @@ -3965,28 +4157,29 @@ } leaf mysql-connect-timeout { type uint64; description "Defines the timeout interval for connecting to the database. A longer interval can be specified if the database is remote."; } } case postgresql { choice postgresql-host { + description "Define host or address for postgresql + server."; case postgresql-server-hostname { leaf postgresql-hostname { type inet:domain-name; default "localhost"; description "If the database is located on a different system to the DHCPv6 server, the domain name can be specified."; - } } case postgresql-server-address { leaf postgresql-address { type inet:ip-address; default "::"; description "Configure the location of the database using an IP (v6 or v6) literal address"; } } @@ -4024,30 +4217,32 @@ } } } /* * Augmentations */ augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:vendor-config" { + description "Augment the server specific YANG to the + ietf-dhcpv6-server module."; uses dhcpv6-server-config:config; } } Appendix C. Example definition of class selector configuration - The module "example-dhcpv6-class-selector" provides an example of how - vendor specific class selection configuration can be modelled and - integrated with the "ietf-dhcpv6-server" module defined in this + The module "ietf-example-dhcpv6-class-selector" provides an example + of how vendor specific class selection configuration can be modelled + and integrated with the "ietf-dhcpv6-server" module defined in this document. The example module defines "client-class-names" with associated matching rules. A client can be classified based on "client-id", "interface-id" (ingress interface of the client's messages), packets source or destination address, relay link address, relay link interface-id and more. Actually, there are endless methods for classifying clients. So this standard does not try to provide full specification for class selection, it only shows an example how it can be defined. @@ -4060,26 +4255,26 @@ Server configuration. * client-class leafrefs augmented to "network-range", "address-pool" and "pd-pool", pointing to the "client-class-name" that is required. The mechanism is as follows: class is associated to client based on rules and then client is allowed to get address(es)/prefix(es) from given network-range/pool if the class name matches. - file example-dhcpv6-class-selector.yang + file "ietf-example-dhcpv6-class-selector.yang" - module example-dhcpv6-class-selector { + module ietf-example-dhcpv6-class-selector { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-class-selecto - r"; + namespace "urn:ietf:params:xml:ns:yang:ietf-example-dhcpv6-class-se + lector"; prefix "dhcpv6-class-selector"; import ietf-inet-types { prefix inet; } import ietf-interfaces { prefix if; } @@ -4097,21 +4292,39 @@ "yong@csnet1.cs.tsinghua.edu.cn lh.sunlinh@gmail.com ian.farrer@telekom.de sladjana.zechlin@telekom.de hezihao9512@gmail.com"; description "This YANG module defines components for the definition and configuration of the client class selector function for a DHCPv6 server. As this functionality varies greatly between different implementations, the module provided as an example - only."; + only. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8513; see + the RFC itself for full legal notices."; + + revision 2020-12-10 { + description "Version update for draft -13 publication."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang-13"; + } revision 2020-12-01 { description "Version update for draft -12 publication."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; } revision 2020-05-26 { description "Version update for draft -11 publication and to align revisions across the different modules."; reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; @@ -4128,214 +4341,230 @@ grouping client-class-id { description "Definitions of client message classification for authorization and assignment purposes."; leaf client-class-name { type string; description "Unique Identifier for client class identification list entries."; } choice id-type { + mandatory true; description "Definitions for different client identifier types."; - mandatory true; case client-id-id { - description "Client class selection based on a string literal - client identifier."; leaf client-id { - description "String literal client identifier."; - mandatory true; type string; + mandatory true; + description "String literal client identifier."; } + description "Client class selection based on a string literal + client identifier."; } case received-interface-id { description "Client class selection based on the incoming interface of the DHCPv6 message."; leaf received-interface { + type if:interface-ref; description "Reference to the interface entry for the incoming DHCPv6 message."; - type if:interface-ref; } } case packet-source-address-id { description "Client class selection based on the source address of the DHCPv6 message."; leaf packet-source-address { - description "Source address of the DHCPv6 message."; - mandatory true; type inet:ipv6-address; + mandatory true; + description "Source address of the DHCPv6 message."; } } case packet-destination-address-id { description "Client class selection based on the destination address of the DHCPv6 message."; leaf packet-destination-address { - description "Destination address of the DHCPv6 message."; - mandatory true; type inet:ipv6-address; + mandatory true; + description "Destination address of the DHCPv6 message."; } } case relay-link-address-id { description "Client class selection based on the prefix of the link-address field in the relay agent message header."; leaf relay-link-address { + type inet:ipv6-prefix; + mandatory true; description "Prefix of the link-address field in the relay agent message header."; - mandatory true; - type inet:ipv6-prefix; } } case relay-peer-address-id { description "Client class selection based on the value of the peer-address field in the relay agent message header."; leaf relay-peer-address { + type inet:ipv6-prefix; + mandatory true; description "Prefix of the peer-address field in the relay agent message header."; - mandatory true; - type inet:ipv6-prefix; } } case relay-interface-id { description "Client class selection based on the incoming interface-id option."; leaf relay-interface { + type string; description "Reference to the interface entry for the incoming DHCPv6 message."; - type string; } } case user-class-option-id { description "Client class selection based on the value of the OPTION_USER_CLASS(15) and its user-class-data field."; leaf user-class-data { - description "Value of the enterprise-number field."; - mandatory true; type string; + mandatory true; + description "Value of the enterprise-number field."; } } case vendor-class-present-id { description "Client class selection based on the presence of OPTION_VENDOR_CLASS(16) in the received message."; leaf vendor-class-present { + type boolean; + mandatory true; description "Presence of OPTION_VENDOR_CLASS(16) in the received message."; - mandatory true; - type boolean; } - } case vendor-class-option-enterprise-number-id { description "Client class selection based on the value of the enterprise-number field in OPTION_VENDOR_CLASS(16)."; leaf vendor-class-option-enterprise-number { - description "Value of the enterprise-number field."; - mandatory true; type uint32; + mandatory true; + description "Value of the enterprise-number field."; } } case vendor-class-option-data-id { description "Client class selection based on the value of a data field within a vendor-class-data entry for a matching enterprise-number field in OPTION_VENDOR_CLASS(16)."; container vendor-class-option-data { + description "Vendor class option data container."; leaf vendor-class-option-enterprise-number { + type uint32; + mandatory true; description "Value of the enterprise-number field for matching the data contents."; - mandatory true; - type uint32; } leaf vendor-class-data { - description "Vendor class data to match."; - mandatory true; type string; + mandatory true; + description "Vendor class data to match."; } } } case remote-id { description "Client class selection based on the value of Remote-ID ."; container remote-id { + description "Remote-id client class selector container."; leaf vendor-class-option-enterprise-number { + type uint32; + mandatory true; description "Value of the enterprise-number field for matching the data contents."; - mandatory true; - type uint32; } leaf remote-id { - description "Remote-ID data to match."; - mandatory true; type string; + mandatory true; + description "Remote-ID data to match."; } } } case client-duid-id { description "Client class selection based on the value of the received client DUID."; uses dhcpv6-common:duid; } } } /* * Augmentations */ augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-selector" { + description "Augment class selector functions to the DHCPv6 serve + r + module."; container client-classes { + description "Client classes to augment."; list class { + key client-class-name; description "List of the client class identifiers applicable to clients served by this address pool"; - key client-class-name; uses dhcpv6-class-selector:client-class-id; } } } - augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ - dhcpv6-server:network-range" { + augment "/dhcpv6-server:dhcpv6-server/" + + "dhcpv6-server:network-ranges/dhcpv6-server:network-range" { + description "Augment class selector functions to the DHCPv6 serve + r + network-ranges."; leaf-list client-class { type leafref { - path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-select - or/client-classes/class/client-class-name"; + path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + + "class-selector/client-classes/class/client-class-name"; } + description "Leafrefs to client classes."; } } - augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ - dhcpv6-server:network-range/dhcpv6-server:address-pools/dhcpv6-server - :address-pool" { + augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + + "network-ranges/dhcpv6-server:network-range/dhcpv6-server:" + + "address-pools/dhcpv6-server:address-pool" { + description "Augment class selector functions to the DHCPv6 serve + r + address-pools."; leaf-list client-class { type leafref { - path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-select - or/client-classes/class/client-class-name"; + path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + + "class-selector/client-classes/class/client-class-name"; } + description "Leafrefs to client classes."; } } - augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ - dhcpv6-server:network-range/dhcpv6-server:prefix-pools/dhcpv6-server: - prefix-pool" { + augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + + "network-ranges/dhcpv6-server:network-range/dhcpv6-server:" + + "prefix-pools/dhcpv6-server:prefix-pool" { + description "Augment class selector functions to the DHCPv6 serve + r + prefix-pools."; leaf-list client-class { type leafref { - path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-select - or/client-classes/class/client-class-name"; + path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + + "class-selector/client-classes/class/client-class-name"; } + description "Leafrefs to client classes."; } } } Authors' Addresses - Yong Cui Tsinghua University Beijing 100084 P.R. China Phone: +86-10-6260-3059 Email: cuiyong@tsinghua.edu.cn Linhui Sun