Adding OpenConfig YANG models.
Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/interfaces/openconfig-if-ip.yang b/models/openconfig/src/main/yang/interfaces/openconfig-if-ip.yang
new file mode 100644
index 0000000..cc291de
--- /dev/null
+++ b/models/openconfig/src/main/yang/interfaces/openconfig-if-ip.yang
@@ -0,0 +1,1191 @@
+module openconfig-if-ip {
+
+ yang-version "1";
+
+ // namespace
+ namespace "http://openconfig.net/yang/interfaces/ip";
+
+ prefix "oc-ip";
+
+ // import some basic types
+ import openconfig-inet-types { prefix oc-inet; }
+ import openconfig-interfaces { prefix oc-if; }
+ import openconfig-vlan { prefix oc-vlan; }
+ import openconfig-yang-types { prefix oc-yang; }
+ import openconfig-extensions { prefix oc-ext; }
+
+ // meta
+ organization "OpenConfig working group";
+
+ contact
+ "OpenConfig working group
+ netopenconfig@googlegroups.com";
+
+ description
+ "This model defines data for managing configuration and
+ operational state on IP (IPv4 and IPv6) interfaces.
+
+ This model reuses data items defined in the IETF YANG model for
+ interfaces described by RFC 7277 with an alternate structure
+ (particularly for operational state data) and with
+ additional configuration items.
+
+ Portions of this code were derived from IETF RFC 7277.
+ Please reproduce this note if possible.
+
+ IETF code is subject to the following copyright and license:
+ Copyright (c) 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).";
+
+ oc-ext:openconfig-version "2.0.0";
+
+ revision "2017-07-14" {
+ description
+ "Added Ethernet/IP state data; Add dhcp-client;
+ migrate to OpenConfig types modules; Removed or
+ renamed opstate values";
+ reference "2.0.0";
+ }
+
+ revision "2017-04-03"{
+ description
+ "Update copyright notice.";
+ reference "1.1.1";
+ }
+
+ revision "2016-12-22" {
+ description
+ "Fixes to Ethernet interfaces model";
+ reference "1.1.0";
+ }
+
+
+ // typedef statements
+
+ typedef ip-address-origin {
+ type enumeration {
+ enum OTHER {
+ description
+ "None of the following.";
+ }
+ enum STATIC {
+ description
+ "Indicates that the address has been statically
+ configured - for example, using NETCONF or a Command Line
+ Interface.";
+ }
+ enum DHCP {
+ description
+ "Indicates an address that has been assigned to this
+ system by a DHCP server.";
+ }
+ enum LINK_LAYER {
+ description
+ "Indicates an address created by IPv6 stateless
+ autoconfiguration that embeds a link-layer address in its
+ interface identifier.";
+ }
+ enum RANDOM {
+ description
+ "Indicates an address chosen by the system at
+ random, e.g., an IPv4 address within 169.254/16, an
+ RFC 4941 temporary address, or an RFC 7217 semantically
+ opaque address.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6
+ RFC 7217: A Method for Generating Semantically Opaque
+ Interface Identifiers with IPv6 Stateless
+ Address Autoconfiguration (SLAAC)";
+ }
+ }
+ description
+ "The origin of an address.";
+ }
+
+ typedef neighbor-origin {
+ type enumeration {
+ enum OTHER {
+ description
+ "None of the following.";
+ }
+ enum STATIC {
+ description
+ "Indicates that the mapping has been statically
+ configured - for example, using NETCONF or a Command Line
+ Interface.";
+ }
+ enum DYNAMIC {
+ description
+ "Indicates that the mapping has been dynamically resolved
+ using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
+ protocol.";
+ }
+ }
+ description
+ "The origin of a neighbor entry.";
+ }
+
+ // grouping statements
+
+ grouping ip-common-global-config {
+ description
+ "Shared configuration data for IPv4 or IPv6 assigned
+ globally on an interface.";
+
+ leaf dhcp-client {
+ type boolean;
+ default false;
+ description
+ "Enables a DHCP client on the interface in order to request
+ an address";
+ }
+ }
+
+ grouping ip-common-counters-state {
+ description
+ "Operational state for IP traffic statistics for IPv4 and
+ IPv6";
+
+ container counters {
+ description
+ "Packet and byte counters for IP transmission and
+ reception for the address family.";
+
+
+ leaf in-pkts {
+ type oc-yang:counter64;
+ description
+ "The total number of IP packets received for the specified
+ address family, including those received in error";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf in-octets {
+ type oc-yang:counter64;
+ description
+ "The total number of octets received in input IP packets
+ for the specified address family, including those received
+ in error.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf in-error-pkts {
+ // TODO: this counter combines several error conditions --
+ // could consider breaking them out to separate leaf nodes
+ type oc-yang:counter64;
+ description
+ "Number of IP packets discarded due to errors for the
+ specified address family, including errors in the IP
+ header, no route found to the IP destination, invalid
+ address, unknown protocol, etc.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf in-forwarded-pkts {
+ type oc-yang:counter64;
+ description
+ "The number of input packets for which the device was not
+ their final IP destination and for which the device
+ attempted to find a route to forward them to that final
+ destination.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf in-forwarded-octets {
+ type oc-yang:counter64;
+ description
+ "The number of octets received in input IP packets
+ for the specified address family for which the device was
+ not their final IP destination and for which the
+ device attempted to find a route to forward them to that
+ final destination.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf in-discarded-pkts {
+ type oc-yang:counter64;
+ description
+ "The number of input IP packets for the
+ specified address family, for which no problems were
+ encountered to prevent their continued processing, but
+ were discarded (e.g., for lack of buffer space).";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf out-pkts {
+ type oc-yang:counter64;
+ description
+ "The total number of IP packets for the
+ specified address family that the device supplied
+ to the lower layers for transmission. This includes
+ packets generated locally and those forwarded by the
+ device.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf out-octets {
+ type oc-yang:counter64;
+ description
+ "The total number of octets in IP packets for the
+ specified address family that the device
+ supplied to the lower layers for transmission. This
+ includes packets generated locally and those forwarded by
+ the device.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf out-error-pkts {
+ // TODO: this counter combines several error conditions --
+ // could consider breaking them out to separate leaf nodes
+ type oc-yang:counter64;
+ description
+ "Number of IP packets for the specified address family
+ locally generated and discarded due to errors, including
+ no route found to the IP destination.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf out-forwarded-pkts {
+ type oc-yang:counter64;
+ description
+ "The number of packets for which this entity was not their
+ final IP destination and for which it was successful in
+ finding a path to their final destination.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf out-forwarded-octets {
+ type oc-yang:counter64;
+ description
+ "The number of octets in packets for which this entity was
+ not their final IP destination and for which it was
+ successful in finding a path to their final destination.";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+
+ leaf out-discarded-pkts {
+ type oc-yang:counter64;
+ description
+ "The number of output IP packets for the
+ specified address family for which no problem was
+ encountered to prevent their transmission to their
+ destination, but were discarded (e.g., for lack of
+ buffer space).";
+ reference
+ "RFC 4293 - Management Information Base for the
+ Internet Protocol (IP)";
+ }
+ }
+
+ }
+
+
+
+ grouping ipv4-global-config {
+ description
+ "Configuration data for IPv4 interfaces across
+ all addresses assigned to the interface";
+
+ leaf enabled {
+ type boolean;
+ default true;
+ description
+ "Controls whether IPv4 is enabled or disabled on this
+ interface. When IPv4 is enabled, this interface is
+ connected to an IPv4 stack, and the interface can send
+ and receive IPv4 packets.";
+ }
+
+ leaf mtu {
+ type uint16 {
+ range "68..max";
+ }
+ units octets;
+ description
+ "The size, in octets, of the largest IPv4 packet that the
+ interface will send and receive.
+
+ The server may restrict the allowed values for this leaf,
+ depending on the interface's type.
+
+ If this leaf is not configured, the operationally used MTU
+ depends on the interface's type.";
+ reference
+ "RFC 791: Internet Protocol";
+ }
+
+ uses ip-common-global-config;
+
+
+ }
+
+ grouping ipv4-address-config {
+
+ description
+ "Per IPv4 adresss configuration data for the
+ interface.";
+
+ leaf ip {
+ type oc-inet:ipv4-address;
+ description
+ "The IPv4 address on the interface.";
+ }
+
+ leaf prefix-length {
+ type uint8 {
+ range "0..32";
+ }
+ description
+ "The length of the subnet prefix.";
+ }
+ }
+
+ grouping ipv4-neighbor-config {
+ description
+ "Per IPv4 neighbor configuration data. Neighbor
+ entries are analagous to static ARP entries, i.e., they
+ create a correspondence between IP and link-layer addresses";
+
+ leaf ip {
+ type oc-inet:ipv4-address;
+ description
+ "The IPv4 address of the neighbor node.";
+ }
+ leaf link-layer-address {
+ type oc-yang:phys-address;
+ mandatory true;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+ }
+
+ grouping ipv4-address-state {
+ description
+ "State variables for IPv4 addresses on the interface";
+
+ leaf origin {
+ type ip-address-origin;
+ description
+ "The origin of this address, e.g., statically configured,
+ assigned by DHCP, etc..";
+ }
+ }
+
+ grouping ipv4-neighbor-state {
+ description
+ "State variables for IPv4 neighbor entries on the interface.";
+
+ leaf origin {
+ type neighbor-origin;
+ description
+ "The origin of this neighbor entry, static or dynamic.";
+ }
+ }
+
+ grouping ipv6-global-config {
+ description
+ "Configuration data at the global level for each
+ IPv6 interface";
+
+ leaf enabled {
+ type boolean;
+ default true;
+ description
+ "Controls whether IPv6 is enabled or disabled on this
+ interface. When IPv6 is enabled, this interface is
+ connected to an IPv6 stack, and the interface can send
+ and receive IPv6 packets.";
+ }
+
+ leaf mtu {
+ type uint32 {
+ range "1280..max";
+ }
+ units octets;
+ description
+ "The size, in octets, of the largest IPv6 packet that the
+ interface will send and receive.
+
+ The server may restrict the allowed values for this leaf,
+ depending on the interface's type.
+
+ If this leaf is not configured, the operationally used MTU
+ depends on the interface's type.";
+ reference
+ "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+ Section 5";
+ }
+
+ leaf dup-addr-detect-transmits {
+ type uint32;
+ default 1;
+ description
+ "The number of consecutive Neighbor Solicitation messages
+ sent while performing Duplicate Address Detection on a
+ tentative address. A value of zero indicates that
+ Duplicate Address Detection is not performed on
+ tentative addresses. A value of one indicates a single
+ transmission with no follow-up retransmissions.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+ }
+
+ uses ip-common-global-config;
+ }
+
+ grouping ipv6-address-config {
+ description "Per-address configuration data for IPv6 interfaces";
+
+ leaf ip {
+ type oc-inet:ipv6-address;
+ description
+ "The IPv6 address on the interface.";
+ }
+
+ leaf prefix-length {
+ type uint8 {
+ range "0..128";
+ }
+ mandatory true;
+ description
+ "The length of the subnet prefix.";
+ }
+ }
+
+ grouping ipv6-address-state {
+ description
+ "Per-address operational state data for IPv6 interfaces";
+
+ leaf origin {
+ type ip-address-origin;
+ description
+ "The origin of this address, e.g., static, dhcp, etc.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum PREFERRED {
+ description
+ "This is a valid address that can appear as the
+ destination or source address of a packet.";
+ }
+ enum DEPRECATED {
+ description
+ "This is a valid but deprecated address that should
+ no longer be used as a source address in new
+ communications, but packets addressed to such an
+ address are processed as expected.";
+ }
+ enum INVALID {
+ description
+ "This isn't a valid address, and it shouldn't appear
+ as the destination or source address of a packet.";
+ }
+ enum INACCESSIBLE {
+ description
+ "The address is not accessible because the interface
+ to which this address is assigned is not
+ operational.";
+ }
+ enum UNKNOWN {
+ description
+ "The status cannot be determined for some reason.";
+ }
+ enum TENTATIVE {
+ description
+ "The uniqueness of the address on the link is being
+ verified. Addresses in this state should not be
+ used for general communication and should only be
+ used to determine the uniqueness of the address.";
+ }
+ enum DUPLICATE {
+ description
+ "The address has been determined to be non-unique on
+ the link and so must not be used.";
+ }
+ enum OPTIMISTIC {
+ description
+ "The address is available for use, subject to
+ restrictions, while its uniqueness on a link is
+ being verified.";
+ }
+ }
+ description
+ "The status of an address. Most of the states correspond
+ to states from the IPv6 Stateless Address
+ Autoconfiguration protocol.";
+ reference
+ "RFC 4293: Management Information Base for the
+ Internet Protocol (IP)
+ - IpAddressStatusTC
+ RFC 4862: IPv6 Stateless Address Autoconfiguration";
+ }
+ }
+
+ grouping ipv6-neighbor-config {
+ description
+ "Per-neighbor configuration data for IPv6 interfaces";
+
+ leaf ip {
+ type oc-inet:ipv6-address;
+ description
+ "The IPv6 address of the neighbor node.";
+ }
+
+ leaf link-layer-address {
+ type oc-yang:phys-address;
+ mandatory true;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+ }
+
+ grouping ipv6-neighbor-state {
+ description "Per-neighbor state variables for IPv6 interfaces";
+
+ leaf origin {
+ type neighbor-origin;
+ description
+ "The origin of this neighbor entry.";
+ }
+ leaf is-router {
+ type empty;
+ description
+ "Indicates that the neighbor node acts as a router.";
+ }
+ leaf neighbor-state {
+ type enumeration {
+ enum INCOMPLETE {
+ description
+ "Address resolution is in progress, and the link-layer
+ address of the neighbor has not yet been
+ determined.";
+ }
+ enum REACHABLE {
+ description
+ "Roughly speaking, the neighbor is known to have been
+ reachable recently (within tens of seconds ago).";
+ }
+ enum STALE {
+ description
+ "The neighbor is no longer known to be reachable, but
+ until traffic is sent to the neighbor no attempt
+ should be made to verify its reachability.";
+ }
+ enum DELAY {
+ description
+ "The neighbor is no longer known to be reachable, and
+ traffic has recently been sent to the neighbor.
+ Rather than probe the neighbor immediately, however,
+ delay sending probes for a short while in order to
+ give upper-layer protocols a chance to provide
+ reachability confirmation.";
+ }
+ enum PROBE {
+ description
+ "The neighbor is no longer known to be reachable, and
+ unicast Neighbor Solicitation probes are being sent
+ to verify reachability.";
+ }
+ }
+ description
+ "The Neighbor Unreachability Detection state of this
+ entry.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 7.3.2";
+ }
+ }
+
+ grouping ip-vrrp-ipv6-config {
+ description
+ "IPv6-specific configuration data for VRRP on IPv6
+ interfaces";
+
+ leaf virtual-link-local {
+ type oc-inet:ip-address;
+ description
+ "For VRRP on IPv6 interfaces, sets the virtual link local
+ address";
+ }
+ }
+
+ grouping ip-vrrp-ipv6-state {
+ description
+ "IPv6-specific operational state for VRRP on IPv6 interfaces";
+
+ uses ip-vrrp-ipv6-config;
+ }
+
+ grouping ip-vrrp-tracking-config {
+ description
+ "Configuration data for tracking interfaces
+ in a VRRP group";
+
+ leaf-list track-interface {
+ type leafref {
+ path "/oc-if:interfaces/oc-if:interface/oc-if:name";
+ }
+ // TODO: we may need to add some restriction to ethernet
+ // or IP interfaces.
+ description
+ "Sets a list of one or more interfaces that should
+ be tracked for up/down events to dynamically change the
+ priority state of the VRRP group, and potentially
+ change the mastership if the tracked interface going
+ down lowers the priority sufficiently. Any of the tracked
+ interfaces going down will cause the priority to be lowered.
+ Some implementations may only support a single
+ tracked interface.";
+ }
+
+ leaf priority-decrement {
+ type uint8 {
+ range 0..254;
+ }
+ default 0;
+ description "Set the value to subtract from priority when
+ the tracked interface goes down";
+ }
+ }
+
+ grouping ip-vrrp-tracking-state {
+ description
+ "Operational state data for tracking interfaces in a VRRP
+ group";
+ }
+
+ grouping ip-vrrp-tracking-top {
+ description
+ "Top-level grouping for VRRP interface tracking";
+
+ container interface-tracking {
+ description
+ "Top-level container for VRRP interface tracking";
+
+ container config {
+ description
+ "Configuration data for VRRP interface tracking";
+
+ uses ip-vrrp-tracking-config;
+ }
+
+ container state {
+
+ config false;
+
+ description
+ "Operational state data for VRRP interface tracking";
+
+ uses ip-vrrp-tracking-config;
+ uses ip-vrrp-tracking-state;
+ }
+ }
+ }
+
+ grouping ip-vrrp-config {
+ description
+ "Configuration data for VRRP on IP interfaces";
+
+ leaf virtual-router-id {
+ type uint8 {
+ range 1..255;
+ }
+ description
+ "Set the virtual router id for use by the VRRP group. This
+ usually also determines the virtual MAC address that is
+ generated for the VRRP group";
+ }
+
+ leaf-list virtual-address {
+ type oc-inet:ip-address;
+ description
+ "Configure one or more virtual addresses for the
+ VRRP group";
+ }
+
+ leaf priority {
+ type uint8 {
+ range 1..254;
+ }
+ default 100;
+ description
+ "Specifies the sending VRRP interface's priority
+ for the virtual router. Higher values equal higher
+ priority";
+ }
+
+ leaf preempt {
+ type boolean;
+ default true;
+ description
+ "When set to true, enables preemption by a higher
+ priority backup router of a lower priority master router";
+ }
+
+ leaf preempt-delay {
+ type uint16 {
+ range 0..3600;
+ }
+ default 0;
+ description
+ "Set the delay the higher priority router waits
+ before preempting";
+ }
+
+ leaf accept-mode {
+ type boolean;
+ // TODO: should we adopt the RFC default given the common
+ // operational practice of setting to true?
+ default false;
+ description
+ "Configure whether packets destined for
+ virtual addresses are accepted even when the virtual
+ address is not owned by the router interface";
+ }
+
+ leaf advertisement-interval {
+ type uint16 {
+ range 1..4095;
+ }
+ // TODO this range is theoretical -- needs to be validated
+ // against major implementations.
+ units "centiseconds";
+ default 100;
+ description
+ "Sets the interval between successive VRRP
+ advertisements -- RFC 5798 defines this as a 12-bit
+ value expressed as 0.1 seconds, with default 100, i.e.,
+ 1 second. Several implementation express this in units of
+ seconds";
+ }
+ }
+
+ grouping ip-vrrp-state {
+ description
+ "Operational state data for VRRP on IP interfaces";
+
+ leaf current-priority {
+ type uint8;
+ description "Operational value of the priority for the
+ interface in the VRRP group";
+ }
+ }
+
+ grouping ip-vrrp-top {
+ description
+ "Top-level grouping for Virtual Router Redundancy Protocol";
+
+ container vrrp {
+ description
+ "Enclosing container for VRRP groups handled by this
+ IP interface";
+
+ reference "RFC 5798 - Virtual Router Redundancy Protocol
+ (VRRP) Version 3 for IPv4 and IPv6";
+
+ list vrrp-group {
+ key "virtual-router-id";
+ description
+ "List of VRRP groups, keyed by virtual router id";
+
+ leaf virtual-router-id {
+ type leafref {
+ path "../config/virtual-router-id";
+ }
+ description
+ "References the configured virtual router id for this
+ VRRP group";
+ }
+
+ container config {
+ description
+ "Configuration data for the VRRP group";
+
+ uses ip-vrrp-config;
+ }
+
+ container state {
+
+ config false;
+
+ description
+ "Operational state data for the VRRP group";
+
+ uses ip-vrrp-config;
+ uses ip-vrrp-state;
+ }
+
+ uses ip-vrrp-tracking-top;
+ }
+ }
+ }
+
+ grouping ipv4-top {
+ description "Top-level configuration and state for IPv4
+ interfaces";
+
+ container ipv4 {
+ description
+ "Parameters for the IPv4 address family.";
+
+ container addresses {
+ description
+ "Enclosing container for address list";
+
+ list address {
+ key "ip";
+ description
+ "The list of configured IPv4 addresses on the interface.";
+
+ leaf ip {
+ type leafref {
+ path "../oc-ip:config/oc-ip:ip";
+ }
+ description "References the configured IP address";
+ }
+
+ container config {
+ description "Configuration data for each configured IPv4
+ address on the interface";
+
+ uses ipv4-address-config;
+
+ }
+
+ container state {
+
+ config false;
+ description "Operational state data for each IPv4 address
+ configured on the interface";
+
+ uses ipv4-address-config;
+ uses ipv4-address-state;
+ }
+
+ }
+ }
+
+ container neighbors {
+ description
+ "Enclosing container for neighbor list";
+
+ list neighbor {
+ key "ip";
+ description
+ "A list of mappings from IPv4 addresses to
+ link-layer addresses.
+
+ Entries in this list are used as static entries in the
+ ARP Cache.";
+ reference
+ "RFC 826: An Ethernet Address Resolution Protocol";
+
+ leaf ip {
+ type leafref {
+ path "../oc-ip:config/oc-ip:ip";
+ }
+ description "References the configured IP address";
+ }
+
+ container config {
+ description "Configuration data for each configured IPv4
+ address on the interface";
+
+ uses ipv4-neighbor-config;
+
+ }
+
+ container state {
+
+ config false;
+ description "Operational state data for each IPv4 address
+ configured on the interface";
+
+ uses ipv4-neighbor-config;
+ uses ipv4-neighbor-state;
+ }
+ }
+ }
+
+ uses oc-if:sub-unnumbered-top;
+
+ container config {
+ description
+ "Top-level IPv4 configuration data for the interface";
+
+ uses ipv4-global-config;
+ }
+
+ container state {
+
+ config false;
+ description
+ "Top level IPv4 operational state data";
+
+ uses ipv4-global-config;
+ uses ip-common-counters-state;
+ }
+ }
+ }
+
+ grouping ipv6-top {
+ description
+ "Top-level configuration and state for IPv6 interfaces";
+
+ container ipv6 {
+ description
+ "Parameters for the IPv6 address family.";
+
+ container addresses {
+ description
+ "Enclosing container for address list";
+
+ list address {
+ key "ip";
+ description
+ "The list of configured IPv6 addresses on the interface.";
+
+ leaf ip {
+ type leafref {
+ path "../oc-ip:config/oc-ip:ip";
+ }
+ description "References the configured IP address";
+ }
+
+ container config {
+ description
+ "Configuration data for each IPv6 address on
+ the interface";
+
+ uses ipv6-address-config;
+
+ }
+
+ container state {
+
+ config false;
+ description
+ "State data for each IPv6 address on the
+ interface";
+
+ uses ipv6-address-config;
+ uses ipv6-address-state;
+ }
+ }
+ }
+
+ container neighbors {
+ description
+ "Enclosing container for list of IPv6 neighbors";
+
+ list neighbor {
+ key "ip";
+ description
+ "List of IPv6 neighbors";
+
+ leaf ip {
+ type leafref {
+ path "../oc-ip:config/oc-ip:ip";
+ }
+ description
+ "References the configured IP neighbor address";
+ }
+
+ container config {
+ description "Configuration data for each IPv6 address on
+ the interface";
+
+ uses ipv6-neighbor-config;
+
+ }
+
+ container state {
+
+ config false;
+ description "State data for each IPv6 address on the
+ interface";
+
+ uses ipv6-neighbor-config;
+ uses ipv6-neighbor-state;
+ }
+ }
+ }
+ uses oc-if:sub-unnumbered-top;
+
+ container config {
+ description "Top-level config data for the IPv6 interface";
+
+ uses ipv6-global-config;
+ }
+
+ container state {
+ config false;
+ description
+ "Top-level operational state data for the IPv6 interface";
+
+ uses ipv6-global-config;
+ uses ip-common-counters-state;
+
+ }
+ }
+ }
+
+ // augment statements
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+ "oc-if:subinterface" {
+ description
+ "IPv4 addr family configuration for
+ interfaces";
+
+ uses ipv4-top;
+
+ }
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+ "oc-if:subinterface" {
+ description
+ "IPv6 addr family configuration for
+ interfaces";
+
+ uses ipv6-top;
+
+ }
+
+ // VRRP for IPv4 interfaces
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+ "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address" {
+
+ description
+ "Additional IP addr family configuration for
+ interfaces";
+
+ uses ip-vrrp-top;
+
+ }
+
+ // VRRP for IPv6 interfaces
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+ "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address" {
+ description
+ "Additional IP addr family configuration for
+ interfaces";
+
+ uses ip-vrrp-top;
+
+ }
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+ "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/" +
+ "vrrp/vrrp-group/config" {
+ description
+ "Additional VRRP data for IPv6 interfaces";
+
+ uses ip-vrrp-ipv6-config;
+ }
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+ "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/" +
+ "vrrp-group/state" {
+ description
+ "Additional VRRP data for IPv6 interfaces";
+
+ uses ip-vrrp-ipv6-state;
+ }
+
+ // Augments for for routed VLANs
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan" {
+ description
+ "IPv4 addr family configuration for
+ interfaces";
+
+ uses ipv4-top;
+
+ }
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan" {
+ description
+ "IPv6 addr family configuration for
+ interfaces";
+
+ uses ipv6-top;
+
+ }
+
+ // VRRP for routed VLAN interfaces
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+ "oc-ip:ipv4/oc-ip:addresses/oc-ip:address" {
+ description
+ "Additional IP addr family configuration for
+ interfaces";
+
+ uses ip-vrrp-top;
+
+ }
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+ "oc-ip:ipv6/oc-ip:addresses/oc-ip:address" {
+ description
+ "Additional IP addr family configuration for
+ interfaces";
+
+ uses ip-vrrp-top;
+
+ }
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+ "oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/vrrp-group/config" {
+ description
+ "Additional VRRP data for IPv6 interfaces";
+
+ uses ip-vrrp-ipv6-config;
+ }
+
+
+ augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+ "oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/vrrp-group/state" {
+ description
+ "Additional VRRP data for IPv6 interfaces";
+
+ uses ip-vrrp-ipv6-state;
+ }
+
+ // rpc statements
+
+ // notification statements
+}