]> git.proxmox.com Git - ovs.git/blame - lib/meta-flow.h
json: Fix error message for corner case in json_string_unescape().
[ovs.git] / lib / meta-flow.h
CommitLineData
6a885fd0 1/*
d3cb080e 2 * Copyright (c) 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
6a885fd0
BP
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef META_FLOW_H
18#define META_FLOW_H 1
19
6ca00f6f
ETN
20#include <sys/types.h>
21#include <netinet/in.h>
6a885fd0 22#include <netinet/ip6.h>
abadfcb0 23#include "bitmap.h"
6a885fd0 24#include "flow.h"
816fd533 25#include "ofp-errors.h"
6a885fd0 26#include "packets.h"
7f98c44d 27#include "util.h"
6a885fd0 28
6a885fd0 29struct ds;
81a76618 30struct match;
6a885fd0 31
a4ce8b25
BP
32/* Open vSwitch fields
33 * ===================
34 *
35 * A "field" is a property of a packet. Most familiarly, "data fields" are
36 * fields that can be extracted from a packet.
37 *
38 * Some data fields are always present as a consequence of the basic networking
39 * technology in use. Ethernet is the assumed base technology for current
40 * versions of OpenFlow and Open vSwitch, so Ethernet header fields are always
41 * available.
42 *
43 * Other data fields are not always present. A packet contains ARP fields, for
44 * example, only when its Ethernet header indicates the Ethertype for ARP,
45 * 0x0806. We say that a field is "applicable" when it is it present in a
46 * packet, and "inapplicable" when it is not, and refer to the conditions that
47 * determine whether a field is applicable as "prerequisites". Some
48 * VLAN-related fields are a special case: these fields are always applicable,
49 * but have a designated value or bit that indicates whether a VLAN header is
50 * present, with the remaining values or bits indicating the VLAN header's
51 * content (if it is present). See MFF_VLAN_TCI for an example.
52 *
53 * Conceptually, an inapplicable field does not have a value, not even a
54 * nominal ``value'' such as all-zero-bits. In many circumstances, OpenFlow
55 * and Open vSwitch allow references only to applicable fields. For example,
56 * one may match a given field only if the match includes the field's
57 * prerequisite, e.g. matching an ARP field is only allowed if one also matches
58 * on Ethertype 0x0806.
59 *
60 * (Practically, however, OVS represents a field's value as some fixed member
61 * in its "struct flow", so accessing that member will obtain some value. Some
62 * members are used for more than one purpose, e.g. the "tp_src" member
63 * represents the TCP, UDP, and SCTP source port, so the value read may not
64 * even make sense. For this reason, it is important to know whether a field's
65 * prerequisites are satisfied before attempting to read it.)
66 *
67 * Sometimes a packet may contain multiple instances of a header. For example,
68 * a packet may contain multiple VLAN or MPLS headers, and tunnels can cause
69 * any data field to recur. OpenFlow and Open vSwitch do not address these
70 * cases uniformly. For VLAN and MPLS headers, only the outermost header is
71 * accessible, so that inner headers may be accessed only by ``popping''
72 * (removing) the outer header. (Open vSwitch supports only a single VLAN
73 * header in any case.) For tunnels, e.g. GRE or VXLAN, the outer header and
74 * inner headers are treated as different data fields.
75 *
76 * OpenFlow and Open vSwitch support some fields other than data fields.
77 * "Metadata fields" relate to the origin or treatment of a packet, but they
78 * are not extracted from the packet data itself. One example is the physical
79 * port on which a packet arrived at the switch. "Register fields" act like
80 * variables: they give an OpenFlow switch space for temporary storage while
81 * processing a packet. Existing metadata and register fields have no
82 * prerequisites.
83 *
84 * A field's value consists of an integral number of bytes. Most data fields
85 * are copied directly from protocol headers, e.g. at layer 2, MFF_ETH_SRC is
86 * copied from the Ethernet source address and MFF_ETH_DST from the destination
87 * address. Other data fields are copied from a packet with padding, usually
88 * with zeros and in the most significant positions (see e.g. MFF_MPLS_LABEL)
89 * but not always (see e.g. MFF_IP_DSCP). A final category of data fields is
90 * transformed in other ways as they are copied from the packets, to make them
91 * more useful for matching, e.g. MFF_IP_FRAG describes whether a packet is a
92 * fragment but it is not copied directly from the IP header.
93 *
94 *
95 * Field specifications
96 * ====================
97 *
98 * Each of the enumeration values below represents a field. The comments
99 * preceding each enum must be in a stylized form that is parsed at compile
100 * time by the extract-ofp-fields program. The comment itself consists of a
101 * series of paragraphs separate by blank lines. The paragraphs consist of:
102 *
103 * - The first paragraph gives the user-visible name of the field as a
104 * quoted string. This is the name used for parsing and formatting the
105 * field.
106 *
107 * For historical reasons, some fields have an additional name that is
108 * accepted as an alternative in parsing. This name, when there is one,
109 * is given as a quoted string in parentheses along with "aka". For
110 * example:
111 *
112 * "tun_id" (aka "tunnel_id").
113 *
114 * New fields should have only one name.
115 *
116 * - Any number of paragraphs of free text that describe the field. This
117 * is meant for human readers, so extract-ofp-fields ignores it.
118 *
119 * - A final paragraph that consists of a series of key-value pairs, one
120 * per line, in the form "key: value." where the period at the end of the
121 * line is a mandatory part of the syntax.
122 *
123 * Every field must specify the following key-value pairs:
124 *
125 * Type:
126 *
127 * The format and size of the field's value. Some possible values are
128 * generic:
129 *
130 * u8: A one-byte field.
131 * be16: A two-byte field.
132 * be32: A four-byte field.
133 * be64: An eight-byte field.
134 *
135 * The remaining values imply more about the value's semantics, though OVS
136 * does not currently take advantage of this additional information:
137 *
138 * MAC: A six-byte field whose value is an Ethernet address.
139 * IPv6: A 16-byte field whose value is an IPv6 address.
140 *
141 * Maskable:
142 *
143 * Either "bitwise", if OVS supports matching any subset of bits in the
144 * field, or "no", if OVS only supports matching or wildcarding the entire
145 * field.
146 *
147 * Formatting:
148 *
149 * Explains how a field's value is formatted and parsed for human
150 * consumption. Some of the options are fairly generally useful:
151 *
152 * decimal: Formats the value as a decimal number. On parsing, accepts
153 * decimal (with no prefix), hexadecimal with 0x prefix, or octal
154 * with 0 prefix.
155 *
156 * hexadecimal: Same as decimal except nonzero values are formatted in
157 * hex with 0x prefix. The default for parsing is *not* hexadecimal:
158 * only with a 0x prefix is the input in hexadecimal.
159 *
160 * Ethernet: Formats and accepts the common format xx:xx:xx:xx:xx:xx.
161 * 6-byte fields only.
162 *
163 * IPv4: Formats and accepts the common format w.x.y.z. 4-byte fields
164 * only.
165 *
166 * IPv6: Formats and accepts the common IPv6 formats. 16-byte fields
167 * only.
168 *
169 * OpenFlow 1.0 port: Accepts an OpenFlow well-known port name
170 * (e.g. "IN_PORT") in uppercase or lowercase, or a 16-bit port
171 * number in decimal. Formats ports using their well-known names in
172 * uppercase, or in decimal otherwise. 2-byte fields only.
173 *
174 * OpenFlow 1.1+ port: Same syntax as for OpenFlow 1.0 ports but for
175 * 4-byte OpenFlow 1.1+ port number fields.
176 *
177 * Others are very specific to particular fields:
178 *
179 * frag: One of the strings "no", "first", "later", "yes", "not_later"
180 * describing which IPv4/v6 fragments are matched.
181 *
182 * tunnel flags: Any number of the strings "df", "csum", "key", or
183 * "oam" separated by "|".
184 *
185 * TCP flags: See the description of tcp_flags in ovs-ofctl(8).
186 *
187 * Prerequisites:
188 *
189 * The field's prerequisites. The values should be straightfoward.
190 *
191 * Access:
192 *
193 * Either "read-only", for a field that cannot be changed via OpenFlow, or
194 * "read/write" for a modifiable field.
195 *
196 * NXM:
197 *
198 * If the field has an NXM field assignment, then this specifies the NXM
199 * name of the field (e.g. "NXM_OF_ETH_SRC"), followed by its nxm_type in
200 * parentheses, followed by "since v<x>.<y>" specifying the version of Open
201 * vSwitch that first supported this field in NXM (e.g. "since v1.1" if it
202 * was introduced in Open vSwitch 1.1).
203 *
204 * The NXM name must begin with NXM_OF_ or NXM_NX_. This allows OVS to
205 * determine the correct NXM class.
206 *
207 * If the field does not have an NXM field assignment, specify "none".
208 *
209 * OXM:
210 *
211 * If the field has an OXM field assignment, then this specifies the OXM
212 * name of the field (e.g. "OXM_OF_ETH_SRC"), followed by its nxm_type in
213 * parentheses, followed by "since OF<a>.<b> v<x>.<y>" specifying the
214 * versions of OpenFlow and Open vSwitch that first supported this field in
215 * OXM (e.g. "since OF1.3 and v1.10" if it was introduced in OpenFlow 1.3
216 * and first supported by Open vSwitch in version 1.10).
217 *
e6556fe3
BP
218 * Some fields have more than one OXM field assignment. For example,
219 * actset_output has an experimenter OXM assignment in OpenFlow 1.3 and a
220 * standard OXM assignment in OpenFlow 1.5. In such a case, specify both,
221 * separated by commas.
222 *
a4ce8b25
BP
223 * OVS uses the start of the OXM field name to determine the correct OXM
224 * class. To support a new OXM class, edit the mapping table in
225 * build-aux/extract-ofp-fields.
226 *
227 * If the field does not have an OXM field assignment, specify "none".
228 *
229 * The following key-value pairs are optional. Open vSwitch already supports
230 * all the fields to which they apply, so new fields should probably not
231 * include these pairs:
232 *
233 * OF1.0:
234 *
235 * Specify this as "exact match" if OpenFlow 1.0 can match or wildcard the
236 * entire field, or as "CIDR mask" if OpenFlow 1.0 can match any CIDR
237 * prefix of the field. (OpenFlow 1.0 did not support bitwise matching.)
238 * Omit, if OpenFlow 1.0 did not support this field.
239 *
240 * OF1.1:
241 *
242 * Specify this as "exact match" if OpenFlow 1.1 can match or wildcard the
243 * entire field, or as "bitwise" if OpenFlow 1.1 can match any subset of
244 * bits in the field. Omit, if OpenFlow 1.1 did not support this field.
245 *
246 * The following key-value pair is optional:
247 *
248 * Prefix lookup member:
249 *
250 * If this field makes sense for use with classifier_set_prefix_fields(),
251 * specify the name of the "struct flow" member that corresponds to the
252 * field.
253 *
254 * Finally, a few "register" fields have very similar names and purposes,
255 * e.g. MFF_REG0 through MFF_REG7. For these, the comments may be merged
256 * together using <N> as a metasyntactic variable for the numeric suffix.
257 * Lines in the comment that are specific to one of the particular fields by
258 * writing, e.g. <1>, to consider that line only for e.g. MFF_REG1.
259 */
260
7f98c44d 261enum OVS_PACKED_ENUM mf_field_id {
a4ce8b25
BP
262/* ## -------- ## */
263/* ## Metadata ## */
264/* ## -------- ## */
265
266 /* "dp_hash".
267 *
268 * Flow hash computed in the datapath. Internal use only, not programmable
269 * from controller.
270 *
508a9338
BP
271 * The OXM code point for this is an attempt to test OXM experimenter
272 * support, which is otherwise difficult to test due to the dearth of use
273 * out in the wild. Because controllers can't add flows that match on
274 * dp_hash, this doesn't commit OVS to supporting this OXM experimenter
275 * code point in the future.
276 *
a4ce8b25
BP
277 * Type: be32.
278 * Maskable: bitwise.
279 * Formatting: hexadecimal.
280 * Prerequisites: none.
281 * Access: read-only.
282 * NXM: NXM_NX_DP_HASH(35) since v2.2.
508a9338 283 * OXM: NXOXM_ET_DP_HASH(0) since OF1.5 and v2.4.
a4ce8b25
BP
284 */
285 MFF_DP_HASH,
286
287 /* "recirc_id".
288 *
289 * ID for recirculation. The value 0 is reserved for initially received
290 * packets. Internal use only, not programmable from controller.
291 *
292 * Type: be32.
293 * Maskable: no.
294 * Formatting: decimal.
295 * Prerequisites: none.
296 * Access: read-only.
297 * NXM: NXM_NX_RECIRC_ID(36) since v2.2.
298 * OXM: none.
299 */
300 MFF_RECIRC_ID,
301
18080541
BP
302 /* "conj_id".
303 *
304 * ID for "conjunction" actions. Please refer to ovs-ofctl(8)
305 * documentation of "conjunction" for details.
306 *
307 * Type: be32.
308 * Maskable: no.
309 * Formatting: decimal.
310 * Prerequisites: none.
311 * Access: read-only.
312 * NXM: NXM_NX_CONJ_ID(37) since v2.4.
313 * OXM: none. */
314 MFF_CONJ_ID,
315
a4ce8b25
BP
316 /* "tun_id" (aka "tunnel_id").
317 *
318 * The "key" or "tunnel ID" or "VNI" in a packet received via a keyed
319 * tunnel. For protocols in which the key is shorter than 64 bits, the key
320 * is stored in the low bits and the high bits are zeroed. For non-keyed
321 * tunnels and packets not received via a tunnel, the value is 0.
322 *
323 * Type: be64.
324 * Maskable: bitwise.
325 * Formatting: hexadecimal.
326 * Prerequisites: none.
327 * Access: read/write.
328 * NXM: NXM_NX_TUN_ID(16) since v1.1.
329 * OXM: OXM_OF_TUNNEL_ID(38) since OF1.3 and v1.10.
330 * Prefix lookup member: tunnel.tun_id.
331 */
332 MFF_TUN_ID,
333
334 /* "tun_src".
335 *
336 * The IPv4 source address in the outer IP header of a tunneled packet.
337 *
338 * For non-tunneled packets, the value is 0.
339 *
340 * Type: be32.
341 * Maskable: bitwise.
342 * Formatting: IPv4.
343 * Prerequisites: none.
344 * Access: read/write.
345 * NXM: NXM_NX_TUN_IPV4_SRC(31) since v2.0.
346 * OXM: none.
347 * Prefix lookup member: tunnel.ip_src.
348 */
349 MFF_TUN_SRC,
350
351 /* "tun_dst".
352 *
353 * The IPv4 destination address in the outer IP header of a tunneled
354 * packet.
355 *
356 * For non-tunneled packets, the value is 0.
357 *
358 * Type: be32.
359 * Maskable: bitwise.
360 * Formatting: IPv4.
361 * Prerequisites: none.
362 * Access: read/write.
363 * NXM: NXM_NX_TUN_IPV4_DST(32) since v2.0.
364 * OXM: none.
365 * Prefix lookup member: tunnel.ip_dst.
366 */
367 MFF_TUN_DST,
368
369 /* "tun_flags".
370 *
371 * Combination of FLOW_TNL_F_* bitmapped flags that indicate properties of
372 * a tunneled packet. Internal use only, not programmable from controller.
373 *
374 * For non-tunneled packets, the value is 0.
375 *
376 * Type: be16.
377 * Maskable: no.
378 * Formatting: tunnel flags.
379 * Prerequisites: none.
380 * Access: read-only.
381 * NXM: none.
382 * OXM: none.
383 */
384 MFF_TUN_FLAGS,
385
386 /* "tun_ttl".
387 *
388 * The TTL in the outer IP header of a tunneled packet. Internal use only,
389 * not programmable from controller.
390 *
391 * For non-tunneled packets, the value is 0.
392 *
393 * Type: u8.
394 * Maskable: no.
395 * Formatting: decimal.
396 * Prerequisites: none.
397 * Access: read-only.
398 * NXM: none.
399 * OXM: none.
400 */
401 MFF_TUN_TTL,
402
403 /* "tun_tos".
404 *
405 * The ToS value in the outer IP header of a tunneled packet. Internal use
406 * only, not programmable from controller.
407 *
408 * Type: u8.
409 * Maskable: no.
410 * Formatting: decimal.
411 * Prerequisites: none.
412 * Access: read-only.
413 * NXM: none.
414 * OXM: none.
415 */
416 MFF_TUN_TOS,
417
ac6073e3
MC
418 /* "tun_gbp_id".
419 *
420 * VXLAN Group Policy ID
421 *
422 * Type: be16.
423 * Maskable: bitwise.
424 * Formatting: decimal.
425 * Prerequisites: none.
426 * Access: read/write.
427 * NXM: NXM_NX_TUN_GBP_ID(38) since v2.4.
428 * OXM: none.
429 */
430 MFF_TUN_GBP_ID,
431
432 /* "tun_gbp_flags".
433 *
434 * VXLAN Group Policy flags
435 *
436 * Type: u8.
437 * Maskable: bitwise.
438 * Formatting: hexadecimal.
439 * Prerequisites: none.
440 * Access: read/write.
441 * NXM: NXM_NX_TUN_GBP_FLAGS(39) since v2.4.
442 * OXM: none.
443 */
444 MFF_TUN_GBP_FLAGS,
445
a4ce8b25
BP
446 /* "metadata".
447 *
448 * A scratch pad value standardized in OpenFlow 1.1+. Initially zero, at
449 * the beginning of the pipeline.
450 *
451 * Type: be64.
452 * Maskable: bitwise.
453 * Formatting: hexadecimal.
454 * Prerequisites: none.
455 * Access: read/write.
456 * NXM: none.
457 * OXM: OXM_OF_METADATA(2) since OF1.2 and v1.8.
458 * OF1.1: bitwise mask.
459 */
460 MFF_METADATA,
461
462 /* "in_port".
463 *
464 * 16-bit (OpenFlow 1.0) view of the physical or virtual port on which the
465 * packet was received.
466 *
467 * Type: be16.
468 * Maskable: no.
469 * Formatting: OpenFlow 1.0 port.
470 * Prerequisites: none.
471 * Access: read/write.
472 * NXM: NXM_OF_IN_PORT(0) since v1.1.
473 * OXM: none.
474 * OF1.0: exact match.
475 * OF1.1: exact match.
476 */
477 MFF_IN_PORT,
478
479 /* "in_port_oxm".
480 *
481 * 32-bit (OpenFlow 1.1+) view of the physical or virtual port on which the
482 * packet was received.
483 *
484 * Type: be32.
485 * Maskable: no.
486 * Formatting: OpenFlow 1.1+ port.
487 * Prerequisites: none.
488 * Access: read/write.
489 * NXM: none.
490 * OXM: OXM_OF_IN_PORT(0) since OF1.2 and v1.7.
491 * OF1.1: exact match.
492 */
493 MFF_IN_PORT_OXM,
494
c61f3870
BP
495 /* "actset_output".
496 *
497 * Type: be32.
498 * Maskable: no.
499 * Formatting: OpenFlow 1.1+ port.
500 * Prerequisites: none.
501 * Access: read-only.
502 * NXM: none.
503 * OXM: ONFOXM_ET_ACTSET_OUTPUT(43) since OF1.3 and v2.4,
504 * OXM_OF_ACTSET_OUTPUT(43) since OF1.5 and v2.4.
505 */
506 MFF_ACTSET_OUTPUT,
507
a4ce8b25
BP
508 /* "skb_priority".
509 *
510 * Designates the queue to which output will be directed. The value in
511 * this field is not necessarily the OpenFlow queue number; with the Linux
512 * kernel switch, it instead has a pair of subfields designating the
513 * "major" and "minor" numbers of a Linux kernel qdisc handle.
514 *
515 * This field is "semi-internal" in that it can be set with the "set_queue"
516 * action but not matched or read or written other ways.
517 *
518 * Type: be32.
519 * Maskable: no.
520 * Formatting: hexadecimal.
521 * Prerequisites: none.
522 * Access: read-only.
523 * NXM: none.
524 * OXM: none.
525 */
526 MFF_SKB_PRIORITY,
527
528 /* "pkt_mark".
529 *
530 * Packet metadata mark. The mark may be passed into other system
531 * components in order to facilitate interaction between subsystems. On
532 * Linux this corresponds to struct sk_buff's "skb_mark" member but the
533 * exact implementation is platform-dependent.
534 *
535 * Type: be32.
536 * Maskable: bitwise.
537 * Formatting: hexadecimal.
538 * Prerequisites: none.
539 * Access: read/write.
540 * NXM: NXM_NX_PKT_MARK(33) since v2.0.
541 * OXM: none.
542 */
543 MFF_PKT_MARK,
6a885fd0 544
771c99c1 545#if FLOW_N_REGS == 8
a4ce8b25
BP
546 /* "reg<N>".
547 *
548 * Nicira extension scratch pad register with initial value 0.
549 *
550 * Type: be32.
551 * Maskable: bitwise.
552 * Formatting: hexadecimal.
553 * Prerequisites: none.
554 * Access: read/write.
555 * NXM: NXM_NX_REG0(0) since v1.1. <0>
556 * NXM: NXM_NX_REG1(1) since v1.1. <1>
557 * NXM: NXM_NX_REG2(2) since v1.1. <2>
558 * NXM: NXM_NX_REG3(3) since v1.1. <3>
559 * NXM: NXM_NX_REG4(4) since v1.3. <4>
560 * NXM: NXM_NX_REG5(5) since v1.7. <5>
561 * NXM: NXM_NX_REG6(6) since v1.7. <6>
562 * NXM: NXM_NX_REG7(7) since v1.7. <7>
563 * OXM: none.
564 */
565 MFF_REG0,
566 MFF_REG1,
567 MFF_REG2,
568 MFF_REG3,
569 MFF_REG4,
570 MFF_REG5,
571 MFF_REG6,
572 MFF_REG7,
771c99c1
BP
573#else
574#error "Need to update MFF_REG* to match FLOW_N_REGS"
79fe0f46
BP
575#endif
576
577#if FLOW_N_XREGS == 4
a4ce8b25
BP
578 /* "xreg<N>".
579 *
d3cb080e 580 * OpenFlow 1.5 ``extended register". Each extended register
a4ce8b25
BP
581 * overlays two of the Nicira extension 32-bit registers: xreg0 overlays
582 * reg0 and reg1, with reg0 supplying the most-significant bits of xreg0
583 * and reg1 the least-significant. xreg1 similarly overlays reg2 and reg3,
584 * and so on.
585 *
10cb9842
BP
586 * These registers were introduced in OpenFlow 1.5, but EXT-244 in the ONF
587 * JIRA also publishes them as a (draft) OpenFlow extension to OpenFlow
588 * 1.3.
589 *
a4ce8b25
BP
590 * Type: be64.
591 * Maskable: bitwise.
592 * Formatting: hexadecimal.
593 * Prerequisites: none.
594 * Access: read/write.
595 * NXM: none.
10cb9842 596 * OXM: OXM_OF_PKT_REG<N>(<N>) since OF1.3 and v2.4.
a4ce8b25
BP
597 */
598 MFF_XREG0,
599 MFF_XREG1,
600 MFF_XREG2,
601 MFF_XREG3,
79fe0f46
BP
602#else
603#error "Need to update MFF_REG* to match FLOW_N_XREGS"
6a885fd0
BP
604#endif
605
a4ce8b25
BP
606/* ## -------- ## */
607/* ## Ethernet ## */
608/* ## -------- ## */
609
610 /* "eth_src" (aka "dl_src").
611 *
612 * Source address in Ethernet header.
613 *
614 * This field was not maskable before Open vSwitch 1.8.
615 *
616 * Type: MAC.
617 * Maskable: bitwise.
618 * Formatting: Ethernet.
619 * Prerequisites: none.
620 * Access: read/write.
621 * NXM: NXM_OF_ETH_SRC(2) since v1.1.
622 * OXM: OXM_OF_ETH_SRC(4) since OF1.2 and v1.7.
623 * OF1.0: exact match.
624 * OF1.1: bitwise mask.
625 */
626 MFF_ETH_SRC,
627
628 /* "eth_dst" (aka "dl_dst").
629 *
630 * Destination address in Ethernet header.
631 *
632 * Before Open vSwitch 1.8, the allowed masks were restricted to
633 * 00:00:00:00:00:00, fe:ff:ff:ff:ff:ff, 01:00:00:00:00:00,
634 * ff:ff:ff:ff:ff:ff.
635 *
636 * Type: MAC.
637 * Maskable: bitwise.
638 * Formatting: Ethernet.
639 * Prerequisites: none.
640 * Access: read/write.
641 * NXM: NXM_OF_ETH_DST(1) since v1.1.
642 * OXM: OXM_OF_ETH_DST(3) since OF1.2 and v1.7.
643 * OF1.0: exact match.
644 * OF1.1: bitwise mask.
645 */
646 MFF_ETH_DST,
647
648 /* "eth_type" (aka "dl_type").
649 *
650 * Packet's Ethernet type.
651 *
652 * For an Ethernet II packet this is taken from the Ethernet header. For
653 * an 802.2 LLC+SNAP header with OUI 00-00-00 this is taken from the SNAP
654 * header. A packet that has neither format has value 0x05ff
655 * (OFP_DL_TYPE_NOT_ETH_TYPE).
656 *
657 * For a packet with an 802.1Q header, this is the type of the encapsulated
658 * frame.
659 *
660 * Type: be16.
661 * Maskable: no.
662 * Formatting: hexadecimal.
663 * Prerequisites: none.
664 * Access: read-only.
665 * NXM: NXM_OF_ETH_TYPE(3) since v1.1.
666 * OXM: OXM_OF_ETH_TYPE(5) since OF1.2 and v1.7.
667 * OF1.0: exact match.
668 * OF1.1: exact match.
669 */
670 MFF_ETH_TYPE,
671
672/* ## ---- ## */
673/* ## VLAN ## */
674/* ## ---- ## */
675
676/* It looks odd for vlan_tci, vlan_vid, and vlan_pcp to say that they are
677 * supported in OF1.0 and OF1.1, since the detailed semantics of these fields
678 * only apply to NXM or OXM. They are marked as supported for exact matches in
679 * OF1.0 and OF1.1 because exact matches on those fields can be successfully
680 * translated into the OF1.0 and OF1.1 flow formats. */
681
682 /* "vlan_tci".
683 *
684 * 802.1Q TCI.
685 *
686 * For a packet with an 802.1Q header, this is the Tag Control Information
687 * (TCI) field, with the CFI bit forced to 1. For a packet with no 802.1Q
688 * header, this has value 0.
689 *
690 * This field can be used in various ways:
691 *
692 * - If it is not constrained at all, the nx_match matches packets
693 * without an 802.1Q header or with an 802.1Q header that has any TCI
694 * value.
695 *
696 * - Testing for an exact match with 0 matches only packets without an
697 * 802.1Q header.
698 *
699 * - Testing for an exact match with a TCI value with CFI=1 matches
700 * packets that have an 802.1Q header with a specified VID and PCP.
701 *
702 * - Testing for an exact match with a nonzero TCI value with CFI=0 does
703 * not make sense. The switch may reject this combination.
704 *
705 * - Testing with a specific VID and CFI=1, with nxm_mask=0x1fff, matches
706 * packets that have an 802.1Q header with that VID (and any PCP).
707 *
708 * - Testing with a specific PCP and CFI=1, with nxm_mask=0xf000, matches
709 * packets that have an 802.1Q header with that PCP (and any VID).
710 *
711 * - Testing with nxm_value=0, nxm_mask=0x0fff matches packets with no
712 * 802.1Q header or with an 802.1Q header with a VID of 0.
713 *
714 * - Testing with nxm_value=0, nxm_mask=0xe000 matches packets with no
715 * 802.1Q header or with an 802.1Q header with a PCP of 0.
716 *
717 * - Testing with nxm_value=0, nxm_mask=0xefff matches packets with no
718 * 802.1Q header or with an 802.1Q header with both VID and PCP of 0.
719 *
720 * Type: be16.
721 * Maskable: bitwise.
722 * Formatting: hexadecimal.
723 * Prerequisites: none.
724 * Access: read/write.
725 * NXM: NXM_OF_VLAN_TCI(4) since v1.1.
726 * OXM: none.
727 * OF1.0: exact match.
728 * OF1.1: exact match.
729 */
730 MFF_VLAN_TCI,
731
732 /* "dl_vlan" (OpenFlow 1.0).
733 *
734 * VLAN ID field. Zero if no 802.1Q header is present.
735 *
736 * Type: be16 (low 12 bits).
737 * Maskable: no.
738 * Formatting: decimal.
739 * Prerequisites: none.
740 * Access: read/write.
741 * NXM: none.
742 * OXM: none.
743 * OF1.0: exact match.
744 * OF1.1: exact match.
745 */
746 MFF_DL_VLAN,
747
748 /* "vlan_vid" (OpenFlow 1.2+).
749 *
750 * If an 802.1Q header is present, this field's value is 0x1000
751 * bitwise-or'd with the VLAN ID. If no 802.1Q is present, this field's
752 * value is 0.
753 *
754 * Type: be16 (low 12 bits).
755 * Maskable: bitwise.
756 * Formatting: decimal.
757 * Prerequisites: none.
758 * Access: read/write.
759 * NXM: none.
760 * OXM: OXM_OF_VLAN_VID(6) since OF1.2 and v1.7.
761 * OF1.0: exact match.
762 * OF1.1: exact match.
763 */
764 MFF_VLAN_VID,
765
766 /* "dl_vlan_pcp" (OpenFlow 1.0).
767 *
768 * VLAN priority (PCP) field. Zero if no 802.1Q header is present.
769 *
770 * Type: u8 (low 3 bits).
771 * Maskable: no.
772 * Formatting: decimal.
773 * Prerequisites: none.
774 * Access: read/write.
775 * NXM: none.
776 * OXM: none.
777 * OF1.0: exact match.
778 * OF1.1: exact match.
779 */
780 MFF_DL_VLAN_PCP,
781
782 /* "vlan_pcp" (OpenFlow 1.2+).
783 *
784 * VLAN priority (PCP) field. Zero if no 802.1Q header is present.
785 *
786 * Type: u8 (low 3 bits).
787 * Maskable: no.
788 * Formatting: decimal.
789 * Prerequisites: VLAN VID.
790 * Access: read/write.
791 * NXM: none.
792 * OXM: OXM_OF_VLAN_PCP(7) since OF1.2 and v1.7.
793 * OF1.0: exact match.
794 * OF1.1: exact match.
795 */
796 MFF_VLAN_PCP,
797
798/* ## ---- ## */
799/* ## MPLS ## */
800/* ## ---- ## */
801
802 /* "mpls_label".
803 *
804 * The outermost MPLS label, or 0 if no MPLS labels are present.
805 *
806 * Type: be32 (low 20 bits).
807 * Maskable: no.
808 * Formatting: decimal.
809 * Prerequisites: MPLS.
810 * Access: read/write.
811 * NXM: none.
812 * OXM: OXM_OF_MPLS_LABEL(34) since OF1.2 and v1.11.
813 * OF1.1: exact match.
814 */
815 MFF_MPLS_LABEL,
816
817 /* "mpls_tc".
818 *
819 * The outermost MPLS label's traffic control (TC) field, or 0 if no MPLS
820 * labels are present.
821 *
822 * Type: u8 (low 3 bits).
823 * Maskable: no.
824 * Formatting: decimal.
825 * Prerequisites: MPLS.
826 * Access: read/write.
827 * NXM: none.
828 * OXM: OXM_OF_MPLS_TC(35) since OF1.2 and v1.11.
829 * OF1.1: exact match.
830 */
831 MFF_MPLS_TC,
832
833 /* "mpls_bos".
834 *
835 * The outermost MPLS label's bottom of stack (BoS) field, or 0 if no MPLS
836 * labels are present.
837 *
838 * Type: u8 (low 1 bits).
839 * Maskable: no.
840 * Formatting: decimal.
841 * Prerequisites: MPLS.
842 * Access: read-only.
843 * NXM: none.
844 * OXM: OXM_OF_MPLS_BOS(36) since OF1.3 and v1.11.
845 */
846 MFF_MPLS_BOS,
847
848/* ## ---- ## */
849/* ## IPv4 ## */
850/* ## ---- ## */
851
852/* Update mf_is_l3_or_higher() if MFF_IPV4_SRC is no longer the first element
853 * for a field of layer 3 or higher */
854
855 /* "ip_src" (aka "nw_src").
856 *
857 * The source address in the IPv4 header.
858 *
859 * Before Open vSwitch 1.8, only CIDR masks were supported.
860 *
861 * Type: be32.
862 * Maskable: bitwise.
863 * Formatting: IPv4.
864 * Prerequisites: IPv4.
865 * Access: read/write.
866 * NXM: NXM_OF_IP_SRC(7) since v1.1.
867 * OXM: OXM_OF_IPV4_SRC(11) since OF1.2 and v1.7.
868 * OF1.0: CIDR mask.
869 * OF1.1: bitwise mask.
870 * Prefix lookup member: nw_src.
871 */
872 MFF_IPV4_SRC,
873
874 /* "ip_dst" (aka "nw_dst").
875 *
876 * The destination address in the IPv4 header.
877 *
878 * Before Open vSwitch 1.8, only CIDR masks were supported.
879 *
880 * Type: be32.
881 * Maskable: bitwise.
882 * Formatting: IPv4.
883 * Prerequisites: IPv4.
884 * Access: read/write.
885 * NXM: NXM_OF_IP_DST(8) since v1.1.
886 * OXM: OXM_OF_IPV4_DST(12) since OF1.2 and v1.7.
887 * OF1.0: CIDR mask.
888 * OF1.1: bitwise mask.
889 * Prefix lookup member: nw_dst.
890 */
891 MFF_IPV4_DST,
892
893/* ## ---- ## */
894/* ## IPv6 ## */
895/* ## ---- ## */
896
897 /* "ipv6_src".
898 *
899 * The source address in the IPv6 header.
900 *
901 * Type: IPv6.
902 * Maskable: bitwise.
903 * Formatting: IPv6.
904 * Prerequisites: IPv6.
905 * Access: read/write.
906 * NXM: NXM_NX_IPV6_SRC(19) since v1.1.
907 * OXM: OXM_OF_IPV6_SRC(26) since OF1.2 and v1.1.
908 * Prefix lookup member: ipv6_src.
909 */
910 MFF_IPV6_SRC,
911
912 /* "ipv6_dst".
913 *
914 * The destination address in the IPv6 header.
915 *
916 * Type: IPv6.
917 * Maskable: bitwise.
918 * Formatting: IPv6.
919 * Prerequisites: IPv6.
920 * Access: read/write.
921 * NXM: NXM_NX_IPV6_DST(20) since v1.1.
922 * OXM: OXM_OF_IPV6_DST(27) since OF1.2 and v1.1.
923 * Prefix lookup member: ipv6_dst.
924 */
925 MFF_IPV6_DST,
926
927 /* "ipv6_label".
928 *
929 * The flow label in the IPv6 header.
930 *
931 * Type: be32 (low 20 bits).
932 * Maskable: bitwise.
933 * Formatting: hexadecimal.
934 * Prerequisites: IPv6.
88cc95c1 935 * Access: read/write.
a4ce8b25
BP
936 * NXM: NXM_NX_IPV6_LABEL(27) since v1.4.
937 * OXM: OXM_OF_IPV6_FLABEL(28) since OF1.2 and v1.7.
938 */
939 MFF_IPV6_LABEL,
940
941/* ## ----------------------- ## */
942/* ## IPv4/IPv6 common fields ## */
943/* ## ----------------------- ## */
944
945 /* "nw_proto" (aka "ip_proto").
946 *
947 * The "protocol" byte in the IPv4 or IPv6 header.
948 *
949 * Type: u8.
950 * Maskable: no.
951 * Formatting: decimal.
952 * Prerequisites: IPv4/IPv6.
953 * Access: read-only.
954 * NXM: NXM_OF_IP_PROTO(6) since v1.1.
955 * OXM: OXM_OF_IP_PROTO(10) since OF1.2 and v1.7.
956 * OF1.0: exact match.
957 * OF1.1: exact match.
958 */
959 MFF_IP_PROTO,
960
961/* Both views of the DSCP below are marked as supported in all of the versions
962 * of OpenFlow because a match on either view can be successfully translated
963 * into every OpenFlow flow format. */
964
965 /* "nw_tos" (OpenFlow 1.0/1.1).
966 *
967 * The DSCP byte in the IPv4 header or the traffic class byte from the IPv6
968 * header, with the ECN bits forced to 0. (That is, bits 2-7 contain the
969 * type of service and bits 0-1 are zero.)
970 *
971 * Type: u8.
972 * Maskable: no.
973 * Formatting: decimal.
974 * Prerequisites: IPv4/IPv6.
975 * Access: read/write.
976 * NXM: NXM_OF_IP_TOS(5) since v1.1.
977 * OXM: none.
978 * OF1.0: exact match.
979 * OF1.1: exact match.
980 */
981 MFF_IP_DSCP,
982
983 /* "ip_dscp" (OpenFlow 1.2+).
984 *
985 * The DSCP byte in the IPv4 header or the traffic class byte from the IPv6
986 * header, shifted right 2 bits. (That is, bits 0-5 contain the type of
987 * service and bits 6-7 are zero.)
988 *
989 * Type: u8 (low 6 bits).
990 * Maskable: no.
991 * Formatting: decimal.
992 * Prerequisites: IPv4/IPv6.
993 * Access: read/write.
994 * NXM: none.
995 * OXM: OXM_OF_IP_DSCP(8) since OF1.2 and v1.7.
996 * OF1.0: exact match.
997 * OF1.1: exact match.
998 */
999 MFF_IP_DSCP_SHIFTED,
1000
1001 /* "nw_ecn" (aka "ip_ecn").
1002 *
1003 * The ECN bits in the IPv4 or IPv6 header.
1004 *
1005 * Type: u8 (low 2 bits).
1006 * Maskable: no.
1007 * Formatting: decimal.
1008 * Prerequisites: IPv4/IPv6.
1009 * Access: read/write.
1010 * NXM: NXM_NX_IP_ECN(28) since v1.4.
1011 * OXM: OXM_OF_IP_ECN(9) since OF1.2 and v1.7.
1012 */
1013 MFF_IP_ECN,
1014
1015 /* "nw_ttl".
1016 *
1017 * The time-to-live (TTL) in the IPv4 header or hop limit in the IPv6
1018 * header.
1019 *
1020 * Type: u8.
1021 * Maskable: no.
1022 * Formatting: decimal.
1023 * Prerequisites: IPv4/IPv6.
1024 * Access: read/write.
1025 * NXM: NXM_NX_IP_TTL(29) since v1.4.
1026 * OXM: none.
1027 */
1028 MFF_IP_TTL,
1029
1030 /* "ip_frag".
1031 *
1032 * IP fragment information.
1033 *
1034 * This field has three possible values:
1035 *
1036 * - A packet that is not an IP fragment has value 0.
1037 *
1038 * - A packet that is an IP fragment with offset 0 (the first fragment)
1039 * has bit 0 set and thus value 1.
1040 *
1041 * - A packet that is an IP fragment with nonzero offset has bits 0 and 1
1042 * set and thus value 3.
1043 *
1044 * NX_IP_FRAG_ANY and NX_IP_FRAG_LATER are declared to symbolically
1045 * represent the meanings of bits 0 and 1.
1046 *
1047 * The switch may reject matches against values that can never appear.
1048 *
1049 * It is important to understand how this field interacts with the OpenFlow
1050 * IP fragment handling mode:
1051 *
1052 * - In OFPC_FRAG_DROP mode, the OpenFlow switch drops all IP fragments
1053 * before they reach the flow table, so every packet that is available
1054 * for matching will have value 0 in this field.
1055 *
1056 * - Open vSwitch does not implement OFPC_FRAG_REASM mode, but if it did
1057 * then IP fragments would be reassembled before they reached the flow
1058 * table and again every packet available for matching would always
1059 * have value 0.
1060 *
1061 * - In OFPC_FRAG_NORMAL mode, all three values are possible, but
1062 * OpenFlow 1.0 says that fragments' transport ports are always 0, even
1063 * for the first fragment, so this does not provide much extra
1064 * information.
1065 *
1066 * - In OFPC_FRAG_NX_MATCH mode, all three values are possible. For
1067 * fragments with offset 0, Open vSwitch makes L4 header information
1068 * available.
1069 *
1070 * Type: u8 (low 2 bits).
1071 * Maskable: bitwise.
1072 * Formatting: frag.
1073 * Prerequisites: IPv4/IPv6.
1074 * Access: read-only.
1075 * NXM: NXM_NX_IP_FRAG(26) since v1.3.
1076 * OXM: none.
1077 */
1078 MFF_IP_FRAG,
1079
1080/* ## --- ## */
1081/* ## ARP ## */
1082/* ## --- ## */
1083
1084 /* "arp_op".
1085 *
1086 * ARP opcode.
1087 *
1088 * For an Ethernet+IP ARP packet, the opcode in the ARP header. Always 0
1089 * otherwise. Only ARP opcodes between 1 and 255 should be specified for
1090 * matching.
1091 *
1092 * Type: be16.
1093 * Maskable: no.
1094 * Formatting: decimal.
1095 * Prerequisites: ARP.
1096 * Access: read/write.
1097 * NXM: NXM_OF_ARP_OP(15) since v1.1.
1098 * OXM: OXM_OF_ARP_OP(21) since OF1.2 and v1.7.
1099 * OF1.0: exact match.
1100 * OF1.1: exact match.
1101 */
1102 MFF_ARP_OP,
1103
1104 /* "arp_spa".
1105 *
1106 * For an Ethernet+IP ARP packet, the source protocol (IPv4) address in the
1107 * ARP header. Always 0 otherwise.
1108 *
1109 * Before Open vSwitch 1.8, only CIDR masks were supported.
1110 *
1111 * Type: be32.
1112 * Maskable: bitwise.
1113 * Formatting: IPv4.
1114 * Prerequisites: ARP.
1115 * Access: read/write.
1116 * NXM: NXM_OF_ARP_SPA(16) since v1.1.
1117 * OXM: OXM_OF_ARP_SPA(22) since OF1.2 and v1.7.
1118 * OF1.0: CIDR mask.
1119 * OF1.1: bitwise mask.
1120 */
1121 MFF_ARP_SPA,
1122
1123 /* "arp_tpa".
1124 *
1125 * For an Ethernet+IP ARP packet, the target protocol (IPv4) address in the
1126 * ARP header. Always 0 otherwise.
1127 *
1128 * Before Open vSwitch 1.8, only CIDR masks were supported.
1129 *
1130 * Type: be32.
1131 * Maskable: bitwise.
1132 * Formatting: IPv4.
1133 * Prerequisites: ARP.
1134 * Access: read/write.
1135 * NXM: NXM_OF_ARP_TPA(17) since v1.1.
1136 * OXM: OXM_OF_ARP_TPA(23) since OF1.2 and v1.7.
1137 * OF1.0: CIDR mask.
1138 * OF1.1: bitwise mask.
1139 */
1140 MFF_ARP_TPA,
1141
1142 /* "arp_sha".
1143 *
1144 * For an Ethernet+IP ARP packet, the source hardware (Ethernet) address in
1145 * the ARP header. Always 0 otherwise.
1146 *
1147 * Type: MAC.
1148 * Maskable: bitwise.
1149 * Formatting: Ethernet.
1150 * Prerequisites: ARP.
1151 * Access: read/write.
1152 * NXM: NXM_NX_ARP_SHA(17) since v1.1.
1153 * OXM: OXM_OF_ARP_SHA(24) since OF1.2 and v1.7.
1154 */
1155 MFF_ARP_SHA,
1156
1157 /* "arp_tha".
1158 *
1159 * For an Ethernet+IP ARP packet, the target hardware (Ethernet) address in
1160 * the ARP header. Always 0 otherwise.
1161 *
1162 * Type: MAC.
1163 * Maskable: bitwise.
1164 * Formatting: Ethernet.
1165 * Prerequisites: ARP.
1166 * Access: read/write.
1167 * NXM: NXM_NX_ARP_THA(18) since v1.1.
1168 * OXM: OXM_OF_ARP_THA(25) since OF1.2 and v1.7.
1169 */
1170 MFF_ARP_THA,
1171
1172/* ## --- ## */
1173/* ## TCP ## */
1174/* ## --- ## */
1175
1176 /* "tcp_src" (aka "tp_src").
1177 *
1178 * TCP source port.
1179 *
1180 * Type: be16.
1181 * Maskable: bitwise.
1182 * Formatting: decimal.
1183 * Prerequisites: TCP.
1184 * Access: read/write.
1185 * NXM: NXM_OF_TCP_SRC(9) since v1.1.
1186 * OXM: OXM_OF_TCP_SRC(13) since OF1.2 and v1.7.
1187 * OF1.0: exact match.
1188 * OF1.1: exact match.
1189 */
1190 MFF_TCP_SRC,
1191
1192 /* "tcp_dst" (aka "tp_dst").
1193 *
1194 * TCP destination port.
1195 *
1196 * Type: be16.
1197 * Maskable: bitwise.
1198 * Formatting: decimal.
1199 * Prerequisites: TCP.
1200 * Access: read/write.
1201 * NXM: NXM_OF_TCP_DST(10) since v1.1.
1202 * OXM: OXM_OF_TCP_DST(14) since OF1.2 and v1.7.
1203 * OF1.0: exact match.
1204 * OF1.1: exact match.
1205 */
1206 MFF_TCP_DST,
1207
1208 /* "tcp_flags".
1209 *
1210 * Flags in the TCP header.
1211 *
1212 * TCP currently defines 9 flag bits, and additional 3 bits are reserved
1213 * (must be transmitted as zero). See RFCs 793, 3168, and 3540.
1214 *
1215 * Type: be16 (low 12 bits).
1216 * Maskable: bitwise.
1217 * Formatting: TCP flags.
1218 * Prerequisites: TCP.
1219 * Access: read-only.
1220 * NXM: NXM_NX_TCP_FLAGS(34) since v2.1.
847ddeab
BP
1221 * OXM: ONFOXM_ET_TCP_FLAGS(42) since OF1.3 and v2.4,
1222 * OXM_OF_TCP_FLAGS(42) since OF1.5 and v2.3.
a4ce8b25
BP
1223 */
1224 MFF_TCP_FLAGS,
1225
1226/* ## --- ## */
1227/* ## UDP ## */
1228/* ## --- ## */
1229
1230 /* "udp_src".
1231 *
1232 * UDP source port.
1233 *
1234 * Type: be16.
1235 * Maskable: bitwise.
1236 * Formatting: decimal.
1237 * Prerequisites: UDP.
1238 * Access: read/write.
1239 * NXM: NXM_OF_UDP_SRC(11) since v1.1.
1240 * OXM: OXM_OF_UDP_SRC(15) since OF1.2 and v1.7.
1241 * OF1.0: exact match.
1242 * OF1.1: exact match.
1243 */
1244 MFF_UDP_SRC,
1245
1246 /* "udp_dst".
1247 *
1248 * UDP destination port
1249 *
1250 * Type: be16.
1251 * Maskable: bitwise.
1252 * Formatting: decimal.
1253 * Prerequisites: UDP.
1254 * Access: read/write.
1255 * NXM: NXM_OF_UDP_DST(12) since v1.1.
1256 * OXM: OXM_OF_UDP_DST(16) since OF1.2 and v1.7.
1257 * OF1.0: exact match.
1258 * OF1.1: exact match.
1259 */
1260 MFF_UDP_DST,
1261
1262/* ## ---- ## */
1263/* ## SCTP ## */
1264/* ## ---- ## */
1265
1266 /* "sctp_src".
1267 *
1268 * SCTP source port.
1269 *
1270 * Type: be16.
1271 * Maskable: bitwise.
1272 * Formatting: decimal.
1273 * Prerequisites: SCTP.
1274 * Access: read/write.
1275 * NXM: none.
1276 * OXM: OXM_OF_SCTP_SRC(17) since OF1.2 and v2.0.
1277 * OF1.1: exact match.
1278 */
1279 MFF_SCTP_SRC,
1280
1281 /* "sctp_dst".
1282 *
1283 * SCTP destination port.
1284 *
1285 * Type: be16.
1286 * Maskable: bitwise.
1287 * Formatting: decimal.
1288 * Prerequisites: SCTP.
1289 * Access: read/write.
1290 * NXM: none.
1291 * OXM: OXM_OF_SCTP_DST(18) since OF1.2 and v2.0.
1292 * OF1.1: exact match.
1293 */
1294 MFF_SCTP_DST,
1295
1296/* ## ---- ## */
1297/* ## ICMP ## */
1298/* ## ---- ## */
1299
1300 /* "icmp_type".
1301 *
1302 * ICMPv4 type.
1303 *
1304 * Type: u8.
1305 * Maskable: no.
1306 * Formatting: decimal.
1307 * Prerequisites: ICMPv4.
1308 * Access: read-only.
1309 * NXM: NXM_OF_ICMP_TYPE(13) since v1.1.
1310 * OXM: OXM_OF_ICMPV4_TYPE(19) since OF1.2 and v1.7.
1311 * OF1.0: exact match.
1312 * OF1.1: exact match.
1313 */
1314 MFF_ICMPV4_TYPE,
1315
1316 /* "icmp_code".
1317 *
1318 * ICMPv4 code.
1319 *
1320 * Type: u8.
1321 * Maskable: no.
1322 * Formatting: decimal.
1323 * Prerequisites: ICMPv4.
1324 * Access: read-only.
1325 * NXM: NXM_OF_ICMP_CODE(14) since v1.1.
1326 * OXM: OXM_OF_ICMPV4_CODE(20) since OF1.2 and v1.7.
1327 * OF1.0: exact match.
1328 * OF1.1: exact match.
1329 */
1330 MFF_ICMPV4_CODE,
1331
1332 /* "icmpv6_type".
1333 *
1334 * ICMPv6 type.
1335 *
1336 * Type: u8.
1337 * Maskable: no.
1338 * Formatting: decimal.
1339 * Prerequisites: ICMPv6.
1340 * Access: read-only.
1341 * NXM: NXM_NX_ICMPV6_TYPE(21) since v1.1.
1342 * OXM: OXM_OF_ICMPV6_TYPE(29) since OF1.2 and v1.7.
1343 */
1344 MFF_ICMPV6_TYPE,
1345
1346 /* "icmpv6_code".
1347 *
1348 * ICMPv6 code.
1349 *
1350 * Type: u8.
1351 * Maskable: no.
1352 * Formatting: decimal.
1353 * Prerequisites: ICMPv6.
1354 * Access: read-only.
1355 * NXM: NXM_NX_ICMPV6_CODE(22) since v1.1.
1356 * OXM: OXM_OF_ICMPV6_CODE(30) since OF1.2 and v1.7.
1357 */
1358 MFF_ICMPV6_CODE,
1359
1360/* ## ------------------------- ## */
1361/* ## ICMPv6 Neighbor Discovery ## */
1362/* ## ------------------------- ## */
1363
1364 /* "nd_target".
1365 *
1366 * The target address in an IPv6 Neighbor Discovery message.
1367 *
1368 * Before Open vSwitch 1.8, only CIDR masks were supported.
1369 *
1370 * Type: IPv6.
1371 * Maskable: bitwise.
1372 * Formatting: IPv6.
1373 * Prerequisites: ND.
e60e935b 1374 * Access: read/write.
a4ce8b25
BP
1375 * NXM: NXM_NX_ND_TARGET(23) since v1.1.
1376 * OXM: OXM_OF_IPV6_ND_TARGET(31) since OF1.2 and v1.7.
1377 */
1378 MFF_ND_TARGET,
1379
1380 /* "nd_sll".
1381 *
1382 * The source link layer address in an IPv6 Neighbor Discovery message.
1383 *
1384 * Type: MAC.
1385 * Maskable: bitwise.
1386 * Formatting: Ethernet.
1387 * Prerequisites: ND solicit.
e60e935b 1388 * Access: read/write.
a4ce8b25
BP
1389 * NXM: NXM_NX_ND_SLL(24) since v1.1.
1390 * OXM: OXM_OF_IPV6_ND_SLL(32) since OF1.2 and v1.7.
1391 */
1392 MFF_ND_SLL,
1393
1394 /* "nd_tll".
1395 *
1396 * The target link layer address in an IPv6 Neighbor Discovery message.
1397 *
1398 * Type: MAC.
1399 * Maskable: bitwise.
1400 * Formatting: Ethernet.
1401 * Prerequisites: ND advert.
e60e935b 1402 * Access: read/write.
a4ce8b25
BP
1403 * NXM: NXM_NX_ND_TLL(25) since v1.1.
1404 * OXM: OXM_OF_IPV6_ND_TLL(33) since OF1.2 and v1.7.
1405 */
1406 MFF_ND_TLL,
6a885fd0
BP
1407
1408 MFF_N_IDS
1409};
1410
abadfcb0
BP
1411/* A set of mf_field_ids. */
1412struct mf_bitmap {
1413 unsigned long bm[BITMAP_N_LONGS(MFF_N_IDS)];
1414};
1415#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
1416
0d7e2fe4 1417/* Use this macro as CASE_MFF_REGS: in a switch statement to choose all of the
79fe0f46 1418 * MFF_REGn cases. */
771c99c1
BP
1419#if FLOW_N_REGS == 8
1420#define CASE_MFF_REGS \
0d7e2fe4
IY
1421 case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3: \
1422 case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7
1423#else
771c99c1 1424#error "Need to update CASE_MFF_REGS to match FLOW_N_REGS"
0d7e2fe4
IY
1425#endif
1426
79fe0f46
BP
1427/* Use this macro as CASE_MFF_XREGS: in a switch statement to choose all of the
1428 * MFF_REGn cases. */
1429#if FLOW_N_XREGS == 4
1430#define CASE_MFF_XREGS \
1431 case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3
1432#else
1433#error "Need to update CASE_MFF_XREGS to match FLOW_N_XREGS"
1434#endif
1435
6a885fd0
BP
1436/* Prerequisites for matching a field.
1437 *
1438 * A field may only be matched if the correct lower-level protocols are also
1439 * matched. For example, the TCP port may be matched only if the Ethernet type
1440 * matches ETH_TYPE_IP and the IP protocol matches IPPROTO_TCP. */
7f98c44d 1441enum OVS_PACKED_ENUM mf_prereqs {
6a885fd0
BP
1442 MFP_NONE,
1443
1444 /* L2 requirements. */
1445 MFP_ARP,
8069b0da 1446 MFP_VLAN_VID,
6a885fd0
BP
1447 MFP_IPV4,
1448 MFP_IPV6,
1449 MFP_IP_ANY,
1450
b02475c5
SH
1451 /* L2.5 requirements. */
1452 MFP_MPLS,
1453
6a885fd0
BP
1454 /* L2+L3 requirements. */
1455 MFP_TCP, /* On IPv4 or IPv6. */
1456 MFP_UDP, /* On IPv4 or IPv6. */
0d56eaf2 1457 MFP_SCTP, /* On IPv4 or IPv6. */
268a95e0 1458 MFP_ICMPV4,
6a885fd0 1459 MFP_ICMPV6,
6a885fd0
BP
1460
1461 /* L2+L3+L4 requirements. */
1462 MFP_ND,
1463 MFP_ND_SOLICIT,
1464 MFP_ND_ADVERT
1465};
1466
1467/* Forms of partial-field masking allowed for a field.
1468 *
1469 * Every field may be masked as a whole. */
7f98c44d 1470enum OVS_PACKED_ENUM mf_maskable {
6a885fd0
BP
1471 MFM_NONE, /* No sub-field masking. */
1472 MFM_FULLY, /* Every bit is individually maskable. */
6a885fd0
BP
1473};
1474
1475/* How to format or parse a field's value. */
7f98c44d 1476enum OVS_PACKED_ENUM mf_string {
6a885fd0
BP
1477 /* Integer formats.
1478 *
1479 * The particular MFS_* constant sets the output format. On input, either
1480 * decimal or hexadecimal (prefixed with 0x) is accepted. */
1481 MFS_DECIMAL,
1482 MFS_HEXADECIMAL,
1483
1484 /* Other formats. */
1485 MFS_ETHERNET,
1486 MFS_IPV4,
1487 MFS_IPV6,
a4ce8b25
BP
1488 MFS_OFP_PORT, /* 16-bit OpenFlow 1.0 port number or name. */
1489 MFS_OFP_PORT_OXM, /* 32-bit OpenFlow 1.1+ port number or name. */
4fe3445a
PS
1490 MFS_FRAG, /* no, yes, first, later, not_later */
1491 MFS_TNL_FLAGS, /* FLOW_TNL_F_* flags */
61bf6666 1492 MFS_TCP_FLAGS, /* TCP_* flags */
6a885fd0
BP
1493};
1494
1495struct mf_field {
1496 /* Identification. */
1497 enum mf_field_id id; /* MFF_*. */
1498 const char *name; /* Name of this field, e.g. "eth_type". */
1499 const char *extra_name; /* Alternate name, e.g. "dl_type", or NULL. */
1500
1501 /* Size.
1502 *
9df6a679
JP
1503 * Most fields have n_bytes * 8 == n_bits. There are a few exceptions:
1504 *
1505 * - "dl_vlan" is 2 bytes but only 12 bits.
1506 * - "dl_vlan_pcp" is 1 byte but only 3 bits.
1507 * - "is_frag" is 1 byte but only 2 bits.
fa8223b7 1508 * - "ipv6_label" is 4 bytes but only 20 bits.
b02475c5
SH
1509 * - "mpls_label" is 4 bytes but only 20 bits.
1510 * - "mpls_tc" is 1 byte but only 3 bits.
1511 * - "mpls_bos" is 1 byte but only 1 bit.
9df6a679 1512 */
6a885fd0
BP
1513 unsigned int n_bytes; /* Width of the field in bytes. */
1514 unsigned int n_bits; /* Number of significant bits in field. */
1515
1516 /* Properties. */
1517 enum mf_maskable maskable;
6a885fd0
BP
1518 enum mf_string string;
1519 enum mf_prereqs prereqs;
28da1f8f
BP
1520 bool writable; /* May be written by actions? */
1521
db0b6c29 1522 /* Usable protocols.
abadfcb0 1523 *
db0b6c29
JR
1524 * NXM and OXM are extensible, allowing later extensions to be sent in
1525 * earlier protocol versions, so this does not necessarily correspond to
1526 * the OpenFlow protocol version the field was introduced in.
1527 * Also, some field types are tranparently mapped to each other via the
1528 * struct flow (like vlan and dscp/tos fields), so each variant supports
abadfcb0
BP
1529 * all protocols.
1530 *
1531 * These are combinations of OFPUTIL_P_*. (They are not declared as type
1532 * enum ofputil_protocol because that would give meta-flow.h and ofp-util.h
1533 * a circular dependency.) */
a4ce8b25
BP
1534 uint32_t usable_protocols_exact; /* Matching or setting whole field. */
1535 uint32_t usable_protocols_cidr; /* Matching a CIDR mask in field. */
1536 uint32_t usable_protocols_bitwise; /* Matching arbitrary bits in field. */
13751fd8
JR
1537
1538 int flow_be32ofs; /* Field's be32 offset in "struct flow", if prefix tree
1539 * lookup is supported for the field, or -1. */
6a885fd0
BP
1540};
1541
1542/* The representation of a field's value. */
1543union mf_value {
6a885fd0 1544 struct in6_addr ipv6;
b283836c
JR
1545 uint8_t mac[ETH_ADDR_LEN];
1546 ovs_be64 be64;
1547 ovs_be32 be32;
1548 ovs_be16 be16;
1549 uint8_t u8;
6a885fd0 1550};
1b35df45 1551BUILD_ASSERT_DECL(sizeof(union mf_value) == 16);
6a885fd0 1552
f98e6e5b 1553/* An all-1-bits mf_value. Needs to be updated if struct mf_value grows.*/
b283836c 1554#define MF_EXACT_MASK_INITIALIZER { IN6ADDR_EXACT_INIT }
f98e6e5b 1555BUILD_ASSERT_DECL(sizeof(union mf_value) == sizeof(struct in6_addr));
b283836c 1556
816fd533
BP
1557/* Part of a field. */
1558struct mf_subfield {
1559 const struct mf_field *field;
1560 unsigned int ofs; /* Bit offset. */
1561 unsigned int n_bits; /* Number of bits. */
1562};
1563
1b35df45
BP
1564/* Data for some part of an mf_field.
1565 *
1566 * The data is stored "right-justified". For example, if "union mf_subvalue
1567 * value" contains NXM_OF_VLAN_TCI[0..11], then one could access the
1568 * corresponding data in value.be16[7] as the bits in the mask htons(0xfff). */
1569union mf_subvalue {
1570 uint8_t u8[16];
1571 ovs_be16 be16[8];
1572 ovs_be32 be32[4];
1573 ovs_be64 be64[2];
1574};
1575BUILD_ASSERT_DECL(sizeof(union mf_value) == sizeof (union mf_subvalue));
1576
bc65c25a
SH
1577/* An array of fields with values */
1578struct field_array {
1579 struct mf_bitmap used;
1580 union mf_value value[MFF_N_IDS];
1581};
1582
6a885fd0 1583/* Finding mf_fields. */
6a885fd0
BP
1584const struct mf_field *mf_from_name(const char *name);
1585
7f98c44d
JR
1586static inline const struct mf_field *
1587mf_from_id(enum mf_field_id id)
1588{
1589 extern const struct mf_field mf_fields[MFF_N_IDS];
1590 ovs_assert((unsigned int) id < MFF_N_IDS);
1591 return &mf_fields[id];
1592}
1593
6a885fd0
BP
1594/* Inspecting wildcarded bits. */
1595bool mf_is_all_wild(const struct mf_field *, const struct flow_wildcards *);
1596
1597bool mf_is_mask_valid(const struct mf_field *, const union mf_value *mask);
1598void mf_get_mask(const struct mf_field *, const struct flow_wildcards *,
1599 union mf_value *mask);
1600
1601/* Prerequisites. */
1602bool mf_are_prereqs_ok(const struct mf_field *, const struct flow *);
b283836c 1603void mf_mask_field_and_prereqs(const struct mf_field *, struct flow *mask);
0c4b9393
SH
1604void mf_bitmap_set_field_and_prereqs(const struct mf_field *mf, struct
1605 mf_bitmap *bm);
6a885fd0 1606
d4e78198
SH
1607static inline bool
1608mf_is_l3_or_higher(const struct mf_field *mf)
1609{
1610 return mf->id >= MFF_IPV4_SRC;
1611}
1612
6a885fd0
BP
1613/* Field values. */
1614bool mf_is_value_valid(const struct mf_field *, const union mf_value *value);
1615
1616void mf_get_value(const struct mf_field *, const struct flow *,
1617 union mf_value *value);
1618void mf_set_value(const struct mf_field *, const union mf_value *value,
81a76618 1619 struct match *);
28da1f8f
BP
1620void mf_set_flow_value(const struct mf_field *, const union mf_value *value,
1621 struct flow *);
7eb4b1f1
BP
1622void mf_set_flow_value_masked(const struct mf_field *,
1623 const union mf_value *value,
1624 const union mf_value *mask,
1625 struct flow *);
ccbe50f8 1626bool mf_is_zero(const struct mf_field *, const struct flow *);
5a0a5702 1627void mf_mask_field(const struct mf_field *, struct flow *);
6a885fd0 1628
81a76618 1629void mf_get(const struct mf_field *, const struct match *,
6a885fd0 1630 union mf_value *value, union mf_value *mask);
db0b6c29
JR
1631
1632/* Returns the set of usable protocols. */
1633enum ofputil_protocol mf_set(const struct mf_field *,
1634 const union mf_value *value,
1635 const union mf_value *mask,
1636 struct match *);
6a885fd0 1637
81a76618 1638void mf_set_wild(const struct mf_field *, struct match *);
6a885fd0 1639
816fd533 1640/* Subfields. */
9bab681f
IY
1641void mf_write_subfield_flow(const struct mf_subfield *,
1642 const union mf_subvalue *, struct flow *);
1b35df45 1643void mf_write_subfield(const struct mf_subfield *, const union mf_subvalue *,
81a76618 1644 struct match *);
1b35df45
BP
1645
1646void mf_read_subfield(const struct mf_subfield *, const struct flow *,
1647 union mf_subvalue *);
816fd533
BP
1648uint64_t mf_get_subfield(const struct mf_subfield *, const struct flow *);
1649
1b35df45 1650
816fd533
BP
1651enum ofperr mf_check_src(const struct mf_subfield *, const struct flow *);
1652enum ofperr mf_check_dst(const struct mf_subfield *, const struct flow *);
1653
6a885fd0
BP
1654/* Parsing and formatting. */
1655char *mf_parse(const struct mf_field *, const char *,
1656 union mf_value *value, union mf_value *mask);
1657char *mf_parse_value(const struct mf_field *, const char *, union mf_value *);
1658void mf_format(const struct mf_field *,
1659 const union mf_value *value, const union mf_value *mask,
1660 struct ds *);
9bab681f 1661void mf_format_subvalue(const union mf_subvalue *subvalue, struct ds *s);
6a885fd0 1662
bc65c25a
SH
1663/* Field Arrays. */
1664void field_array_set(enum mf_field_id id, const union mf_value *,
1665 struct field_array *);
1666
6a885fd0 1667#endif /* meta-flow.h */