This YANG module defines components necessary for the configuration and management of DHCPv6 clients. The key words 'MUST', 'MU...
Version: 2022-06-20
module ietf-dhcpv6-client { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; prefix dhc6-clnt; 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"; } import ietf-dhcpv6-common { prefix dhc6; reference "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; } import ietf-interfaces { prefix if; reference "RFC 8343: A YANG Data Model for Interface Management"; } organization "IETF Dynamic Host Configuration (DHC) Working Group"; contact "WG Web: <https://datatracker.ietf.org/wg/dhc/> WG List: <mailto:dhcwg@ietf.org> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Linhui Sun <lh.sunlinh@gmail.com> Editor: Ian Farrer <ian.farrer@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Zihao He <hezihao9512@gmail.com> Author: Michal Nowikowski <godfryd@isc.org>"; description "This YANG module defines components necessary for the configuration and management of DHCPv6 clients. The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document are to be interpreted as described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here. Copyright (c) 2022 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 Revised BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 9243 (https://www.rfc-editor.org/info/rfc9243); see the RFC itself for full legal notices."; revision "2022-06-20" { description "Initial revision."; reference "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; } feature non-temp-addr { description "Denotes that the client supports DHCPv6 non-temporary address allocations."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.2"; } feature temp-addr { description "Denotes that the client supports DHCPv6 temporary address allocations."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.5"; } feature prefix-delegation { description "Denotes that the client implements DHCPv6 prefix delegation."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.3"; } feature anon-profile { description "Denotes that the client supports DHCP anonymity profiles."; reference "RFC 7844: Anonymity Profiles for DHCP Clients"; } grouping message-statistics { description "Counters for DHCPv6 messages."; leaf discontinuity-time { type yang:date-and-time; description "The time on the most recent occasion at which any one or more of DHCPv6 client's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } leaf solicit-count { type yang:counter32; config false; description "Number of Solicit (1) messages sent."; } leaf advertise-count { type yang:counter32; config false; description "Number of Advertise (2) messages received."; } leaf request-count { type yang:counter32; config false; description "Number of Request (3) messages sent."; } leaf confirm-count { type yang:counter32; config false; description "Number of Confirm (4) messages sent."; } leaf renew-count { type yang:counter32; config false; description "Number of Renew (5) messages sent."; } leaf rebind-count { type yang:counter32; config false; description "Number of Rebind (6) messages sent."; } leaf reply-count { type yang:counter32; config false; description "Number of Reply (7) messages received."; } leaf release-count { type yang:counter32; config false; description "Number of Release (8) messages sent."; } leaf decline-count { type yang:counter32; config false; description "Number of Decline (9) messages sent."; } leaf reconfigure-count { type yang:counter32; config false; description "Number of Reconfigure (10) messages received."; } leaf information-request-count { type yang:counter32; config false; description "Number of Information-request (11) messages sent."; } leaf discarded-message-count { type yang:counter32; config false; description "Number of messages that have been discarded for any reason."; } } // grouping message-statistics grouping lease-state { description "Information about the active IA_NA lease."; leaf preferred-lifetime { type dhc6:timer-seconds32; description "The preferred lifetime for the leased address expressed in seconds."; } leaf valid-lifetime { type dhc6:timer-seconds32; description "The valid lifetime for the leased address expressed in seconds."; } leaf allocation-time { type yang:date-and-time; description "Time and date that the address was first leased."; } leaf last-renew-rebind { type yang:date-and-time; description "Time of the last successful renew or rebind of the leased address."; } leaf server-duid { type dhc6:duid; description "DUID of the leasing server."; } uses dhc6:status; } // grouping lease-state grouping option-request-option-group { 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 to send to the client."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Sections 21.23, 21.24, 21.25, & 21.7"; container option-request-option { description "OPTION_ORO (6) Option Request Option."; leaf-list oro-option { type uint16; description "List of options that the client is requesting, identified by option code. This list MUST include the code for option SOL_MAX_RT (82) when included in a Solicit message. If this option is being sent in an Information-request message, then the code for option OPTION_INFORMATION_REFRESH_TIME (32) and INF_MAX_RT (83) MUST be included."; } } // container option-request-option } // grouping option-request-option-group grouping user-class-option-group { description "OPTION_USER_CLASS (15) User Class Option"; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 21.15"; container user-class-option { presence "Configures the option"; description "OPTION_USER_CLASS (15) User Class Option."; list user-class-data-instance { key "user-class-data-id"; min-elements 1; description "The user classes of which the client is a member."; leaf user-class-data-id { type uint8; description "User class data ID."; } leaf user-class-data { type binary; description "Opaque field representing a User Class of which the client is a member."; } } // list user-class-data-instance } // container user-class-option } // grouping user-class-option-group grouping vendor-class-option-group { description "OPTION_VENDOR_CLASS (16) Vendor Class Option."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 21.16"; container vendor-class-option { description "OPTION_VENDOR_CLASS (16) Vendor Class Option."; 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."; } list vendor-class-data-element { key "vendor-class-data-id"; description "The vendor classes of which the client is a member."; leaf vendor-class-data-id { type uint8; description "Vendor class data ID."; } leaf vendor-class-data { type binary; description "Opaque field representing a vendor class of which the client is a member."; } } // list vendor-class-data-element } // list vendor-class-option-instances } // container vendor-class-option } // grouping vendor-class-option-group container dhcpv6-client { description "DHCPv6 client configuration and state."; leaf enabled { type boolean; default "true"; description "Globally enables the DHCP client function."; } leaf client-duid { if-feature (non-temp-addr or prefix-delegation or temp-addr) and not anon-profile; type dhc6:duid; description "A single client DUID that will be used by all of the client's DHCPv6-enabled interfaces."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 11"; } list client-if { key "if-name"; description "The list of interfaces for which the client will be requesting DHCPv6 configuration."; leaf if-name { type if:interface-ref; mandatory true; description "Reference to the interface entry that the requested configuration is relevant to."; } leaf enabled { type boolean; default "true"; description "Enables the DHCP client function for this interface."; } leaf interface-duid { if-feature (non-temp-addr or prefix-delegation or temp-addr) and anon-profile; type dhc6:duid; description "Per-interface client DUIDs for use with DHCP anonymity profiles."; reference "RFC 7844: Anonymity Profiles for DHCP Clients, Section 3"; } container client-configured-options { description "Definitions for DHCPv6 options that can be sent by the client. Additional option definitions can be augmented to this location from other YANG modules as required."; uses option-request-option-group; uses dhc6:rapid-commit-option-group; uses user-class-option-group; uses vendor-class-option-group; uses dhc6:vendor-specific-information-option-group; uses dhc6:reconfigure-accept-option-group; } // container client-configured-options list ia-na { if-feature non-temp-addr; key "ia-id"; description "Configuration relevant for an Identity Association for Non-temporary Addresses (IA_NA)."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 13.1"; leaf ia-id { type uint32; description "A unique identifier for this IA_NA."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 12"; } container ia-na-options { description "An augmentation point for additional options that the client may send in the IA_NA-options field of OPTION_IA_NA."; } // container ia-na-options container lease-state { config false; description "Information about the active IA_NA lease."; leaf ia-na-address { type inet:ipv6-address; description "Address that is currently leased."; } leaf lease-t1 { type dhc6: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."; } leaf lease-t2 { type dhc6: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."; } uses lease-state; } // container lease-state } // list ia-na list ia-ta { if-feature temp-addr; key "ia-id"; description "Configuration relevant for an Identity Association for Temporary Addresses (IA_TA)."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 13.2"; leaf ia-id { type uint32; description "The unique identifier for this IA_TA."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 12"; } container ia-ta-options { description "An augmentation point for additional options that the client may send in the IA_TA-options field of OPTION_IA_TA."; } // container ia-ta-options container lease-state { config false; description "Information about an active IA_TA lease."; leaf ia-ta-address { type inet:ipv6-address; description "Address that is currently leased."; } uses lease-state; } // container lease-state } // list ia-ta list ia-pd { if-feature prefix-delegation; key "ia-id"; description "Configuration relevant for an Identity Association for Prefix Delegation (IA_PD)."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 13.3"; leaf ia-id { type uint32; description "The unique identifier for this IA_PD."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 12"; } leaf prefix-length-hint { type uint8 { range "1..128"; } description "Prefix-length hint value included in the messages sent to the server to indicate a preference for the size of the prefix to be delegated."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 18.2.1"; } container ia-pd-options { description "An augmentation point for additional options that the client will send in the IA_PD-options field of OPTION_IA_TA."; } // container ia-pd-options container lease-state { config false; description "Information about an active IA_PD-delegated prefix."; leaf ia-pd-prefix { type inet:ipv6-prefix; description "Delegated prefix that is currently leased."; } leaf lease-t1 { type dhc6: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."; } leaf lease-t2 { type dhc6: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."; } uses lease-state; } // container lease-state } // list ia-pd container statistics { description "DHCPv6 message counters for the client."; uses message-statistics; } // container statistics } // list client-if } // container dhcpv6-client notification invalid-ia-address-detected { if-feature non-temp-addr or temp-addr; description "Notification sent when an address received in an identity association option is determined invalid. Possible conditions include a duplicate or otherwise illegal address."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 18.2.10.1"; leaf ia-id { type uint32; mandatory true; description "IAID."; } leaf ia-na-t1-timer { type uint32; description "The value of the T1 time field for non-temporary address allocations (OPTION_IA_NA)."; } leaf ia-na-t2-timer { type uint32; description "The value of the preferred-lifetime field for non-temporary address allocations (OPTION_IA_NA)."; } leaf invalid-address { type inet:ipv6-address; description "The IP address that has been detected to be invalid."; } leaf preferred-lifetime { type uint32; description "The value of the preferred-lifetime field in OPTION_IAADDR."; } leaf valid-lifetime { type uint32; description "The value of the valid-lifetime field in OPTION_IAADDR."; } leaf ia-options { type binary; description "A copy of the contents of the IAaddr-options field."; } leaf description { type string; description "Description of the invalid Identity Association (IA) detection error."; } } // notification invalid-ia-address-detected notification transmission-failed { description "Notification sent when the transmission or retransmission of a message fails."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 7.6"; leaf failure-type { type enumeration { enum "solicit-timeout" { value 0; description "Max Solicit timeout value (SOL_MAX_RT) exceeded."; } enum "request-timeout" { value 1; description "Max Request timeout value (REQ_MAX_RT) exceeded."; } enum "request-retries-exceeded" { value 2; description "Max Request retry attempts (REC_MAX_RC) exceeded."; } enum "confirm-duration-exceeded" { value 3; description "Max Confirm duration (CNF_MAX_RD) exceeded."; } enum "renew-timeout" { value 4; description "Max Renew timeout value (REN_MAX_RT) exceeded."; } enum "rebind-timeout" { value 5; description "Max Rebind timeout value (REB_MAX_RT) exceeded."; } enum "info-request-timeout" { value 6; description "Max Information-request timeout value (INF_MAX_RT) exceeded."; } enum "release-retries-exceeded" { value 7; description "Max Release retry attempts (REL_MAX_RC) exceeded."; } enum "decline-retries-exceeded" { value 8; description "Max Decline retry attempts (DEC_MAX_RT) exceeded."; } } mandatory true; description "Description of the failure."; } leaf description { type string; description "Information related to the failure, such as number of retries and timer values."; } } // notification transmission-failed notification unsuccessful-status-code { description "Notification sent when the client receives a message that includes an unsuccessful Status Code option."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 21.13"; leaf server-duid { type dhc6:duid; mandatory true; description "DUID of the server sending the unsuccessful error code."; } uses dhc6:status; } // notification unsuccessful-status-code notification server-duid-changed { if-feature non-temp-addr or prefix-delegation or temp-addr; description "Notification sent when the client receives a lease from a server with different DUID to the one currently stored by the client, e.g., in response to a Rebind message."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 18.2.5"; leaf new-server-duid { type dhc6:duid; mandatory true; description "DUID of the new server."; } leaf previous-server-duid { type dhc6:duid; mandatory true; description "DUID of the previous server."; } leaf lease-ia-na { if-feature non-temp-addr; type leafref { path "/dhcpv6-client/client-if/ia-na/ia-id"; } description "Reference to the IA_NA lease."; } leaf lease-ia-ta { if-feature temp-addr; type leafref { path "/dhcpv6-client/client-if/ia-ta/ia-id"; } description "Reference to the IA_TA lease."; } leaf lease-ia-pd { if-feature prefix-delegation; type leafref { path "/dhcpv6-client/client-if/ia-pd/ia-id"; } description "Reference to the IA_PD lease."; } } // notification server-duid-changed } // module ietf-dhcpv6-client
© 2023 YumaWorks, Inc. All rights reserved.