module ietf-dhcpv6-relay {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay";
prefix dhc6-rly;
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";
}
import ietf-netconf-acm {
prefix nacm;
reference
"RFC 8341: Network Configuration Access Control Model";
}
organization
"IETF Dynamic Host Configuration (DHC) Working Group";
contact
"WG Web:
WG List:
Author: Yong Cui
Author: Linhui Sun
Editor: Ian Farrer
Author: Sladjana Zeichlin
Author: Zihao He
Author: Michal Nowikowski ";
description
"This YANG module defines components necessary for the
configuration and management of DHCPv6 relays.
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";
}
/*
* Features
*/
feature prefix-delegation {
description
"Enable if the relay functions as a delegating router for
DHCPv6 prefix delegation.";
reference
"RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.3";
}
/*
* Groupings
*/
grouping pd-lease-state {
description
"State data for the relay.";
list pd-leases {
key "ia-pd-prefix";
config false;
description
"Information about an active IA_PD prefix delegation.";
leaf ia-pd-prefix {
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.";
}
leaf client-peer-address {
type inet:ipv6-address;
description
"Peer-address of the leasing client.";
}
leaf client-duid {
type dhc6:duid;
description
"DUID of the leasing client.";
}
leaf server-duid {
type dhc6:duid;
description
"DUID of the delegating server.";
}
}
}
grouping message-statistics {
description
"Contains counters for the different DHCPv6 message types.";
leaf discontinuity-time {
type yang:date-and-time;
description
"The time on the most recent occasion at which any one or
more of DHCPv6 relay'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-received-count {
type yang:counter32;
config false;
description
"Number of Solicit (1) messages received.";
}
leaf advertise-sent-count {
type yang:counter32;
config false;
description
"Number of Advertise (2) messages sent.";
}
leaf request-received-count {
type yang:counter32;
config false;
description
"Number of Request (3) messages received.";
}
leaf confirm-received-count {
type yang:counter32;
config false;
description
"Number of Confirm (4) messages received.";
}
leaf renew-received-count {
type yang:counter32;
config false;
description
"Number of Renew (5) messages received.";
}
leaf rebind-received-count {
type yang:counter32;
config false;
description
"Number of Rebind (6) messages received.";
}
leaf reply-sent-count {
type yang:counter32;
config false;
description
"Number of Reply (7) messages sent.";
}
leaf release-received-count {
type yang:counter32;
config false;
description
"Number of Release (8) messages received.";
}
leaf decline-received-count {
type yang:counter32;
config false;
description
"Number of Decline (9) messages received.";
}
leaf reconfigure-sent-count {
type yang:counter32;
config false;
description
"Number of Reconfigure (10) messages sent.";
}
leaf information-request-received-count {
type yang:counter32;
config false;
description
"Number of Information-request (11) messages
received.";
}
leaf unknown-message-received-count {
type yang:counter32;
config false;
description
"Number of messages of unknown type that have
been received.";
}
leaf unknown-message-sent-count {
type yang:counter32;
config false;
description
"Number of messages of unknown type that have
been sent.";
}
leaf discarded-message-count {
type yang:counter32;
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 {
type yang:counter32;
config false;
description
"Number of Relay-forward (12) messages sent.";
}
leaf relay-forward-received-count {
type yang:counter32;
config false;
description
"Number of Relay-forward (12) messages received.";
}
leaf relay-reply-received-count {
type yang:counter32;
config false;
description
"Number of Relay-reply (13) messages received.";
}
leaf relay-forward-unknown-sent-count {
type yang:counter32;
config false;
description
"Number of Relay-forward (12) messages containing
a message of unknown type sent.";
}
leaf relay-forward-unknown-received-count {
type yang:counter32;
config false;
description
"Number of Relay-forward (12) messages containing
a message of unknown type received.";
}
leaf discarded-message-count {
type yang:counter32;
config false;
description
"Number of messages that have been discarded
for any reason.";
}
}
grouping interface-id-option-group {
description
"OPTION_INTERFACE_ID (18) Interface-Id Option.";
reference
"RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.18";
container interface-id-option {
description
"OPTION_INTERFACE_ID (18) Interface-Id Option.";
leaf interface-id {
type binary;
description
"An opaque value of arbitrary length generated by the
relay agent to identify one of the relay agent's
interfaces.";
}
}
}
/*
* Data Nodes
*/
container dhcpv6-relay {
description
"This container contains the configuration data nodes
for the relay.";
reference
"RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 19";
leaf enabled {
type boolean;
description
"Globally enables the DHCP relay function.";
}
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 enabled {
type boolean;
description
"Enables the DHCP relay function for this interface.";
}
leaf-list destination-address {
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 {
type inet:ipv6-address;
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 dhc6:auth-option-group;
uses interface-id-option-group;
}
container statistics {
description
"DHCPv6 message counters for the relay's interface.";
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.";
uses pd-lease-state;
}
}
container statistics {
description
"Global DHCPv6 message counters for the relay.";
uses global-statistics;
}
}
/*
* RPCs
*/
rpc clear-prefix-entry {
nacm:default-deny-all;
if-feature "prefix-delegation";
description
"Clears an entry for an active delegated prefix
from the relay.";
reference
"RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4";
input {
leaf lease-prefix {
type leafref {
path "/dhcpv6-relay/relay-if/prefix-delegation"
+ "/pd-leases/ia-pd-prefix";
}
mandatory true;
description
"IPv6 prefix of an active lease entry that will
be deleted from the relay.";
}
}
output {
leaf return-message {
type string;
description
"Response message from the server. If available, a
language identifier should be included in the message.";
reference
"BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2";
}
}
}
rpc clear-client-prefixes {
nacm:default-deny-all;
if-feature "prefix-delegation";
description
"Clears all active prefix entries for a single client.";
reference
"RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4";
input {
leaf client-duid {
type dhc6:duid;
mandatory true;
description
"DUID of the client.";
}
}
output {
leaf return-message {
type string;
description
"Response message from the server. If available, a
language identifier should be included in the message.";
reference
"BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2";
}
}
}
rpc clear-interface-prefixes {
nacm:default-deny-all;
if-feature "prefix-delegation";
description
"Clears all delegated prefix bindings from an
interface on the relay.";
reference
"RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4";
input {
leaf interface {
type leafref {
path "/dhcpv6-relay/relay-if/if-name";
}
mandatory true;
description
"Reference to the relay interface that will have all
active prefix delegation bindings deleted.";
}
}
output {
leaf return-message {
type string;
description
"Response message from the server. If available, a
language identifier should be included in the message.";
reference
"BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2";
}
}
}
/*
* Notifications
*/
notification relay-event {
description
"DHCPv6 relay event notifications.";
container topology-change {
description
"Raised if the entry for an interface with DHCPv6-related
configuration or state is removed from if:interface-refs.";
leaf relay-if-name {
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.";
}
}
}
}