module openconfig-vlan {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/vlan";

  prefix "oc-vlan";

  // import some basic types
  import openconfig-vlan-types { prefix oc-vlan-types; }
  import openconfig-interfaces { prefix oc-if; }
  import openconfig-if-ethernet { prefix oc-eth; }
  import openconfig-if-aggregate { prefix oc-lag; }
  import iana-if-type { prefix ift; }
  import openconfig-extensions { prefix oc-ext; }

  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    netopenconfig@googlegroups.com";

  description
    "This module defines configuration and state variables for VLANs,
    in addition to VLAN parameters associated with interfaces";

  oc-ext:openconfig-version "2.0.0";

  revision "2017-07-14" {
    description
      "Move top-level vlan data to network-instance; Update
      identities to comply to style guide; fixed pattern
      quoting; corrected trunk vlan types; added TPID config to
      base interface.";
    reference "2.0.0";
  }

  revision "2016-05-26" {
    description
      "OpenConfig public release";
    reference "1.0.2";
  }

  // grouping statements

  grouping vlan-config {
    description "VLAN configuration container.";

    leaf vlan-id {
      type oc-vlan-types:vlan-id;
      description "Interface VLAN id.";
    }

    leaf name {
      type string;
      description "Interface VLAN name.";
    }

    leaf status {
      type enumeration {
        enum ACTIVE {
          description "VLAN is active";
        }
        enum SUSPENDED {
          description "VLAN is inactive / suspended";
        }
      }
      default ACTIVE;
      description "Admin state of the VLAN";
    }

  }

  grouping vlan-state {
    description "State variables for VLANs";

    // placeholder

  }

  grouping vlan-tpid-config {
    description
      "TPID configuration for dot1q-enabled interfaces";

    leaf tpid {
      type identityref {
        base oc-vlan-types:TPID_TYPES;
      }
      default oc-vlan-types:TPID_0X8100;
      description
        "Optionally set the tag protocol identifier field (TPID) that
        is accepted on the VLAN";
    }
  }

  grouping vlan-tpid-state {
    description
      "TPID opstate for dot1q-enabled interfaces";

    // placeholder

  }

  grouping vlan-members-state {
    description
      "List of interfaces / subinterfaces belonging to the VLAN.";

    container members {
      description
        "Enclosing container for list of member interfaces";

      list member {
        config false;
        description
          "List of references to interfaces / subinterfaces
          associated with the VLAN.";

        uses oc-if:base-interface-ref-state;
      }
    }
  }

  grouping vlan-switched-config {
    description
      "VLAN related configuration that is part of the physical
      Ethernet interface.";

    leaf interface-mode {
      type oc-vlan-types:vlan-mode-type;
      description
        "Set the interface to access or trunk mode for
        VLANs";
    }

    leaf native-vlan {
      when "interface-mode = 'TRUNK'" {
        description
          "Native VLAN is valid for trunk mode interfaces";
      }
      type oc-vlan-types:vlan-id;
      description
        "Set the native VLAN id for untagged frames arriving on
        a trunk interface.  Tagged frames sent on an interface
        configured with a native VLAN should have their tags
        stripped prior to transmission. This configuration is only
        valid on a trunk interface.";
    }

    leaf access-vlan {
      when "interface-mode = 'ACCESS'" {
        description
          "Access VLAN assigned to the interfaces";
      }
      type oc-vlan-types:vlan-id;
      description
        "Assign the access vlan to the access port.";
    }

    leaf-list trunk-vlans {
      when "interface-mode = 'TRUNK'" {
        description
          "Allowed VLANs may be specified for trunk mode
          interfaces.";
      }
      type union {
        type oc-vlan-types:vlan-id;
        type oc-vlan-types:vlan-range;
      }
      description
        "Specify VLANs, or ranges thereof, that the interface may
        carry when in trunk mode.  If not specified, all VLANs are
        allowed on the interface. Ranges are specified in the form
        x..y, where x<y - ranges are assumed to be inclusive (such
        that the VLAN range is x <= range <= y.";
    }
  }

  grouping vlan-switched-state {
    description
      "VLAN related operational state that is part of Ethernet
      interface state data";

    //TODO: placeholder for operational state related to VLANs
    //on the physical interface
  }

  grouping vlan-switched-top {
    description
      "Top-level grouping for VLAN data associated with an
      Ethernet interface";

    container switched-vlan {
      description
        "Enclosing container for VLAN interface-specific
        data on Ethernet interfaces.  These are for standard
        L2, switched-style VLANs.";

      container config {
          description "Configuration parameters for VLANs";

          uses vlan-switched-config;
      }

      container state {

        config false;
        description "State variables for VLANs";

        uses vlan-switched-config;
        uses vlan-switched-state;
      }
    }
  }

  grouping vlan-logical-config {
    description
      "VLAN related configuration that is part of subinterface
      (logical interface) configuration.  These are generally
      L3 VLANs with an id that is local.";


    leaf vlan-id {
      type union {
        type oc-vlan-types:vlan-id;
        type oc-vlan-types:qinq-id;
      }
      description
        "VLAN id for the subinterface -- specified inline for the
        case of a local VLAN.  The id is scoped to the
        subinterface, and could be repeated on different
        subinterfaces.";
    }
  }

  grouping vlan-logical-state {
    description
      "VLAN related operational state that is part of logical
      interface state data";

    //TODO: placeholder to add VLAN-specific state variables on
    //the subinterface
  }

  grouping vlan-top {
    description "Top-level grouping for VLAN configuration";

    container vlans {
      description "Container for VLAN configuration and state
      variables";

      list vlan {
        key "vlan-id";

        description "Configured VLANs keyed by id";

        leaf vlan-id {
          type leafref {
            path "../config/vlan-id";
          }
          description "references the configured vlan-id";
        }

        container config {
          description "Configuration parameters for VLANs";

          uses vlan-config;
        }

        container state {

          config false;
          description "State variables for VLANs";

          uses vlan-config;
          uses vlan-state;
        }
        uses vlan-members-state;
      }
    }
  }

  grouping vlan-logical-top {
    description
      "Top-level grouping for VLAN data associated with a
      logical interface or subinterface";

    container vlan {
      description
        "Enclosing container for VLAN interface-specific
        data on subinterfaces";

      container config {
          description "Configuration parameters for VLANs";

          uses vlan-logical-config;
        }

        container state {

          config false;
          description "State variables for VLANs";

          uses vlan-logical-config;
          uses vlan-logical-state;
        }
    }
  }

  grouping vlan-routed-config {
    description
      "Configuration data for routed vlans (SVI, IRB, etc.)";

    leaf vlan {
      type union {
        // TODO: in YANG 1.1, unions support leafref types which
        // should be used here to reference a configured VLAN by
        // id or name
        type uint16;
        type string;
      }
      description
        "References the VLAN for which this IP interface
        provides routing services -- similar to a switch virtual
        interface (SVI), or integrated routing and bridging interface
        (IRB) in some implementations.";
    }

  }

  grouping vlan-routed-state {
    description
      "Operational state data for routed vlan interfaces.";
  }

  grouping vlan-routed-top {
    description
      "Top-level grouping for routed vlan logical interfaces";

    container routed-vlan {
      description
        "Top-level container for routed vlan interfaces.  These
        logical interfaces are also known as SVI (switched virtual
        interface), IRB (integrated routing and bridging), RVI
        (routed VLAN interface)";

      container config {
        description
          "Configuration data for routed vlan interfaces";

        uses vlan-routed-config;
      }

      container state {

        config false;

        description
          "Operational state data ";

        uses vlan-routed-config;
        uses vlan-routed-state;
      }
    }
  }

  // data definition statements

  // augment statements

  augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
    "oc-if:subinterface" {
      description
        "Adds VLAN settings to individual subinterfaces";

    uses vlan-logical-top;
  }

  augment "/oc-if:interfaces/oc-if:interface/oc-if:config" {
    description
      "Adds TPID / ethertype setting for the base interface";

    uses vlan-tpid-config;
  }

  augment "/oc-if:interfaces/oc-if:interface/oc-if:state" {
    description
      "Adds TPID / ethertype opstate for the base interface";

    uses vlan-tpid-config;
    uses vlan-tpid-state;
  }

  augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet" {
    description
      "Adds VLAN settings to individual Ethernet interfaces";

    uses vlan-switched-top {
      when "oc-if:type = 'ift:ethernetCsmacd'" {
      description
        "Active when the interface is Ethernet";
      }
    }
  }

  augment "/oc-if:interfaces/oc-if:interface/oc-lag:aggregation" {
    description "Adds VLAN settings to a LAG interface";

    uses vlan-switched-top {
      when "oc-if:type = 'ift:ieee8023adLag'" {
        description
          "Active when the interface is a LAG";
      }
    }
  }

  augment "/oc-if:interfaces/oc-if:interface" {
    description
      "Adds configuration and state for routed VLAN interfaces";

    uses vlan-routed-top {
      when "current()/oc-if:config/oc-if:type = 'ift:l3ipvlan'" {
      description
        "Active when the interface is a logical interface providing
        L3 routing for VLANs";
      }
    }
  }


  // rpc statements

  // notification statements

}
