]> git.proxmox.com Git - mirror_ovs.git/blob - lib/meta-flow.h
ofp-print: Print bucket ids of OpenFlow 1.5 group messages.
[mirror_ovs.git] / lib / meta-flow.h
1 /*
2 * Copyright (c) 2011, 2012, 2013, 2014 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 /* "tun_id" (aka "tunnel_id").
303 *
304 * The "key" or "tunnel ID" or "VNI" in a packet received via a keyed
305 * tunnel. For protocols in which the key is shorter than 64 bits, the key
306 * is stored in the low bits and the high bits are zeroed. For non-keyed
307 * tunnels and packets not received via a tunnel, the value is 0.
308 *
309 * Type: be64.
310 * Maskable: bitwise.
311 * Formatting: hexadecimal.
312 * Prerequisites: none.
313 * Access: read/write.
314 * NXM: NXM_NX_TUN_ID(16) since v1.1.
315 * OXM: OXM_OF_TUNNEL_ID(38) since OF1.3 and v1.10.
316 * Prefix lookup member: tunnel.tun_id.
317 */
318 MFF_TUN_ID,
319
320 /* "tun_src".
321 *
322 * The IPv4 source address in the outer IP header of a tunneled packet.
323 *
324 * For non-tunneled packets, the value is 0.
325 *
326 * Type: be32.
327 * Maskable: bitwise.
328 * Formatting: IPv4.
329 * Prerequisites: none.
330 * Access: read/write.
331 * NXM: NXM_NX_TUN_IPV4_SRC(31) since v2.0.
332 * OXM: none.
333 * Prefix lookup member: tunnel.ip_src.
334 */
335 MFF_TUN_SRC,
336
337 /* "tun_dst".
338 *
339 * The IPv4 destination address in the outer IP header of a tunneled
340 * packet.
341 *
342 * For non-tunneled packets, the value is 0.
343 *
344 * Type: be32.
345 * Maskable: bitwise.
346 * Formatting: IPv4.
347 * Prerequisites: none.
348 * Access: read/write.
349 * NXM: NXM_NX_TUN_IPV4_DST(32) since v2.0.
350 * OXM: none.
351 * Prefix lookup member: tunnel.ip_dst.
352 */
353 MFF_TUN_DST,
354
355 /* "tun_flags".
356 *
357 * Combination of FLOW_TNL_F_* bitmapped flags that indicate properties of
358 * a tunneled packet. Internal use only, not programmable from controller.
359 *
360 * For non-tunneled packets, the value is 0.
361 *
362 * Type: be16.
363 * Maskable: no.
364 * Formatting: tunnel flags.
365 * Prerequisites: none.
366 * Access: read-only.
367 * NXM: none.
368 * OXM: none.
369 */
370 MFF_TUN_FLAGS,
371
372 /* "tun_ttl".
373 *
374 * The TTL in the outer IP header of a tunneled packet. Internal use only,
375 * not programmable from controller.
376 *
377 * For non-tunneled packets, the value is 0.
378 *
379 * Type: u8.
380 * Maskable: no.
381 * Formatting: decimal.
382 * Prerequisites: none.
383 * Access: read-only.
384 * NXM: none.
385 * OXM: none.
386 */
387 MFF_TUN_TTL,
388
389 /* "tun_tos".
390 *
391 * The ToS value in the outer IP header of a tunneled packet. Internal use
392 * only, not programmable from controller.
393 *
394 * Type: u8.
395 * Maskable: no.
396 * Formatting: decimal.
397 * Prerequisites: none.
398 * Access: read-only.
399 * NXM: none.
400 * OXM: none.
401 */
402 MFF_TUN_TOS,
403
404 /* "metadata".
405 *
406 * A scratch pad value standardized in OpenFlow 1.1+. Initially zero, at
407 * the beginning of the pipeline.
408 *
409 * Type: be64.
410 * Maskable: bitwise.
411 * Formatting: hexadecimal.
412 * Prerequisites: none.
413 * Access: read/write.
414 * NXM: none.
415 * OXM: OXM_OF_METADATA(2) since OF1.2 and v1.8.
416 * OF1.1: bitwise mask.
417 */
418 MFF_METADATA,
419
420 /* "in_port".
421 *
422 * 16-bit (OpenFlow 1.0) view of the physical or virtual port on which the
423 * packet was received.
424 *
425 * Type: be16.
426 * Maskable: no.
427 * Formatting: OpenFlow 1.0 port.
428 * Prerequisites: none.
429 * Access: read/write.
430 * NXM: NXM_OF_IN_PORT(0) since v1.1.
431 * OXM: none.
432 * OF1.0: exact match.
433 * OF1.1: exact match.
434 */
435 MFF_IN_PORT,
436
437 /* "in_port_oxm".
438 *
439 * 32-bit (OpenFlow 1.1+) view of the physical or virtual port on which the
440 * packet was received.
441 *
442 * Type: be32.
443 * Maskable: no.
444 * Formatting: OpenFlow 1.1+ port.
445 * Prerequisites: none.
446 * Access: read/write.
447 * NXM: none.
448 * OXM: OXM_OF_IN_PORT(0) since OF1.2 and v1.7.
449 * OF1.1: exact match.
450 */
451 MFF_IN_PORT_OXM,
452
453 /* "actset_output".
454 *
455 * Type: be32.
456 * Maskable: no.
457 * Formatting: OpenFlow 1.1+ port.
458 * Prerequisites: none.
459 * Access: read-only.
460 * NXM: none.
461 * OXM: ONFOXM_ET_ACTSET_OUTPUT(43) since OF1.3 and v2.4,
462 * OXM_OF_ACTSET_OUTPUT(43) since OF1.5 and v2.4.
463 */
464 MFF_ACTSET_OUTPUT,
465
466 /* "skb_priority".
467 *
468 * Designates the queue to which output will be directed. The value in
469 * this field is not necessarily the OpenFlow queue number; with the Linux
470 * kernel switch, it instead has a pair of subfields designating the
471 * "major" and "minor" numbers of a Linux kernel qdisc handle.
472 *
473 * This field is "semi-internal" in that it can be set with the "set_queue"
474 * action but not matched or read or written other ways.
475 *
476 * Type: be32.
477 * Maskable: no.
478 * Formatting: hexadecimal.
479 * Prerequisites: none.
480 * Access: read-only.
481 * NXM: none.
482 * OXM: none.
483 */
484 MFF_SKB_PRIORITY,
485
486 /* "pkt_mark".
487 *
488 * Packet metadata mark. The mark may be passed into other system
489 * components in order to facilitate interaction between subsystems. On
490 * Linux this corresponds to struct sk_buff's "skb_mark" member but the
491 * exact implementation is platform-dependent.
492 *
493 * Type: be32.
494 * Maskable: bitwise.
495 * Formatting: hexadecimal.
496 * Prerequisites: none.
497 * Access: read/write.
498 * NXM: NXM_NX_PKT_MARK(33) since v2.0.
499 * OXM: none.
500 */
501 MFF_PKT_MARK,
502
503 #if FLOW_N_REGS == 8
504 /* "reg<N>".
505 *
506 * Nicira extension scratch pad register with initial value 0.
507 *
508 * Type: be32.
509 * Maskable: bitwise.
510 * Formatting: hexadecimal.
511 * Prerequisites: none.
512 * Access: read/write.
513 * NXM: NXM_NX_REG0(0) since v1.1. <0>
514 * NXM: NXM_NX_REG1(1) since v1.1. <1>
515 * NXM: NXM_NX_REG2(2) since v1.1. <2>
516 * NXM: NXM_NX_REG3(3) since v1.1. <3>
517 * NXM: NXM_NX_REG4(4) since v1.3. <4>
518 * NXM: NXM_NX_REG5(5) since v1.7. <5>
519 * NXM: NXM_NX_REG6(6) since v1.7. <6>
520 * NXM: NXM_NX_REG7(7) since v1.7. <7>
521 * OXM: none.
522 */
523 MFF_REG0,
524 MFF_REG1,
525 MFF_REG2,
526 MFF_REG3,
527 MFF_REG4,
528 MFF_REG5,
529 MFF_REG6,
530 MFF_REG7,
531 #else
532 #error "Need to update MFF_REG* to match FLOW_N_REGS"
533 #endif
534
535 #if FLOW_N_XREGS == 4
536 /* "xreg<N>".
537 *
538 * OpenFlow 1.5 (draft) ``extended register". Each extended register
539 * overlays two of the Nicira extension 32-bit registers: xreg0 overlays
540 * reg0 and reg1, with reg0 supplying the most-significant bits of xreg0
541 * and reg1 the least-significant. xreg1 similarly overlays reg2 and reg3,
542 * and so on.
543 *
544 * Type: be64.
545 * Maskable: bitwise.
546 * Formatting: hexadecimal.
547 * Prerequisites: none.
548 * Access: read/write.
549 * NXM: none.
550 * OXM: OXM_OF_PKT_REG<N>(<N>) since OF1.5 and v2.4.
551 */
552 MFF_XREG0,
553 MFF_XREG1,
554 MFF_XREG2,
555 MFF_XREG3,
556 #else
557 #error "Need to update MFF_REG* to match FLOW_N_XREGS"
558 #endif
559
560 /* ## -------- ## */
561 /* ## Ethernet ## */
562 /* ## -------- ## */
563
564 /* "eth_src" (aka "dl_src").
565 *
566 * Source address in Ethernet header.
567 *
568 * This field was not maskable before Open vSwitch 1.8.
569 *
570 * Type: MAC.
571 * Maskable: bitwise.
572 * Formatting: Ethernet.
573 * Prerequisites: none.
574 * Access: read/write.
575 * NXM: NXM_OF_ETH_SRC(2) since v1.1.
576 * OXM: OXM_OF_ETH_SRC(4) since OF1.2 and v1.7.
577 * OF1.0: exact match.
578 * OF1.1: bitwise mask.
579 */
580 MFF_ETH_SRC,
581
582 /* "eth_dst" (aka "dl_dst").
583 *
584 * Destination address in Ethernet header.
585 *
586 * Before Open vSwitch 1.8, the allowed masks were restricted to
587 * 00:00:00:00:00:00, fe:ff:ff:ff:ff:ff, 01:00:00:00:00:00,
588 * ff:ff:ff:ff:ff:ff.
589 *
590 * Type: MAC.
591 * Maskable: bitwise.
592 * Formatting: Ethernet.
593 * Prerequisites: none.
594 * Access: read/write.
595 * NXM: NXM_OF_ETH_DST(1) since v1.1.
596 * OXM: OXM_OF_ETH_DST(3) since OF1.2 and v1.7.
597 * OF1.0: exact match.
598 * OF1.1: bitwise mask.
599 */
600 MFF_ETH_DST,
601
602 /* "eth_type" (aka "dl_type").
603 *
604 * Packet's Ethernet type.
605 *
606 * For an Ethernet II packet this is taken from the Ethernet header. For
607 * an 802.2 LLC+SNAP header with OUI 00-00-00 this is taken from the SNAP
608 * header. A packet that has neither format has value 0x05ff
609 * (OFP_DL_TYPE_NOT_ETH_TYPE).
610 *
611 * For a packet with an 802.1Q header, this is the type of the encapsulated
612 * frame.
613 *
614 * Type: be16.
615 * Maskable: no.
616 * Formatting: hexadecimal.
617 * Prerequisites: none.
618 * Access: read-only.
619 * NXM: NXM_OF_ETH_TYPE(3) since v1.1.
620 * OXM: OXM_OF_ETH_TYPE(5) since OF1.2 and v1.7.
621 * OF1.0: exact match.
622 * OF1.1: exact match.
623 */
624 MFF_ETH_TYPE,
625
626 /* ## ---- ## */
627 /* ## VLAN ## */
628 /* ## ---- ## */
629
630 /* It looks odd for vlan_tci, vlan_vid, and vlan_pcp to say that they are
631 * supported in OF1.0 and OF1.1, since the detailed semantics of these fields
632 * only apply to NXM or OXM. They are marked as supported for exact matches in
633 * OF1.0 and OF1.1 because exact matches on those fields can be successfully
634 * translated into the OF1.0 and OF1.1 flow formats. */
635
636 /* "vlan_tci".
637 *
638 * 802.1Q TCI.
639 *
640 * For a packet with an 802.1Q header, this is the Tag Control Information
641 * (TCI) field, with the CFI bit forced to 1. For a packet with no 802.1Q
642 * header, this has value 0.
643 *
644 * This field can be used in various ways:
645 *
646 * - If it is not constrained at all, the nx_match matches packets
647 * without an 802.1Q header or with an 802.1Q header that has any TCI
648 * value.
649 *
650 * - Testing for an exact match with 0 matches only packets without an
651 * 802.1Q header.
652 *
653 * - Testing for an exact match with a TCI value with CFI=1 matches
654 * packets that have an 802.1Q header with a specified VID and PCP.
655 *
656 * - Testing for an exact match with a nonzero TCI value with CFI=0 does
657 * not make sense. The switch may reject this combination.
658 *
659 * - Testing with a specific VID and CFI=1, with nxm_mask=0x1fff, matches
660 * packets that have an 802.1Q header with that VID (and any PCP).
661 *
662 * - Testing with a specific PCP and CFI=1, with nxm_mask=0xf000, matches
663 * packets that have an 802.1Q header with that PCP (and any VID).
664 *
665 * - Testing with nxm_value=0, nxm_mask=0x0fff matches packets with no
666 * 802.1Q header or with an 802.1Q header with a VID of 0.
667 *
668 * - Testing with nxm_value=0, nxm_mask=0xe000 matches packets with no
669 * 802.1Q header or with an 802.1Q header with a PCP of 0.
670 *
671 * - Testing with nxm_value=0, nxm_mask=0xefff matches packets with no
672 * 802.1Q header or with an 802.1Q header with both VID and PCP of 0.
673 *
674 * Type: be16.
675 * Maskable: bitwise.
676 * Formatting: hexadecimal.
677 * Prerequisites: none.
678 * Access: read/write.
679 * NXM: NXM_OF_VLAN_TCI(4) since v1.1.
680 * OXM: none.
681 * OF1.0: exact match.
682 * OF1.1: exact match.
683 */
684 MFF_VLAN_TCI,
685
686 /* "dl_vlan" (OpenFlow 1.0).
687 *
688 * VLAN ID field. Zero if no 802.1Q header is present.
689 *
690 * Type: be16 (low 12 bits).
691 * Maskable: no.
692 * Formatting: decimal.
693 * Prerequisites: none.
694 * Access: read/write.
695 * NXM: none.
696 * OXM: none.
697 * OF1.0: exact match.
698 * OF1.1: exact match.
699 */
700 MFF_DL_VLAN,
701
702 /* "vlan_vid" (OpenFlow 1.2+).
703 *
704 * If an 802.1Q header is present, this field's value is 0x1000
705 * bitwise-or'd with the VLAN ID. If no 802.1Q is present, this field's
706 * value is 0.
707 *
708 * Type: be16 (low 12 bits).
709 * Maskable: bitwise.
710 * Formatting: decimal.
711 * Prerequisites: none.
712 * Access: read/write.
713 * NXM: none.
714 * OXM: OXM_OF_VLAN_VID(6) since OF1.2 and v1.7.
715 * OF1.0: exact match.
716 * OF1.1: exact match.
717 */
718 MFF_VLAN_VID,
719
720 /* "dl_vlan_pcp" (OpenFlow 1.0).
721 *
722 * VLAN priority (PCP) field. Zero if no 802.1Q header is present.
723 *
724 * Type: u8 (low 3 bits).
725 * Maskable: no.
726 * Formatting: decimal.
727 * Prerequisites: none.
728 * Access: read/write.
729 * NXM: none.
730 * OXM: none.
731 * OF1.0: exact match.
732 * OF1.1: exact match.
733 */
734 MFF_DL_VLAN_PCP,
735
736 /* "vlan_pcp" (OpenFlow 1.2+).
737 *
738 * VLAN priority (PCP) field. Zero if no 802.1Q header is present.
739 *
740 * Type: u8 (low 3 bits).
741 * Maskable: no.
742 * Formatting: decimal.
743 * Prerequisites: VLAN VID.
744 * Access: read/write.
745 * NXM: none.
746 * OXM: OXM_OF_VLAN_PCP(7) since OF1.2 and v1.7.
747 * OF1.0: exact match.
748 * OF1.1: exact match.
749 */
750 MFF_VLAN_PCP,
751
752 /* ## ---- ## */
753 /* ## MPLS ## */
754 /* ## ---- ## */
755
756 /* "mpls_label".
757 *
758 * The outermost MPLS label, or 0 if no MPLS labels are present.
759 *
760 * Type: be32 (low 20 bits).
761 * Maskable: no.
762 * Formatting: decimal.
763 * Prerequisites: MPLS.
764 * Access: read/write.
765 * NXM: none.
766 * OXM: OXM_OF_MPLS_LABEL(34) since OF1.2 and v1.11.
767 * OF1.1: exact match.
768 */
769 MFF_MPLS_LABEL,
770
771 /* "mpls_tc".
772 *
773 * The outermost MPLS label's traffic control (TC) field, or 0 if no MPLS
774 * labels are present.
775 *
776 * Type: u8 (low 3 bits).
777 * Maskable: no.
778 * Formatting: decimal.
779 * Prerequisites: MPLS.
780 * Access: read/write.
781 * NXM: none.
782 * OXM: OXM_OF_MPLS_TC(35) since OF1.2 and v1.11.
783 * OF1.1: exact match.
784 */
785 MFF_MPLS_TC,
786
787 /* "mpls_bos".
788 *
789 * The outermost MPLS label's bottom of stack (BoS) field, or 0 if no MPLS
790 * labels are present.
791 *
792 * Type: u8 (low 1 bits).
793 * Maskable: no.
794 * Formatting: decimal.
795 * Prerequisites: MPLS.
796 * Access: read-only.
797 * NXM: none.
798 * OXM: OXM_OF_MPLS_BOS(36) since OF1.3 and v1.11.
799 */
800 MFF_MPLS_BOS,
801
802 /* ## ---- ## */
803 /* ## IPv4 ## */
804 /* ## ---- ## */
805
806 /* Update mf_is_l3_or_higher() if MFF_IPV4_SRC is no longer the first element
807 * for a field of layer 3 or higher */
808
809 /* "ip_src" (aka "nw_src").
810 *
811 * The source address in the IPv4 header.
812 *
813 * Before Open vSwitch 1.8, only CIDR masks were supported.
814 *
815 * Type: be32.
816 * Maskable: bitwise.
817 * Formatting: IPv4.
818 * Prerequisites: IPv4.
819 * Access: read/write.
820 * NXM: NXM_OF_IP_SRC(7) since v1.1.
821 * OXM: OXM_OF_IPV4_SRC(11) since OF1.2 and v1.7.
822 * OF1.0: CIDR mask.
823 * OF1.1: bitwise mask.
824 * Prefix lookup member: nw_src.
825 */
826 MFF_IPV4_SRC,
827
828 /* "ip_dst" (aka "nw_dst").
829 *
830 * The destination address in the IPv4 header.
831 *
832 * Before Open vSwitch 1.8, only CIDR masks were supported.
833 *
834 * Type: be32.
835 * Maskable: bitwise.
836 * Formatting: IPv4.
837 * Prerequisites: IPv4.
838 * Access: read/write.
839 * NXM: NXM_OF_IP_DST(8) since v1.1.
840 * OXM: OXM_OF_IPV4_DST(12) since OF1.2 and v1.7.
841 * OF1.0: CIDR mask.
842 * OF1.1: bitwise mask.
843 * Prefix lookup member: nw_dst.
844 */
845 MFF_IPV4_DST,
846
847 /* ## ---- ## */
848 /* ## IPv6 ## */
849 /* ## ---- ## */
850
851 /* "ipv6_src".
852 *
853 * The source address in the IPv6 header.
854 *
855 * Type: IPv6.
856 * Maskable: bitwise.
857 * Formatting: IPv6.
858 * Prerequisites: IPv6.
859 * Access: read/write.
860 * NXM: NXM_NX_IPV6_SRC(19) since v1.1.
861 * OXM: OXM_OF_IPV6_SRC(26) since OF1.2 and v1.1.
862 * Prefix lookup member: ipv6_src.
863 */
864 MFF_IPV6_SRC,
865
866 /* "ipv6_dst".
867 *
868 * The destination address in the IPv6 header.
869 *
870 * Type: IPv6.
871 * Maskable: bitwise.
872 * Formatting: IPv6.
873 * Prerequisites: IPv6.
874 * Access: read/write.
875 * NXM: NXM_NX_IPV6_DST(20) since v1.1.
876 * OXM: OXM_OF_IPV6_DST(27) since OF1.2 and v1.1.
877 * Prefix lookup member: ipv6_dst.
878 */
879 MFF_IPV6_DST,
880
881 /* "ipv6_label".
882 *
883 * The flow label in the IPv6 header.
884 *
885 * Type: be32 (low 20 bits).
886 * Maskable: bitwise.
887 * Formatting: hexadecimal.
888 * Prerequisites: IPv6.
889 * Access: read-only.
890 * NXM: NXM_NX_IPV6_LABEL(27) since v1.4.
891 * OXM: OXM_OF_IPV6_FLABEL(28) since OF1.2 and v1.7.
892 */
893 MFF_IPV6_LABEL,
894
895 /* ## ----------------------- ## */
896 /* ## IPv4/IPv6 common fields ## */
897 /* ## ----------------------- ## */
898
899 /* "nw_proto" (aka "ip_proto").
900 *
901 * The "protocol" byte in the IPv4 or IPv6 header.
902 *
903 * Type: u8.
904 * Maskable: no.
905 * Formatting: decimal.
906 * Prerequisites: IPv4/IPv6.
907 * Access: read-only.
908 * NXM: NXM_OF_IP_PROTO(6) since v1.1.
909 * OXM: OXM_OF_IP_PROTO(10) since OF1.2 and v1.7.
910 * OF1.0: exact match.
911 * OF1.1: exact match.
912 */
913 MFF_IP_PROTO,
914
915 /* Both views of the DSCP below are marked as supported in all of the versions
916 * of OpenFlow because a match on either view can be successfully translated
917 * into every OpenFlow flow format. */
918
919 /* "nw_tos" (OpenFlow 1.0/1.1).
920 *
921 * The DSCP byte in the IPv4 header or the traffic class byte from the IPv6
922 * header, with the ECN bits forced to 0. (That is, bits 2-7 contain the
923 * type of service and bits 0-1 are zero.)
924 *
925 * Type: u8.
926 * Maskable: no.
927 * Formatting: decimal.
928 * Prerequisites: IPv4/IPv6.
929 * Access: read/write.
930 * NXM: NXM_OF_IP_TOS(5) since v1.1.
931 * OXM: none.
932 * OF1.0: exact match.
933 * OF1.1: exact match.
934 */
935 MFF_IP_DSCP,
936
937 /* "ip_dscp" (OpenFlow 1.2+).
938 *
939 * The DSCP byte in the IPv4 header or the traffic class byte from the IPv6
940 * header, shifted right 2 bits. (That is, bits 0-5 contain the type of
941 * service and bits 6-7 are zero.)
942 *
943 * Type: u8 (low 6 bits).
944 * Maskable: no.
945 * Formatting: decimal.
946 * Prerequisites: IPv4/IPv6.
947 * Access: read/write.
948 * NXM: none.
949 * OXM: OXM_OF_IP_DSCP(8) since OF1.2 and v1.7.
950 * OF1.0: exact match.
951 * OF1.1: exact match.
952 */
953 MFF_IP_DSCP_SHIFTED,
954
955 /* "nw_ecn" (aka "ip_ecn").
956 *
957 * The ECN bits in the IPv4 or IPv6 header.
958 *
959 * Type: u8 (low 2 bits).
960 * Maskable: no.
961 * Formatting: decimal.
962 * Prerequisites: IPv4/IPv6.
963 * Access: read/write.
964 * NXM: NXM_NX_IP_ECN(28) since v1.4.
965 * OXM: OXM_OF_IP_ECN(9) since OF1.2 and v1.7.
966 */
967 MFF_IP_ECN,
968
969 /* "nw_ttl".
970 *
971 * The time-to-live (TTL) in the IPv4 header or hop limit in the IPv6
972 * header.
973 *
974 * Type: u8.
975 * Maskable: no.
976 * Formatting: decimal.
977 * Prerequisites: IPv4/IPv6.
978 * Access: read/write.
979 * NXM: NXM_NX_IP_TTL(29) since v1.4.
980 * OXM: none.
981 */
982 MFF_IP_TTL,
983
984 /* "ip_frag".
985 *
986 * IP fragment information.
987 *
988 * This field has three possible values:
989 *
990 * - A packet that is not an IP fragment has value 0.
991 *
992 * - A packet that is an IP fragment with offset 0 (the first fragment)
993 * has bit 0 set and thus value 1.
994 *
995 * - A packet that is an IP fragment with nonzero offset has bits 0 and 1
996 * set and thus value 3.
997 *
998 * NX_IP_FRAG_ANY and NX_IP_FRAG_LATER are declared to symbolically
999 * represent the meanings of bits 0 and 1.
1000 *
1001 * The switch may reject matches against values that can never appear.
1002 *
1003 * It is important to understand how this field interacts with the OpenFlow
1004 * IP fragment handling mode:
1005 *
1006 * - In OFPC_FRAG_DROP mode, the OpenFlow switch drops all IP fragments
1007 * before they reach the flow table, so every packet that is available
1008 * for matching will have value 0 in this field.
1009 *
1010 * - Open vSwitch does not implement OFPC_FRAG_REASM mode, but if it did
1011 * then IP fragments would be reassembled before they reached the flow
1012 * table and again every packet available for matching would always
1013 * have value 0.
1014 *
1015 * - In OFPC_FRAG_NORMAL mode, all three values are possible, but
1016 * OpenFlow 1.0 says that fragments' transport ports are always 0, even
1017 * for the first fragment, so this does not provide much extra
1018 * information.
1019 *
1020 * - In OFPC_FRAG_NX_MATCH mode, all three values are possible. For
1021 * fragments with offset 0, Open vSwitch makes L4 header information
1022 * available.
1023 *
1024 * Type: u8 (low 2 bits).
1025 * Maskable: bitwise.
1026 * Formatting: frag.
1027 * Prerequisites: IPv4/IPv6.
1028 * Access: read-only.
1029 * NXM: NXM_NX_IP_FRAG(26) since v1.3.
1030 * OXM: none.
1031 */
1032 MFF_IP_FRAG,
1033
1034 /* ## --- ## */
1035 /* ## ARP ## */
1036 /* ## --- ## */
1037
1038 /* "arp_op".
1039 *
1040 * ARP opcode.
1041 *
1042 * For an Ethernet+IP ARP packet, the opcode in the ARP header. Always 0
1043 * otherwise. Only ARP opcodes between 1 and 255 should be specified for
1044 * matching.
1045 *
1046 * Type: be16.
1047 * Maskable: no.
1048 * Formatting: decimal.
1049 * Prerequisites: ARP.
1050 * Access: read/write.
1051 * NXM: NXM_OF_ARP_OP(15) since v1.1.
1052 * OXM: OXM_OF_ARP_OP(21) since OF1.2 and v1.7.
1053 * OF1.0: exact match.
1054 * OF1.1: exact match.
1055 */
1056 MFF_ARP_OP,
1057
1058 /* "arp_spa".
1059 *
1060 * For an Ethernet+IP ARP packet, the source protocol (IPv4) address in the
1061 * ARP header. Always 0 otherwise.
1062 *
1063 * Before Open vSwitch 1.8, only CIDR masks were supported.
1064 *
1065 * Type: be32.
1066 * Maskable: bitwise.
1067 * Formatting: IPv4.
1068 * Prerequisites: ARP.
1069 * Access: read/write.
1070 * NXM: NXM_OF_ARP_SPA(16) since v1.1.
1071 * OXM: OXM_OF_ARP_SPA(22) since OF1.2 and v1.7.
1072 * OF1.0: CIDR mask.
1073 * OF1.1: bitwise mask.
1074 */
1075 MFF_ARP_SPA,
1076
1077 /* "arp_tpa".
1078 *
1079 * For an Ethernet+IP ARP packet, the target protocol (IPv4) address in the
1080 * ARP header. Always 0 otherwise.
1081 *
1082 * Before Open vSwitch 1.8, only CIDR masks were supported.
1083 *
1084 * Type: be32.
1085 * Maskable: bitwise.
1086 * Formatting: IPv4.
1087 * Prerequisites: ARP.
1088 * Access: read/write.
1089 * NXM: NXM_OF_ARP_TPA(17) since v1.1.
1090 * OXM: OXM_OF_ARP_TPA(23) since OF1.2 and v1.7.
1091 * OF1.0: CIDR mask.
1092 * OF1.1: bitwise mask.
1093 */
1094 MFF_ARP_TPA,
1095
1096 /* "arp_sha".
1097 *
1098 * For an Ethernet+IP ARP packet, the source hardware (Ethernet) address in
1099 * the ARP header. Always 0 otherwise.
1100 *
1101 * Type: MAC.
1102 * Maskable: bitwise.
1103 * Formatting: Ethernet.
1104 * Prerequisites: ARP.
1105 * Access: read/write.
1106 * NXM: NXM_NX_ARP_SHA(17) since v1.1.
1107 * OXM: OXM_OF_ARP_SHA(24) since OF1.2 and v1.7.
1108 */
1109 MFF_ARP_SHA,
1110
1111 /* "arp_tha".
1112 *
1113 * For an Ethernet+IP ARP packet, the target hardware (Ethernet) address in
1114 * the ARP header. Always 0 otherwise.
1115 *
1116 * Type: MAC.
1117 * Maskable: bitwise.
1118 * Formatting: Ethernet.
1119 * Prerequisites: ARP.
1120 * Access: read/write.
1121 * NXM: NXM_NX_ARP_THA(18) since v1.1.
1122 * OXM: OXM_OF_ARP_THA(25) since OF1.2 and v1.7.
1123 */
1124 MFF_ARP_THA,
1125
1126 /* ## --- ## */
1127 /* ## TCP ## */
1128 /* ## --- ## */
1129
1130 /* "tcp_src" (aka "tp_src").
1131 *
1132 * TCP source port.
1133 *
1134 * Type: be16.
1135 * Maskable: bitwise.
1136 * Formatting: decimal.
1137 * Prerequisites: TCP.
1138 * Access: read/write.
1139 * NXM: NXM_OF_TCP_SRC(9) since v1.1.
1140 * OXM: OXM_OF_TCP_SRC(13) since OF1.2 and v1.7.
1141 * OF1.0: exact match.
1142 * OF1.1: exact match.
1143 */
1144 MFF_TCP_SRC,
1145
1146 /* "tcp_dst" (aka "tp_dst").
1147 *
1148 * TCP destination port.
1149 *
1150 * Type: be16.
1151 * Maskable: bitwise.
1152 * Formatting: decimal.
1153 * Prerequisites: TCP.
1154 * Access: read/write.
1155 * NXM: NXM_OF_TCP_DST(10) since v1.1.
1156 * OXM: OXM_OF_TCP_DST(14) since OF1.2 and v1.7.
1157 * OF1.0: exact match.
1158 * OF1.1: exact match.
1159 */
1160 MFF_TCP_DST,
1161
1162 /* "tcp_flags".
1163 *
1164 * Flags in the TCP header.
1165 *
1166 * TCP currently defines 9 flag bits, and additional 3 bits are reserved
1167 * (must be transmitted as zero). See RFCs 793, 3168, and 3540.
1168 *
1169 * Type: be16 (low 12 bits).
1170 * Maskable: bitwise.
1171 * Formatting: TCP flags.
1172 * Prerequisites: TCP.
1173 * Access: read-only.
1174 * NXM: NXM_NX_TCP_FLAGS(34) since v2.1.
1175 * OXM: OXM_OF_TCP_FLAGS(42) since OF1.5 and v2.3.
1176 */
1177 MFF_TCP_FLAGS,
1178
1179 /* ## --- ## */
1180 /* ## UDP ## */
1181 /* ## --- ## */
1182
1183 /* "udp_src".
1184 *
1185 * UDP source port.
1186 *
1187 * Type: be16.
1188 * Maskable: bitwise.
1189 * Formatting: decimal.
1190 * Prerequisites: UDP.
1191 * Access: read/write.
1192 * NXM: NXM_OF_UDP_SRC(11) since v1.1.
1193 * OXM: OXM_OF_UDP_SRC(15) since OF1.2 and v1.7.
1194 * OF1.0: exact match.
1195 * OF1.1: exact match.
1196 */
1197 MFF_UDP_SRC,
1198
1199 /* "udp_dst".
1200 *
1201 * UDP destination port
1202 *
1203 * Type: be16.
1204 * Maskable: bitwise.
1205 * Formatting: decimal.
1206 * Prerequisites: UDP.
1207 * Access: read/write.
1208 * NXM: NXM_OF_UDP_DST(12) since v1.1.
1209 * OXM: OXM_OF_UDP_DST(16) since OF1.2 and v1.7.
1210 * OF1.0: exact match.
1211 * OF1.1: exact match.
1212 */
1213 MFF_UDP_DST,
1214
1215 /* ## ---- ## */
1216 /* ## SCTP ## */
1217 /* ## ---- ## */
1218
1219 /* "sctp_src".
1220 *
1221 * SCTP source port.
1222 *
1223 * Type: be16.
1224 * Maskable: bitwise.
1225 * Formatting: decimal.
1226 * Prerequisites: SCTP.
1227 * Access: read/write.
1228 * NXM: none.
1229 * OXM: OXM_OF_SCTP_SRC(17) since OF1.2 and v2.0.
1230 * OF1.1: exact match.
1231 */
1232 MFF_SCTP_SRC,
1233
1234 /* "sctp_dst".
1235 *
1236 * SCTP destination port.
1237 *
1238 * Type: be16.
1239 * Maskable: bitwise.
1240 * Formatting: decimal.
1241 * Prerequisites: SCTP.
1242 * Access: read/write.
1243 * NXM: none.
1244 * OXM: OXM_OF_SCTP_DST(18) since OF1.2 and v2.0.
1245 * OF1.1: exact match.
1246 */
1247 MFF_SCTP_DST,
1248
1249 /* ## ---- ## */
1250 /* ## ICMP ## */
1251 /* ## ---- ## */
1252
1253 /* "icmp_type".
1254 *
1255 * ICMPv4 type.
1256 *
1257 * Type: u8.
1258 * Maskable: no.
1259 * Formatting: decimal.
1260 * Prerequisites: ICMPv4.
1261 * Access: read-only.
1262 * NXM: NXM_OF_ICMP_TYPE(13) since v1.1.
1263 * OXM: OXM_OF_ICMPV4_TYPE(19) since OF1.2 and v1.7.
1264 * OF1.0: exact match.
1265 * OF1.1: exact match.
1266 */
1267 MFF_ICMPV4_TYPE,
1268
1269 /* "icmp_code".
1270 *
1271 * ICMPv4 code.
1272 *
1273 * Type: u8.
1274 * Maskable: no.
1275 * Formatting: decimal.
1276 * Prerequisites: ICMPv4.
1277 * Access: read-only.
1278 * NXM: NXM_OF_ICMP_CODE(14) since v1.1.
1279 * OXM: OXM_OF_ICMPV4_CODE(20) since OF1.2 and v1.7.
1280 * OF1.0: exact match.
1281 * OF1.1: exact match.
1282 */
1283 MFF_ICMPV4_CODE,
1284
1285 /* "icmpv6_type".
1286 *
1287 * ICMPv6 type.
1288 *
1289 * Type: u8.
1290 * Maskable: no.
1291 * Formatting: decimal.
1292 * Prerequisites: ICMPv6.
1293 * Access: read-only.
1294 * NXM: NXM_NX_ICMPV6_TYPE(21) since v1.1.
1295 * OXM: OXM_OF_ICMPV6_TYPE(29) since OF1.2 and v1.7.
1296 */
1297 MFF_ICMPV6_TYPE,
1298
1299 /* "icmpv6_code".
1300 *
1301 * ICMPv6 code.
1302 *
1303 * Type: u8.
1304 * Maskable: no.
1305 * Formatting: decimal.
1306 * Prerequisites: ICMPv6.
1307 * Access: read-only.
1308 * NXM: NXM_NX_ICMPV6_CODE(22) since v1.1.
1309 * OXM: OXM_OF_ICMPV6_CODE(30) since OF1.2 and v1.7.
1310 */
1311 MFF_ICMPV6_CODE,
1312
1313 /* ## ------------------------- ## */
1314 /* ## ICMPv6 Neighbor Discovery ## */
1315 /* ## ------------------------- ## */
1316
1317 /* "nd_target".
1318 *
1319 * The target address in an IPv6 Neighbor Discovery message.
1320 *
1321 * Before Open vSwitch 1.8, only CIDR masks were supported.
1322 *
1323 * Type: IPv6.
1324 * Maskable: bitwise.
1325 * Formatting: IPv6.
1326 * Prerequisites: ND.
1327 * Access: read-only.
1328 * NXM: NXM_NX_ND_TARGET(23) since v1.1.
1329 * OXM: OXM_OF_IPV6_ND_TARGET(31) since OF1.2 and v1.7.
1330 */
1331 MFF_ND_TARGET,
1332
1333 /* "nd_sll".
1334 *
1335 * The source link layer address in an IPv6 Neighbor Discovery message.
1336 *
1337 * Type: MAC.
1338 * Maskable: bitwise.
1339 * Formatting: Ethernet.
1340 * Prerequisites: ND solicit.
1341 * Access: read-only.
1342 * NXM: NXM_NX_ND_SLL(24) since v1.1.
1343 * OXM: OXM_OF_IPV6_ND_SLL(32) since OF1.2 and v1.7.
1344 */
1345 MFF_ND_SLL,
1346
1347 /* "nd_tll".
1348 *
1349 * The target link layer address in an IPv6 Neighbor Discovery message.
1350 *
1351 * Type: MAC.
1352 * Maskable: bitwise.
1353 * Formatting: Ethernet.
1354 * Prerequisites: ND advert.
1355 * Access: read-only.
1356 * NXM: NXM_NX_ND_TLL(25) since v1.1.
1357 * OXM: OXM_OF_IPV6_ND_TLL(33) since OF1.2 and v1.7.
1358 */
1359 MFF_ND_TLL,
1360
1361 MFF_N_IDS
1362 };
1363
1364 /* A set of mf_field_ids. */
1365 struct mf_bitmap {
1366 unsigned long bm[BITMAP_N_LONGS(MFF_N_IDS)];
1367 };
1368 #define MF_BITMAP_INITIALIZER { { [0] = 0 } }
1369
1370 /* Use this macro as CASE_MFF_REGS: in a switch statement to choose all of the
1371 * MFF_REGn cases. */
1372 #if FLOW_N_REGS == 8
1373 #define CASE_MFF_REGS \
1374 case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3: \
1375 case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7
1376 #else
1377 #error "Need to update CASE_MFF_REGS to match FLOW_N_REGS"
1378 #endif
1379
1380 /* Use this macro as CASE_MFF_XREGS: in a switch statement to choose all of the
1381 * MFF_REGn cases. */
1382 #if FLOW_N_XREGS == 4
1383 #define CASE_MFF_XREGS \
1384 case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3
1385 #else
1386 #error "Need to update CASE_MFF_XREGS to match FLOW_N_XREGS"
1387 #endif
1388
1389 /* Prerequisites for matching a field.
1390 *
1391 * A field may only be matched if the correct lower-level protocols are also
1392 * matched. For example, the TCP port may be matched only if the Ethernet type
1393 * matches ETH_TYPE_IP and the IP protocol matches IPPROTO_TCP. */
1394 enum OVS_PACKED_ENUM mf_prereqs {
1395 MFP_NONE,
1396
1397 /* L2 requirements. */
1398 MFP_ARP,
1399 MFP_VLAN_VID,
1400 MFP_IPV4,
1401 MFP_IPV6,
1402 MFP_IP_ANY,
1403
1404 /* L2.5 requirements. */
1405 MFP_MPLS,
1406
1407 /* L2+L3 requirements. */
1408 MFP_TCP, /* On IPv4 or IPv6. */
1409 MFP_UDP, /* On IPv4 or IPv6. */
1410 MFP_SCTP, /* On IPv4 or IPv6. */
1411 MFP_ICMPV4,
1412 MFP_ICMPV6,
1413
1414 /* L2+L3+L4 requirements. */
1415 MFP_ND,
1416 MFP_ND_SOLICIT,
1417 MFP_ND_ADVERT
1418 };
1419
1420 /* Forms of partial-field masking allowed for a field.
1421 *
1422 * Every field may be masked as a whole. */
1423 enum OVS_PACKED_ENUM mf_maskable {
1424 MFM_NONE, /* No sub-field masking. */
1425 MFM_FULLY, /* Every bit is individually maskable. */
1426 };
1427
1428 /* How to format or parse a field's value. */
1429 enum OVS_PACKED_ENUM mf_string {
1430 /* Integer formats.
1431 *
1432 * The particular MFS_* constant sets the output format. On input, either
1433 * decimal or hexadecimal (prefixed with 0x) is accepted. */
1434 MFS_DECIMAL,
1435 MFS_HEXADECIMAL,
1436
1437 /* Other formats. */
1438 MFS_ETHERNET,
1439 MFS_IPV4,
1440 MFS_IPV6,
1441 MFS_OFP_PORT, /* 16-bit OpenFlow 1.0 port number or name. */
1442 MFS_OFP_PORT_OXM, /* 32-bit OpenFlow 1.1+ port number or name. */
1443 MFS_FRAG, /* no, yes, first, later, not_later */
1444 MFS_TNL_FLAGS, /* FLOW_TNL_F_* flags */
1445 MFS_TCP_FLAGS, /* TCP_* flags */
1446 };
1447
1448 struct mf_field {
1449 /* Identification. */
1450 enum mf_field_id id; /* MFF_*. */
1451 const char *name; /* Name of this field, e.g. "eth_type". */
1452 const char *extra_name; /* Alternate name, e.g. "dl_type", or NULL. */
1453
1454 /* Size.
1455 *
1456 * Most fields have n_bytes * 8 == n_bits. There are a few exceptions:
1457 *
1458 * - "dl_vlan" is 2 bytes but only 12 bits.
1459 * - "dl_vlan_pcp" is 1 byte but only 3 bits.
1460 * - "is_frag" is 1 byte but only 2 bits.
1461 * - "ipv6_label" is 4 bytes but only 20 bits.
1462 * - "mpls_label" is 4 bytes but only 20 bits.
1463 * - "mpls_tc" is 1 byte but only 3 bits.
1464 * - "mpls_bos" is 1 byte but only 1 bit.
1465 */
1466 unsigned int n_bytes; /* Width of the field in bytes. */
1467 unsigned int n_bits; /* Number of significant bits in field. */
1468
1469 /* Properties. */
1470 enum mf_maskable maskable;
1471 enum mf_string string;
1472 enum mf_prereqs prereqs;
1473 bool writable; /* May be written by actions? */
1474
1475 /* Usable protocols.
1476 *
1477 * NXM and OXM are extensible, allowing later extensions to be sent in
1478 * earlier protocol versions, so this does not necessarily correspond to
1479 * the OpenFlow protocol version the field was introduced in.
1480 * Also, some field types are tranparently mapped to each other via the
1481 * struct flow (like vlan and dscp/tos fields), so each variant supports
1482 * all protocols.
1483 *
1484 * These are combinations of OFPUTIL_P_*. (They are not declared as type
1485 * enum ofputil_protocol because that would give meta-flow.h and ofp-util.h
1486 * a circular dependency.) */
1487 uint32_t usable_protocols_exact; /* Matching or setting whole field. */
1488 uint32_t usable_protocols_cidr; /* Matching a CIDR mask in field. */
1489 uint32_t usable_protocols_bitwise; /* Matching arbitrary bits in field. */
1490
1491 int flow_be32ofs; /* Field's be32 offset in "struct flow", if prefix tree
1492 * lookup is supported for the field, or -1. */
1493 };
1494
1495 /* The representation of a field's value. */
1496 union mf_value {
1497 struct in6_addr ipv6;
1498 uint8_t mac[ETH_ADDR_LEN];
1499 ovs_be64 be64;
1500 ovs_be32 be32;
1501 ovs_be16 be16;
1502 uint8_t u8;
1503 };
1504 BUILD_ASSERT_DECL(sizeof(union mf_value) == 16);
1505
1506 /* An all-1-bits mf_value. Needs to be updated if struct mf_value grows.*/
1507 #define MF_EXACT_MASK_INITIALIZER { IN6ADDR_EXACT_INIT }
1508 BUILD_ASSERT_DECL(sizeof(union mf_value) == sizeof(struct in6_addr));
1509
1510 /* Part of a field. */
1511 struct mf_subfield {
1512 const struct mf_field *field;
1513 unsigned int ofs; /* Bit offset. */
1514 unsigned int n_bits; /* Number of bits. */
1515 };
1516
1517 /* Data for some part of an mf_field.
1518 *
1519 * The data is stored "right-justified". For example, if "union mf_subvalue
1520 * value" contains NXM_OF_VLAN_TCI[0..11], then one could access the
1521 * corresponding data in value.be16[7] as the bits in the mask htons(0xfff). */
1522 union mf_subvalue {
1523 uint8_t u8[16];
1524 ovs_be16 be16[8];
1525 ovs_be32 be32[4];
1526 ovs_be64 be64[2];
1527 };
1528 BUILD_ASSERT_DECL(sizeof(union mf_value) == sizeof (union mf_subvalue));
1529
1530 /* Finding mf_fields. */
1531 const struct mf_field *mf_from_name(const char *name);
1532
1533 static inline const struct mf_field *
1534 mf_from_id(enum mf_field_id id)
1535 {
1536 extern const struct mf_field mf_fields[MFF_N_IDS];
1537 ovs_assert((unsigned int) id < MFF_N_IDS);
1538 return &mf_fields[id];
1539 }
1540
1541 /* Inspecting wildcarded bits. */
1542 bool mf_is_all_wild(const struct mf_field *, const struct flow_wildcards *);
1543
1544 bool mf_is_mask_valid(const struct mf_field *, const union mf_value *mask);
1545 void mf_get_mask(const struct mf_field *, const struct flow_wildcards *,
1546 union mf_value *mask);
1547
1548 /* Prerequisites. */
1549 bool mf_are_prereqs_ok(const struct mf_field *, const struct flow *);
1550 void mf_mask_field_and_prereqs(const struct mf_field *, struct flow *mask);
1551
1552 static inline bool
1553 mf_is_l3_or_higher(const struct mf_field *mf)
1554 {
1555 return mf->id >= MFF_IPV4_SRC;
1556 }
1557
1558 /* Field values. */
1559 bool mf_is_value_valid(const struct mf_field *, const union mf_value *value);
1560
1561 void mf_get_value(const struct mf_field *, const struct flow *,
1562 union mf_value *value);
1563 void mf_set_value(const struct mf_field *, const union mf_value *value,
1564 struct match *);
1565 void mf_set_flow_value(const struct mf_field *, const union mf_value *value,
1566 struct flow *);
1567 void mf_set_flow_value_masked(const struct mf_field *,
1568 const union mf_value *value,
1569 const union mf_value *mask,
1570 struct flow *);
1571 bool mf_is_zero(const struct mf_field *, const struct flow *);
1572 void mf_mask_field(const struct mf_field *, struct flow *);
1573
1574 void mf_get(const struct mf_field *, const struct match *,
1575 union mf_value *value, union mf_value *mask);
1576
1577 /* Returns the set of usable protocols. */
1578 enum ofputil_protocol mf_set(const struct mf_field *,
1579 const union mf_value *value,
1580 const union mf_value *mask,
1581 struct match *);
1582
1583 void mf_set_wild(const struct mf_field *, struct match *);
1584
1585 /* Subfields. */
1586 void mf_write_subfield_flow(const struct mf_subfield *,
1587 const union mf_subvalue *, struct flow *);
1588 void mf_write_subfield(const struct mf_subfield *, const union mf_subvalue *,
1589 struct match *);
1590
1591 void mf_read_subfield(const struct mf_subfield *, const struct flow *,
1592 union mf_subvalue *);
1593 uint64_t mf_get_subfield(const struct mf_subfield *, const struct flow *);
1594
1595
1596 enum ofperr mf_check_src(const struct mf_subfield *, const struct flow *);
1597 enum ofperr mf_check_dst(const struct mf_subfield *, const struct flow *);
1598
1599 /* Parsing and formatting. */
1600 char *mf_parse(const struct mf_field *, const char *,
1601 union mf_value *value, union mf_value *mask);
1602 char *mf_parse_value(const struct mf_field *, const char *, union mf_value *);
1603 void mf_format(const struct mf_field *,
1604 const union mf_value *value, const union mf_value *mask,
1605 struct ds *);
1606 void mf_format_subvalue(const union mf_subvalue *subvalue, struct ds *s);
1607
1608 #endif /* meta-flow.h */