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 "3.0.0"; revision "2018-02-14" { description "Fix bug with name of 802.1ad identity."; reference "3.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_0X88A8 { base TPID_TYPES; description "TPID value for 802.1ad provider bridging, QinQ 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"; } }