01b129cbc673a3936b436cfc2616d44344138502
[cascardo/ovs.git] / lib / meta-flow.h
1 /*
2  * Copyright (c) 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
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
20 #include <sys/types.h>
21 #include <netinet/in.h>
22 #include <netinet/ip6.h>
23 #include "bitmap.h"
24 #include "flow.h"
25 #include "ofp-errors.h"
26 #include "packets.h"
27 #include "util.h"
28
29 struct ds;
30 struct match;
31
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  *
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  *
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
261 enum OVS_PACKED_ENUM mf_field_id {
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      *
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      *
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.
283      * OXM: NXOXM_ET_DP_HASH(0) since OF1.5 and v2.4.
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
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
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
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
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
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
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,
544
545 #if FLOW_N_REGS == 8
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,
573 #else
574 #error "Need to update MFF_REG* to match FLOW_N_REGS"
575 #endif
576
577 #if FLOW_N_XREGS == 4
578     /* "xreg<N>".
579      *
580      * OpenFlow 1.5 ``extended register".  Each extended register
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      *
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      *
590      * Type: be64.
591      * Maskable: bitwise.
592      * Formatting: hexadecimal.
593      * Prerequisites: none.
594      * Access: read/write.
595      * NXM: none.
596      * OXM: OXM_OF_PKT_REG<N>(<N>) since OF1.3 and v2.4.
597      */
598     MFF_XREG0,
599     MFF_XREG1,
600     MFF_XREG2,
601     MFF_XREG3,
602 #else
603 #error "Need to update MFF_REG* to match FLOW_N_XREGS"
604 #endif
605
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.
935      * Access: read/write.
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.
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.
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.
1374      * Access: read/write.
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.
1388      * Access: read/write.
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.
1402      * Access: read/write.
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,
1407
1408     MFF_N_IDS
1409 };
1410
1411 /* A set of mf_field_ids. */
1412 struct mf_bitmap {
1413     unsigned long bm[BITMAP_N_LONGS(MFF_N_IDS)];
1414 };
1415 #define MF_BITMAP_INITIALIZER { { [0] = 0 } }
1416
1417 /* Use this macro as CASE_MFF_REGS: in a switch statement to choose all of the
1418  * MFF_REGn cases. */
1419 #if FLOW_N_REGS == 8
1420 #define CASE_MFF_REGS                                           \
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
1424 #error "Need to update CASE_MFF_REGS to match FLOW_N_REGS"
1425 #endif
1426
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
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. */
1441 enum OVS_PACKED_ENUM mf_prereqs {
1442     MFP_NONE,
1443
1444     /* L2 requirements. */
1445     MFP_ARP,
1446     MFP_VLAN_VID,
1447     MFP_IPV4,
1448     MFP_IPV6,
1449     MFP_IP_ANY,
1450
1451     /* L2.5 requirements. */
1452     MFP_MPLS,
1453
1454     /* L2+L3 requirements. */
1455     MFP_TCP,                    /* On IPv4 or IPv6. */
1456     MFP_UDP,                    /* On IPv4 or IPv6. */
1457     MFP_SCTP,                   /* On IPv4 or IPv6. */
1458     MFP_ICMPV4,
1459     MFP_ICMPV6,
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. */
1470 enum OVS_PACKED_ENUM mf_maskable {
1471     MFM_NONE,                   /* No sub-field masking. */
1472     MFM_FULLY,                  /* Every bit is individually maskable. */
1473 };
1474
1475 /* How to format or parse a field's value. */
1476 enum OVS_PACKED_ENUM mf_string {
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,
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. */
1490     MFS_FRAG,                   /* no, yes, first, later, not_later */
1491     MFS_TNL_FLAGS,              /* FLOW_TNL_F_* flags */
1492     MFS_TCP_FLAGS,              /* TCP_* flags */
1493 };
1494
1495 struct 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      *
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.
1508      *     - "ipv6_label" is 4 bytes but only 20 bits.
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.
1512      */
1513     unsigned int n_bytes;       /* Width of the field in bytes. */
1514     unsigned int n_bits;        /* Number of significant bits in field. */
1515     bool variable_len;          /* Length is variable, if so width is max. */
1516
1517     /* Properties. */
1518     enum mf_maskable maskable;
1519     enum mf_string string;
1520     enum mf_prereqs prereqs;
1521     bool writable;              /* May be written by actions? */
1522
1523     /* Usable protocols.
1524      *
1525      * NXM and OXM are extensible, allowing later extensions to be sent in
1526      * earlier protocol versions, so this does not necessarily correspond to
1527      * the OpenFlow protocol version the field was introduced in.
1528      * Also, some field types are tranparently mapped to each other via the
1529      * struct flow (like vlan and dscp/tos fields), so each variant supports
1530      * all protocols.
1531      *
1532      * These are combinations of OFPUTIL_P_*.  (They are not declared as type
1533      * enum ofputil_protocol because that would give meta-flow.h and ofp-util.h
1534      * a circular dependency.) */
1535     uint32_t usable_protocols_exact;   /* Matching or setting whole field. */
1536     uint32_t usable_protocols_cidr;    /* Matching a CIDR mask in field. */
1537     uint32_t usable_protocols_bitwise; /* Matching arbitrary bits in field. */
1538
1539     int flow_be32ofs;  /* Field's be32 offset in "struct flow", if prefix tree
1540                         * lookup is supported for the field, or -1. */
1541 };
1542
1543 /* The representation of a field's value. */
1544 union mf_value {
1545     uint8_t tun_metadata[128];
1546     struct in6_addr ipv6;
1547     uint8_t mac[ETH_ADDR_LEN];
1548     ovs_be64 be64;
1549     ovs_be32 be32;
1550     ovs_be16 be16;
1551     uint8_t u8;
1552 };
1553 BUILD_ASSERT_DECL(sizeof(union mf_value) == 128);
1554
1555 /* Part of a field. */
1556 struct mf_subfield {
1557     const struct mf_field *field;
1558     unsigned int ofs;           /* Bit offset. */
1559     unsigned int n_bits;        /* Number of bits. */
1560 };
1561
1562 /* Data for some part of an mf_field.
1563  *
1564  * The data is stored "right-justified".  For example, if "union mf_subvalue
1565  * value" contains NXM_OF_VLAN_TCI[0..11], then one could access the
1566  * corresponding data in value.be16[7] as the bits in the mask htons(0xfff). */
1567 union mf_subvalue {
1568     /* Access to full data. */
1569     uint8_t u8[128];
1570     ovs_be16 be16[64];
1571     ovs_be32 be32[32];
1572     ovs_be64 be64[16];
1573
1574     /* Convenient access to just least-significant bits in various forms. */
1575     struct {
1576         ovs_be64 dummy_integer[15];
1577         ovs_be64 integer;
1578     };
1579     struct {
1580         uint8_t dummy_mac[122];
1581         uint8_t mac[6];
1582     };
1583     struct {
1584         ovs_be32 dummy_ipv4[31];
1585         ovs_be32 ipv4;
1586     };
1587     struct {
1588         struct in6_addr dummy_ipv6[7];
1589         struct in6_addr ipv6;
1590     };
1591 };
1592 BUILD_ASSERT_DECL(sizeof(union mf_value) == sizeof (union mf_subvalue));
1593
1594 bool mf_subvalue_intersect(const union mf_subvalue *a_value,
1595                            const union mf_subvalue *a_mask,
1596                            const union mf_subvalue *b_value,
1597                            const union mf_subvalue *b_mask,
1598                            union mf_subvalue *dst_value,
1599                            union mf_subvalue *dst_mask);
1600 int mf_subvalue_width(const union mf_subvalue *);
1601 void mf_subvalue_shift(union mf_subvalue *, int n);
1602
1603 /* An array of fields with values */
1604 struct field_array {
1605     struct mf_bitmap used;
1606     union mf_value value[MFF_N_IDS];
1607 };
1608
1609 /* Finding mf_fields. */
1610 const struct mf_field *mf_from_name(const char *name);
1611
1612 static inline const struct mf_field *
1613 mf_from_id(enum mf_field_id id)
1614 {
1615     extern const struct mf_field mf_fields[MFF_N_IDS];
1616     ovs_assert((unsigned int) id < MFF_N_IDS);
1617     return &mf_fields[id];
1618 }
1619
1620 /* Inspecting wildcarded bits. */
1621 bool mf_is_all_wild(const struct mf_field *, const struct flow_wildcards *);
1622
1623 bool mf_is_mask_valid(const struct mf_field *, const union mf_value *mask);
1624 void mf_get_mask(const struct mf_field *, const struct flow_wildcards *,
1625                  union mf_value *mask);
1626
1627 /* Prerequisites. */
1628 bool mf_are_prereqs_ok(const struct mf_field *, const struct flow *);
1629 void mf_mask_field_and_prereqs(const struct mf_field *, struct flow *mask);
1630 void mf_bitmap_set_field_and_prereqs(const struct mf_field *mf, struct
1631                                      mf_bitmap *bm);
1632
1633 static inline bool
1634 mf_is_l3_or_higher(const struct mf_field *mf)
1635 {
1636     return mf->id >= MFF_IPV4_SRC;
1637 }
1638
1639 /* Field values. */
1640 bool mf_is_value_valid(const struct mf_field *, const union mf_value *value);
1641
1642 void mf_get_value(const struct mf_field *, const struct flow *,
1643                   union mf_value *value);
1644 void mf_set_value(const struct mf_field *, const union mf_value *value,
1645                   struct match *);
1646 void mf_set_flow_value(const struct mf_field *, const union mf_value *value,
1647                        struct flow *);
1648 void mf_set_flow_value_masked(const struct mf_field *,
1649                               const union mf_value *value,
1650                               const union mf_value *mask,
1651                               struct flow *);
1652 bool mf_is_zero(const struct mf_field *, const struct flow *);
1653 void mf_mask_field(const struct mf_field *, struct flow *);
1654 int mf_field_len(const struct mf_field *, const union mf_value *value,
1655                  const union mf_value *mask);
1656
1657 void mf_get(const struct mf_field *, const struct match *,
1658             union mf_value *value, union mf_value *mask);
1659
1660 /* Returns the set of usable protocols. */
1661 enum ofputil_protocol mf_set(const struct mf_field *,
1662                              const union mf_value *value,
1663                              const union mf_value *mask,
1664                              struct match *);
1665
1666 void mf_set_wild(const struct mf_field *, struct match *);
1667
1668 /* Subfields. */
1669 void mf_write_subfield_flow(const struct mf_subfield *,
1670                             const union mf_subvalue *, struct flow *);
1671 void mf_write_subfield(const struct mf_subfield *, const union mf_subvalue *,
1672                        struct match *);
1673 void mf_mask_subfield(const struct mf_field *,
1674                       const union mf_subvalue *value,
1675                       const union mf_subvalue *mask,
1676                       struct match *);
1677
1678 void mf_read_subfield(const struct mf_subfield *, const struct flow *,
1679                       union mf_subvalue *);
1680 uint64_t mf_get_subfield(const struct mf_subfield *, const struct flow *);
1681
1682
1683 enum ofperr mf_check_src(const struct mf_subfield *, const struct flow *);
1684 enum ofperr mf_check_dst(const struct mf_subfield *, const struct flow *);
1685
1686 /* Parsing and formatting. */
1687 char *mf_parse(const struct mf_field *, const char *,
1688                union mf_value *value, union mf_value *mask);
1689 char *mf_parse_value(const struct mf_field *, const char *, union mf_value *);
1690 void mf_format(const struct mf_field *,
1691                const union mf_value *value, const union mf_value *mask,
1692                struct ds *);
1693 void mf_format_subvalue(const union mf_subvalue *subvalue, struct ds *s);
1694
1695 /* Field Arrays. */
1696 void field_array_set(enum mf_field_id id, const union mf_value *,
1697                      struct field_array *);
1698
1699 #endif /* meta-flow.h */