aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/yang/openconfig/openconfig-packet-match@2018-11-21.yang
blob: 510bc576867bdb6c970bfcaeb80420d9e4f39cce (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
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
module openconfig-packet-match {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/header-fields";

  prefix "oc-pkt-match";

  // import some basic types
  import openconfig-inet-types { prefix oc-inet; }
  import openconfig-yang-types { prefix oc-yang; }
  import openconfig-packet-match-types { prefix oc-pkt-match-types; }
  import openconfig-extensions { prefix oc-ext; }

  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This module defines data related to packet header fields
    used in matching operations, for example in ACLs.  When a
    field is omitted from a match expression, the effect is a
    wildcard ('any') for that field.";

  oc-ext:openconfig-version "1.1.1";

  revision "2018-11-21" {
    description
      "Add OpenConfig module metadata extensions.";
    reference "1.1.1";
  }

  revision "2017-12-15" {
    description
      "Add MPLS packet field matches";
    reference "1.1.0";
  }

  revision "2017-05-26" {
    description
      "Separated IP matches into AFs";
    reference "1.0.0";
  }

  revision "2016-08-08" {
    description
      "OpenConfig public release";
    reference "0.2.0";
  }

  revision "2016-04-27" {
    description
      "Initial revision";
    reference "TBD";
  }

  // OpenConfig specific extensions for module metadata.
  oc-ext:regexp-posix;
  oc-ext:catalog-organization "openconfig";
  oc-ext:origin "openconfig";


  // Physical Layer fields
  // ethernet-header
  grouping ethernet-header-config {
    description
      "Configuration data of fields in Ethernet header.";

    leaf source-mac {
      type oc-yang:mac-address;
      description
        "Source IEEE 802 MAC address.";
    }

    leaf source-mac-mask {
      type oc-yang:mac-address;
      description
        "Source IEEE 802 MAC address mask.";
    }

    leaf destination-mac {
      type oc-yang:mac-address;
      description
        "Destination IEEE 802 MAC address.";
    }

    leaf destination-mac-mask {
      type oc-yang:mac-address;
      description
        "Destination IEEE 802 MAC address mask.";
    }

    leaf ethertype {
      type oc-pkt-match-types:ethertype-type;
      description
        "Ethertype field to match in Ethernet packets";
    }
  }

  grouping ethernet-header-state {
    description
      "State information of fields in Ethernet header.";
  }

  grouping ethernet-header-top {
    description
      "Top level container for fields in Ethernet header.";

    container l2 {
      description
        "Ethernet header fields";

      container config {
        description
          "Configuration data";
        uses ethernet-header-config;
      }

      container state {
        config false;
        description
          "State Information.";
        uses ethernet-header-config;
        uses ethernet-header-state;
      }
    }
  }

  grouping mpls-header-top {
    description
      "Top-level container for fields in an MPLS header.";

    container mpls {
      description
        "MPLS header fields";

      container config {
        description
          "Configuration parameters relating to fields within
          the MPLS header.";
        uses mpls-header-config;
      }

      container state {
        config false;
        description
          "Operational state parameters relating to fields
          within the MPLS header";
        uses mpls-header-config;
      }
    }
  }

  grouping mpls-header-config {
    description
      "Configuration parameters relating to matches within
      MPLS header fields.";

    leaf traffic-class {
      type uint8 {
        range "0..7";
      }
      description
        "The value of the MPLS traffic class (TC) bits,
        formerly known as the EXP bits.";
    }
  }

  grouping ip-protocol-fields-common-config {
    description
      "IP protocol fields common to IPv4 and IPv6";

    leaf dscp {
      type oc-inet:dscp;
      description
        "Value of diffserv codepoint.";
    }

    leaf protocol {
      type oc-pkt-match-types:ip-protocol-type;
      description
        "The protocol carried in the IP packet, expressed either
        as its IP protocol number, or by a defined identity.";
    }

    leaf hop-limit {
      type uint8 {
        range 0..255;
      }
      description
        "The IP packet's hop limit -- known as TTL (in hops) in
        IPv4 packets, and hop limit in IPv6";
    }
  }

  // IP Layer
  // ip-protocol-fields
  grouping ipv4-protocol-fields-config {
    description
      "Configuration data of IP protocol fields
      for IPv4";

    leaf source-address {
      type oc-inet:ipv4-prefix;
      description
        "Source IPv4 address prefix.";
    }

    leaf destination-address {
      type oc-inet:ipv4-prefix;
      description
        "Destination IPv4 address prefix.";
    }

    uses ip-protocol-fields-common-config;

  }

  grouping ipv4-protocol-fields-state {
    description
      "State information of IP header fields for IPv4";
  }

  grouping ipv4-protocol-fields-top {
    description
      "IP header fields for IPv4";

    container ipv4 {
      description
        "Top level container for IPv4 match field data";

      container config {
        description
          "Configuration data for IPv4 match fields";
        uses ipv4-protocol-fields-config;
      }

      container state {
        config false;
        description
          "State information for IPv4 match fields";
        uses ipv4-protocol-fields-config;
        uses ipv4-protocol-fields-state;
      }
    }
  }

  grouping ipv6-protocol-fields-config {
    description
      "Configuration data for IPv6 match fields";

    leaf source-address {
      type oc-inet:ipv6-prefix;
      description
        "Source IPv6 address prefix.";
    }

    leaf source-flow-label {
      type oc-inet:ipv6-flow-label;
      description
        "Source IPv6 Flow label.";
    }

    leaf destination-address {
      type oc-inet:ipv6-prefix;
      description
        "Destination IPv6 address prefix.";
    }

    leaf destination-flow-label {
      type oc-inet:ipv6-flow-label;
      description
        "Destination IPv6 Flow label.";
    }

    uses ip-protocol-fields-common-config;
  }

  grouping ipv6-protocol-fields-state {
    description
      "Operational state data for IPv6 match fields";
  }

  grouping ipv6-protocol-fields-top {
    description
      "Top-level grouping for IPv6 match fields";

    container ipv6 {
      description
        "Top-level container for IPv6 match field data";

      container config {
        description
          "Configuration data for IPv6 match fields";

        uses ipv6-protocol-fields-config;
      }

      container state {

        config false;

        description
          "Operational state data for IPv6 match fields";

        uses ipv6-protocol-fields-config;
        uses ipv6-protocol-fields-state;
      }
    }
  }

  // Transport fields
  grouping transport-fields-config {
    description
      "Configuration data of transport-layer packet fields";

    leaf source-port {
      type oc-pkt-match-types:port-num-range;
      description
        "Source port or range";
    }

    leaf destination-port {
      type oc-pkt-match-types:port-num-range;
      description
        "Destination port or range";
    }

    leaf-list tcp-flags {
      type identityref {
        base oc-pkt-match-types:TCP_FLAGS;
      }
      description
        "List of TCP flags to match";
    }
  }

  grouping transport-fields-state {
    description
      "State data of transport-fields";
  }

  grouping transport-fields-top {
    description
      "Destination transport-fields top level grouping";

    container transport {
      description
        "Transport fields container";

      container config {
        description
          "Configuration data";
        uses transport-fields-config;
      }

      container state {
        config false;
        description
          "State data";
        uses transport-fields-config;
        uses transport-fields-state;
      }
    }
  }

}