aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/yang/openconfig/openconfig-vlan-types@2018-02-14.yang
blob: 6d9ab55e11642c9dd5072983c319171cb9170ba5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
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";
  }

}