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";
}
}
|