module openconfig-vlan-types {

  yang-version "1";

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

  prefix "oc-vlan-types";

  // import some basic types
  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";
  }

  // extension statements

  // feature statements

  // identity statements

  identity TPID_TYPES {
    description
      "Base identity for TPID values that can override the VLAN
      ethertype value";
  }

  identity TPID_0X8100 {
    base TPID_TYPES;
    description
      "Default TPID value for 802.1q single-tagged VLANs.";
  }

  identity TPID_0X8A88 {
    base TPID_TYPES;
    description
      "TPID value for 802.1ad provider bridging, Q-in-Q,
      or stacked VLANs";
  }

  identity TPID_0X9100 {
    base TPID_TYPES;
    description
      "Alternate TPID value";
  }

  identity TPID_0X9200 {
    base TPID_TYPES;
    description
      "Alternate TPID value";
  }

  // typedef statements

  // TODO: typedefs should be defined in a vlan-types.yang file.
  typedef vlan-id {
    type uint16 {
      range 1..4094;
    }
    description
      "Type definition representing a single-tagged VLAN";
  }

  typedef vlan-range {
    type string {
      // range specified as [lower]..[upper]
      pattern '^(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'       +
              '[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|'       +
              '40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{1,2}|' +
              '[1-9])$';
    }
    description
      "Type definition representing a range of single-tagged
      VLANs. A range is specified as x..y where x and y are
      valid VLAN IDs (1 <= vlan-id <= 4094). The range is
      assumed to be inclusive, such that any VLAN-ID matching
      x <= VLAN-ID <= y falls within the range.";
  }

  typedef qinq-id {
    type string {
      pattern
        '^(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'       +
        '[1-9][0-9]{1,2}|[1-9])\.'                    +
        '((409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'      +
        '[1-9][0-9]{1,2}|[1-9])|\*)$';
    }
    description
      "Type definition representing a single double-tagged/QinQ VLAN
      identifier. The format of a QinQ VLAN-ID is x.y where X is the
      'outer' VLAN identifier, and y is the 'inner' VLAN identifier.
      Both x and y must be valid VLAN IDs (1 <= vlan-id <= 4094)
      with the exception that y may be equal to a wildcard (*). In
      cases where y is set to the wildcard, this represents all inner
      VLAN identifiers where the outer VLAN identifier is equal to
      x";
  }

  typedef qinq-id-range {
    type union {
      type string {
        // match cases where the range is specified as x..y.z
        pattern
          '^(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
          '[1-9][0-9]{1,2}|[1-9])\.\.'               +
          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
          '[1-9][0-9]{1,2}|[1-9])\.'                 +
          '((409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'   +
          '[1-9][0-9]{1,2}|[1-9])|\*)$';
      }
      type string {
        // match cases where the range is specified as x.y..z
        pattern
          '^(\*|(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
          '[1-9][0-9]{1,2}|[1-9]))\.'                 +
          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
          '[1-9][0-9]{1,2}|[1-9])\.\.'               +
          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
          '[1-9][0-9]{1,2}|[1-9])$';
      }
    }
    description
      "A type definition representing a range of double-tagged/QinQ
      VLAN identifiers. The format of a QinQ VLAN-ID range can be
      specified in three formats. Where the range is outer VLAN IDs
      the range is specified as x..y.z. In this case outer VLAN
      identifiers meeting the criteria x <= outer-vlan-id <= y are
      accepted iff the inner VLAN-ID is equal to y - or any inner-tag
      if the wildcard is specified. Alternatively the range can be
      specified as x.y..z. In this case only VLANs with an
      outer-vlan-id qual to x are accepted (x may again be the
      wildcard). Inner VLANs are accepted if they meet the inequality
      y <= inner-vlan-id <= z.";
  }

  typedef vlan-mode-type {
    type enumeration {
      enum ACCESS {
        description "Access mode VLAN interface (No 802.1q header)";
      }
      enum TRUNK {
        description "Trunk mode VLAN interface";
      }
    }
    description
      "VLAN interface mode (trunk or access)";
  }

  typedef vlan-ref {
    type union {
      type vlan-id;
      type string;
      // TODO: string should be changed to leafref to reference
      // an existing VLAN.  this is not allowed in YANG 1.0 but
      // is expected to be in YANG 1.1.
      // type leafref {
      //  path "vlan:vlans/vlan:vlan/vlan:config/vlan:name";
      // }
    }
    description
      "Reference to a VLAN by name or id";
  }

}
