-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
sonic-types.yang.j2
399 lines (355 loc) · 9.22 KB
/
sonic-types.yang.j2
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
module sonic-types {
yang-version 1.1;
namespace "http://github.com/sonic-net/sonic-head";
prefix sonic-types;
description "SONiC type for yang Models of SONiC OS";
/*
* Try to define only sonic specific types here. Rest can be written in
* respective YANG files.
*/
revision 2019-07-01 {
description "First Revision";
}
typedef ip-family {
type enumeration {
enum IPv4;
enum IPv6;
}
}
typedef sonic-ip4-prefix {
type string {
pattern
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+ '/(([0-9])|([1-2][0-9])|(3[0-2]))';
}
}
typedef sonic-ip6-prefix {
type string {
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+ '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+ '(/.+)';
}
}
typedef sonic-ip-prefix {
type union {
type sonic-ip4-prefix;
type sonic-ip6-prefix;
}
}
typedef admin_status {
type enumeration {
enum up;
enum down;
}
}
typedef packet_action{
type enumeration {
enum DROP;
enum ACCEPT;
enum FORWARD;
enum REDIRECT;
enum DO_NOT_NAT;
}
}
typedef ip_type {
type enumeration {
enum ANY;
enum IP;
enum NON_IP;
enum IPV4;
enum IPV6;
enum IPv4ANY;
enum NON_IP4;
enum IPv6ANY;
enum NON_IPv6;
enum ARP;
}
}
typedef acl_table_type {
type enumeration {
enum L2;
enum L3;
enum L3V6;
enum L3V4V6;
enum MIRROR;
enum MIRRORV6;
enum MIRROR_DSCP;
enum CTRLPLANE;
}
}
typedef hwsku {
type string {
length 1..255;
/* Should we list all hwsku here */
}
}
typedef vlan_tagging_mode {
type enumeration {
enum tagged;
enum untagged;
enum priority_tagged;
}
}
typedef crm_threshold_type {
type string {
length 1..64;
pattern "percentage|used|free|PERCENTAGE|USED|FREE";
}
}
typedef loopback_action {
type string {
pattern "drop|forward";
}
}
typedef admin_mode {
type enumeration {
enum enabled;
enum disabled;
}
}
typedef ip-protocol-type {
type enumeration {
enum TCP;
enum UDP;
}
}
typedef interface_type {
type enumeration {
enum CR;
enum CR2;
enum CR4;
enum CR8;
enum SR;
enum SR2;
enum SR4;
enum SR8;
enum LR;
enum LR4;
enum LR8;
enum KR;
enum KR4;
enum KR8;
enum CAUI;
enum GMII;
enum SFI;
enum XLAUI;
enum KR2;
enum CAUI4;
enum XAUI;
enum XFI;
enum XGMII;
enum none;
}
}
typedef oper-status {
type enumeration {
enum unknown;
enum up;
enum down;
}
description "Operational status of an entity such as Port, MCLAG etc";
}
typedef mode-status {
type enumeration {
enum enable;
enum disable;
}
description
"This type can be used where toggle functionality required.
For ex. IPv6-link-local-only, Dhcp-replay-link-select, SNMP traps etc";
}
typedef dhcp-relay-policy-action {
type enumeration {
enum discard;
enum append;
enum replace;
}
description "DHCP relay policy action value";
}
typedef percentage {
type uint8 {
range "0..100";
}
description
"Integer indicating a percentage value";
}
typedef tpid_type {
type string {
pattern "0x8100|0x9100|0x9200|0x88a8|0x88A8";
}
}
typedef meter_type {
type enumeration {
enum packets;
enum bytes;
}
}
typedef policer_mode {
type enumeration {
enum sr_tcm;
enum tr_tcm;
enum storm;
}
}
typedef policer_color_source {
type enumeration {
enum aware;
enum blind;
}
}
typedef policer_packet_action {
type enumeration {
enum drop;
enum forward;
enum copy;
enum copy_cancel;
enum trap;
enum log;
enum deny;
enum transit;
}
}
typedef boolean_type {
type string {
pattern "false|true|False|True";
}
}
typedef mac-addr-and-mask {
type string {
pattern "[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}|[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}/[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}";
}
}
typedef hostname {
type string {
length 1..63;
}
}
typedef vnid_type {
type uint32 {
range "1..16777215";
}
description
"VXLAN Network Identifier";
}
typedef tc_type {
type uint8 {
range "0..15" {
error-message "Invalid Traffic Class";
error-app-tag tc-invalid;
}
}
}
typedef process_name {
type string {
pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})' {
error-message "Invalid process_name.";
error-app-tag invalid-process-name;
}
length 1..32 {
error-message "Invalid length for process_name.";
error-app-tag invalid-process-name-length;
}
}
}
typedef ctr_name {
type string {
pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})' {
error-message "Invalid ctr_name.";
error-app-tag invalid-ctr-name;
}
length 1..32 {
error-message "Invalid length for ctr_name.";
error-app-tag invalid-ctr-name-length;
}
}
}
typedef hash-field {
description "Represents native hash field";
type enumeration {
enum IN_PORT;
enum DST_MAC;
enum SRC_MAC;
enum ETHERTYPE;
enum VLAN_ID;
enum IP_PROTOCOL;
enum DST_IP;
enum SRC_IP;
enum L4_DST_PORT;
enum L4_SRC_PORT;
enum INNER_DST_MAC;
enum INNER_SRC_MAC;
enum INNER_ETHERTYPE;
enum INNER_IP_PROTOCOL;
enum INNER_DST_IP;
enum INNER_DST_IPV4;
enum INNER_DST_IPV6;
enum INNER_SRC_IP;
enum INNER_SRC_IPV4;
enum INNER_SRC_IPV6;
enum INNER_L4_DST_PORT;
enum INNER_L4_SRC_PORT;
}
}
typedef hash-algorithm {
description "Represents hash algorithm";
type enumeration {
enum CRC;
enum XOR;
enum RANDOM;
enum CRC_32LO;
enum CRC_32HI;
enum CRC_CCITT;
enum CRC_XOR;
}
}
typedef timezone-name-type {
type string;
description
"A time zone name as used by the Time Zone Database,
sometimes referred to as the 'Olson Database'.
The exact set of valid values is an implementation-specific
matter. Client discovery of the exact set of time zone names
for a particular server is out of scope.";
reference
"BCP 175: Procedures for Maintaining the Time Zone Database";
}
typedef yes-no {
description "Yes/No configuration";
type enumeration {
enum yes;
enum no;
}
}
typedef on-off {
description "On/Off configuration";
type enumeration {
enum on;
enum off;
}
}
{% if yang_model_type == "cvl" %}
/* Required for CVL */
container operation {
description
"This definition is used internally by CVL and
is not exposed in NBI. Leaf 'operation' allows
evaluation of must expression for
CREATE/UPDATE/DELETE operation.";
leaf operation {
type enumeration {
enum NOP;
enum CREATE;
enum UPDATE;
enum DELETE;
}
}
}
{% else %}
{% endif %}
}