module openconfig-relay-agent { yang-version "1"; // namespace namespace "http://openconfig.net/yang/relay-agent"; prefix "oc-relay"; // import some basic types import ietf-inet-types { prefix inet; } import ietf-yang-types { prefix yang; } import openconfig-interfaces { prefix oc-if; } import openconfig-extensions { prefix oc-ext; } // meta organization "OpenConfig working group"; contact "OpenConfig working group www.openconfig.net"; description "This module describes a model for configuration and operational state related to relay agents typically used for DHCP and BOOTP packets. The supports both DHCP and DHCPv6 and device-wide and per-interface settings."; oc-ext:openconfig-version "0.1.0"; revision "2016-05-16" { description "Initial public release"; reference "0.1.0"; } // grouping statements grouping agent-information-ipv4-common-config { description "Common configuration data for DHCP relay option"; leaf enable { type boolean; default false; description "Enable sending the DHCP option for Relay Agent information -- option 82."; reference "RFC 3046 - DHCP Relay Agent Information Option"; } } grouping agent-information-ipv4-common-state { description "Common operational state data for DHCP relay option"; } grouping agent-information-ipv4-global-top { description "Top-level grouping for agent information data at global level"; container agent-information-option { description "Top-level container for relay agent information option data"; container config { description "Configuration data for the relay agent information option"; uses agent-information-ipv4-common-config; } container state { config false; description "Operational state data for agent information at global level"; uses agent-information-ipv4-common-config; uses agent-information-ipv4-common-state; } } } grouping agent-information-ipv4-interface-config { description "Configuration data for DCHP relay option on interfaces"; leaf circuit-id { type string; description "Encodes an agent-local identifier of the circuit from which a DHCP client-to-server packet was received. It is intended for use by agents in relaying DHCP responses back to the proper circuit. The circuit id is an opaque value"; reference "RFC 3046 - DHCP Relay Agent Information Option"; } leaf remote-id { type string; description "Provides a mechanism to identify the remote host end of the circuit. The remote-id should be thought of as an opaque value, but must be globally unique."; reference "RFC 3046 - DHCP Relay Agent Information Option"; } } grouping agent-information-ipv4-interface-state { description "Operational state data for DHCP relay option on interfaces"; leaf sent-circuit-id { type string; description "Reports the circuit-id sent by the system to the DHCP server."; } leaf sent-remote-id { type string; description "Reports the remote-id value sent by the system to the DHCP server"; } } grouping agent-information-ipv4-interface-top { description "Top-level grouping for relay agent information option data"; container agent-information-option { description "Top-level container for relay agent information option data"; container config { description "Configuration data for the relay agent information option"; uses agent-information-ipv4-common-config; uses agent-information-ipv4-interface-config; } container state { config false; description "Operational state data "; uses agent-information-ipv4-common-config; uses agent-information-ipv4-interface-config; uses agent-information-ipv4-common-state; uses agent-information-ipv4-interface-state; } } } grouping agent-options-ipv6-common-config { description "Configuration data for DHCPv6 options"; leaf enable-interface-id { type boolean; default false; description "Enables DHCPv6 OPTION_INTERFACE_ID (18) to identify the interface on which the client message was received."; reference "IETF RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; } leaf enable-remote-id { type boolean; default false; description "Sets DHCPv6 OPTION_REMOTE_ID (37). This option is the DHCPv6 equivalent for the IPv4 (DHCPv4) Relay Agent Option's Remote-ID suboption as specified in RFC 3046. The remote-id field may be used to encode a user name, remote IP address, interface/port identifier, etc."; reference "IETF RFC 4649 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Relay Agent Remote-ID Option"; } } grouping agent-options-ipv6-common-state { description "Operational state data for DHCPv6 options"; } grouping agent-options-ipv6-interface-config { description "Configuration data for DHCPv6 options"; leaf interface-id { type string; description "Sets DHCPv6 OPTION_INTERFACE_ID (18) to identify the interface on which the client message was received."; reference "IETF RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; } leaf remote-id { type string; description "Sets DHCPv6 OPTION_REMOTE_ID (37). This option is the DHCPv6 equivalent for the IPv4 (DHCPv4) Relay Agent Option's Remote-ID suboption as specified in RFC 3046. The remote-id field may be used to encode a user name, remote IP address, interface/port identifier, etc."; reference "IETF RFC 4649 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Relay Agent Remote-ID Option"; } } grouping agent-options-ipv6-interface-state { description "Operational state data for DHCPv6 options"; leaf sent-interface-id { type string; description "Reflects the DHCPv6 OPTION_INTERFACE_ID (18) sent to the server by the system."; reference "IETF RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; } leaf sent-remote-id { type string; description "Reflects the DHCPv6 OPTION_REMOTE_ID (37) sent to the server by the system."; reference "IETF RFC 4649 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Relay Agent Remote-ID Option"; } } grouping agent-options-ipv6-global-top { description "Top-level grouping for DHCPv6 options on interfaces"; container options { description "Top-level container for DHCPv6 agent options on interfaces"; container config { description "Configuration data "; uses agent-options-ipv6-common-config; } container state { config false; description "Operational state data for DHCPv6 agent option on an interface"; uses agent-options-ipv6-common-config; uses agent-options-ipv6-common-state; } } } grouping agent-options-ipv6-interface-top { description "Top-level grouping for DHCPv6 options on interfaces"; container options { description "Top-level container for DHCPv6 agent options on interfaces"; container config { description "Configuration data "; uses agent-options-ipv6-common-config; uses agent-options-ipv6-interface-config; } container state { config false; description "Operational state data for DHCPv6 agent option on an interface"; uses agent-options-ipv6-common-config; uses agent-options-ipv6-interface-config; uses agent-options-ipv6-common-state; uses agent-options-ipv6-interface-state; } } } grouping relay-agent-common-config { description "Configuration data for global level relay agent options, common across address families"; leaf enable-relay-agent { type boolean; default false; description "Enables DHCP/BOOTP relay agent on all interfaces"; } } grouping relay-agent-common-state { description "Operational state data for global level relay agent, common across address families"; } grouping relay-agent-ipv4-config { description "Configuration data for DHCPv4 relay agents"; uses relay-agent-common-config; } grouping relay-agent-ipv4-state { description "Configuration data for DHCPv4 relay agents"; uses relay-agent-common-state; } grouping relay-agent-ipv4-top { description "Top-level grouping for global relay agent data"; container dhcp { description "Top-level container for global relay agent data"; container config { description "Configuration data for global DHCPv4"; uses relay-agent-ipv4-config; } container state { config false; description "Operational state data global DHCPv4"; uses relay-agent-ipv4-config; uses relay-agent-ipv4-state; } uses agent-information-ipv4-global-top; uses relay-agent-ipv4-interfaces-top; } } grouping relay-agent-ipv6-config { description "Configuration data for DHCPv6 relay agents"; uses relay-agent-common-config; } grouping relay-agent-ipv6-state { description "Configuration data for DHCPv6 relay agents"; uses relay-agent-common-state; } grouping relay-agent-ipv6-top { description "Top-level grouping for global relay agent data"; container dhcpv6 { description "Top-level container for global relay agent data"; container config { description "Configuration data for global DHCPv6"; uses relay-agent-ipv6-config; } container state { config false; description "Operational state data global DHCPv6"; uses relay-agent-ipv6-config; uses relay-agent-ipv6-state; } uses agent-options-ipv6-global-top; uses relay-agent-ipv6-interfaces-top; } } grouping relay-agent-common-stats { description "Common DHCP / BOOTP message statistics for DHCPv4 and DHCPv6"; leaf total-dropped { type yang:counter64; description "Total number of DHCP packets dropped by the relay agent"; } leaf invalid-opcode { type yang:counter64; description "Number of DHCP packets dropped due to an invalid opcode"; } leaf invalid-options { type yang:counter64; description "Number of DHCP packets dropped due to an invalid option"; } } grouping relay-agent-ipv4-stats { description "DHCPv4 relay agent message statistics"; leaf bootrequest-received { type yang:counter64; description "BOOTREQUEST messages received by the relay agent"; } leaf dhcp-decline-received { type yang:counter64; description "DHCP DECLINE messages received by the relay agent"; } leaf dhcp-discover-received { type yang:counter64; description "DHCP DISCOVER messages received by the relay agent"; } leaf dhcp-inform-received { type yang:counter64; description "DHCP INFORM messages received by the relay agent"; } leaf dhcp-release-received { type yang:counter64; description "DHCP RELEASE messages received by the relay agent"; } leaf dhcp-request-received { type yang:counter64; description "DHCP REQUEST messages received by the relay agent"; } leaf bootrequest-sent { type yang:counter64; description "BOOTREQUEST messages forwarded by the relay agent"; } leaf bootreply-sent { type yang:counter64; description "BOOTREPLY messages forwarded by the relay agent"; } leaf dhcp-offer-sent { type yang:counter64; description "DHCP OFFER messages sent by the relay agent"; } leaf dhcp-ack-sent { type yang:counter64; description "DHCP ACK messages sent by the relay agent"; } leaf dhcp-nack-sent { type yang:counter64; description "DHCP NACK messages sent by the relay agent"; } } grouping relay-agent-ipv6-stats { description "DHCPv4 relay agent message statistics"; leaf dhcpv6-solicit-received { type yang:counter64; description "Number of DHCPv6 SOLICIT messages received from clients by the relay agent"; } leaf dhcpv6-decline-received { type yang:counter64; description "Number of DHCPv6 DECLINE messages received from clients by the relay agent"; } leaf dhcpv6-request-received { type yang:counter64; description "Number of DHCPv6 request messages received from clients by the relay agent"; } leaf dhcpv6-release-received { type yang:counter64; description "Number of DHCPv6 release messages received from clients by the relay agent"; } leaf dhcpv6-confirm-received { type yang:counter64; description "Number of DHCPv6 confirm messages received from clients by the relay agent"; } leaf dhcpv6-rebind-received { type yang:counter64; description "Number of DHCPv6 rebind messages received from clients by the relay agent"; } leaf dhcpv6-info-request-received { type yang:counter64; description "Number of DHCPv6 information requests messages received from clients by the relay agent"; } leaf dhcpv6-relay-reply-received { type yang:counter64; description "Number of DHCPv6 relay reply messages received from servers by the relay agent"; } leaf dhcpv6-adverstise-sent { type yang:counter64; description "Number of DHCPv6 adverstise messages sent to clients by the relay agent"; } leaf dhcpv6-reply-sent { type yang:counter64; description "Number of DHCPv6 reply messages sent to clients by the relay agent"; } leaf dhcpv6-reconfigure-sent { type yang:counter64; description "Number of DHCPv6 reconfigure messages sent to clients by the relay agent"; } leaf dhcpv6-relay-forw-sent { type yang:counter64; description "Number of DHCPv6 relay-forward messages sent to servers by the relay agent"; } } grouping relay-agent-ipv4-interfaces-config { description "Configuration data for interfaces enabled for relaying"; leaf id { type oc-if:interface-id; description "Name of the interface on which relay agent is active"; } leaf enable { type boolean; description "Enables the relay agent on the referenced interface. At least one helper address should also be configured for forwarding requested."; } leaf-list helper-address { type inet:ip-address; description "List of IPv4 or IPv6 addresses of DHCP servers to which the relay agent should forward DHCPv4 requests. The relay agent is expected to forward DHCPv4/BOOTP requests to all listed server addresses when DHCPv4 relaying is enabled globally, or on the interface."; } } grouping relay-agent-ipv4-interfaces-state { description "Operational state data for interfaces enabled for relaying"; container counters { description "Counters and statistics for relay agent operation."; uses relay-agent-common-stats; uses relay-agent-ipv4-stats; } } grouping relay-agent-ipv4-interfaces-top { description "Top-level grouping for DHCPv4 relays on interfaces"; container interfaces { description "Enclosing container for the list of interface references."; list interface { key "id"; description "List of interfaces on which the relay agent is configured."; leaf id { type leafref { path "../config/id"; } description "Reference to the interface list key"; } container config { description "Configuration data for relay agent interfaces."; uses relay-agent-ipv4-interfaces-config; } container state { config false; description "Operational state data for relay agent interfaces."; uses relay-agent-ipv4-interfaces-config; uses relay-agent-ipv4-interfaces-state; } uses oc-if:interface-ref; uses agent-information-ipv4-interface-top; } } } grouping relay-agent-ipv6-interfaces-config { description "Configuration data for interfaces enabled for relaying"; leaf id { type oc-if:interface-id; description "Name of the interface on which relay agent is active"; } leaf enable { type boolean; description "Enables the relay agent on the referenced interface. At least one helper address should also be configured for forwarding requested."; } leaf-list helper-address { type inet:ipv6-address; description "List of IPv6 addresses of DHCP servers to which the relay agent should forward DHCPv6 requests. The relay agent is expected to forward DHCPv4/BOOTP requests to all listed server addresses when DHCPv6 relaying is enabled globally, or on the interface."; } } grouping relay-agent-ipv6-interfaces-state { description "Operational state data for interfaces enabled for relaying"; container counters { description "Counters and statistics for relay agent operation."; uses relay-agent-common-stats; uses relay-agent-ipv6-stats; } } grouping relay-agent-ipv6-interfaces-top { description "Top-level grouping for DHCPv4 relays on interfaces"; container interfaces { description "Enclosing container for the list of interface references."; list interface { key "id"; description "List of interfaces on which the relay agent is configured."; leaf id { type leafref { path "../config/id"; } description "Reference to the interface list key"; } container config { description "Configuration data for relay agent interfaces."; uses relay-agent-ipv6-interfaces-config; } container state { config false; description "Operational state data for relay agent interfaces."; uses relay-agent-ipv6-interfaces-config; uses relay-agent-ipv6-interfaces-state; } uses oc-if:interface-ref; uses agent-options-ipv6-interface-top; } } } grouping relay-agent-top { description "Top-level container for relay agent configuration and opstate data."; container relay-agent { description "Top level container for relay-agent configuration and operational state data"; uses relay-agent-ipv4-top; uses relay-agent-ipv6-top; } } // data definition statements uses relay-agent-top; // augment statements }