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
}
