classifier: Add support for conjunctive matches.
[cascardo/ovs.git] / lib / meta-flow.h
index 4607c7f..1ee5c75 100644 (file)
@@ -215,6 +215,11 @@ struct match;
  *     OXM (e.g. "since OF1.3 and v1.10" if it was introduced in OpenFlow 1.3
  *     and first supported by Open vSwitch in version 1.10).
  *
+ *     Some fields have more than one OXM field assignment.  For example,
+ *     actset_output has an experimenter OXM assignment in OpenFlow 1.3 and a
+ *     standard OXM assignment in OpenFlow 1.5.  In such a case, specify both,
+ *     separated by commas.
+ *
  *     OVS uses the start of the OXM field name to determine the correct OXM
  *     class.  To support a new OXM class, edit the mapping table in
  *     build-aux/extract-ofp-fields.
@@ -294,6 +299,20 @@ enum OVS_PACKED_ENUM mf_field_id {
      */
     MFF_RECIRC_ID,
 
+    /* "conj_id".
+     *
+     * ID for "conjunction" actions.  Please refer to ovs-ofctl(8)
+     * documentation of "conjunction" for details.
+     *
+     * Type: be32.
+     * Maskable: no.
+     * Formatting: decimal.
+     * Prerequisites: none.
+     * Access: read-only.
+     * NXM: NXM_NX_CONJ_ID(37) since v2.4.
+     * OXM: none. */
+    MFF_CONJ_ID,
+
     /* "tun_id" (aka "tunnel_id").
      *
      * The "key" or "tunnel ID" or "VNI" in a packet received via a keyed
@@ -445,6 +464,19 @@ enum OVS_PACKED_ENUM mf_field_id {
      */
     MFF_IN_PORT_OXM,
 
+    /* "actset_output".
+     *
+     * Type: be32.
+     * Maskable: no.
+     * Formatting: OpenFlow 1.1+ port.
+     * Prerequisites: none.
+     * Access: read-only.
+     * NXM: none.
+     * OXM: ONFOXM_ET_ACTSET_OUTPUT(43) since OF1.3 and v2.4,
+     *      OXM_OF_ACTSET_OUTPUT(43) since OF1.5 and v2.4.
+     */
+    MFF_ACTSET_OUTPUT,
+
     /* "skb_priority".
      *
      * Designates the queue to which output will be directed.  The value in
@@ -523,13 +555,17 @@ enum OVS_PACKED_ENUM mf_field_id {
      * and reg1 the least-significant.  xreg1 similarly overlays reg2 and reg3,
      * and so on.
      *
+     * These registers were introduced in OpenFlow 1.5, but EXT-244 in the ONF
+     * JIRA also publishes them as a (draft) OpenFlow extension to OpenFlow
+     * 1.3.
+     *
      * Type: be64.
      * Maskable: bitwise.
      * Formatting: hexadecimal.
      * Prerequisites: none.
      * Access: read/write.
      * NXM: none.
-     * OXM: OXM_OF_PKT_REG<N>(<N>) since OF1.5 and v2.4.
+     * OXM: OXM_OF_PKT_REG<N>(<N>) since OF1.3 and v2.4.
      */
     MFF_XREG0,
     MFF_XREG1,
@@ -1154,7 +1190,8 @@ enum OVS_PACKED_ENUM mf_field_id {
      * Prerequisites: TCP.
      * Access: read-only.
      * NXM: NXM_NX_TCP_FLAGS(34) since v2.1.
-     * OXM: OXM_OF_TCP_FLAGS(42) since OF1.5 and v2.3.
+     * OXM: ONFOXM_ET_TCP_FLAGS(42) since OF1.3 and v2.4,
+     *      OXM_OF_TCP_FLAGS(42) since OF1.5 and v2.3.
      */
     MFF_TCP_FLAGS,
 
@@ -1485,7 +1522,9 @@ union mf_value {
 };
 BUILD_ASSERT_DECL(sizeof(union mf_value) == 16);
 
+/* An all-1-bits mf_value.  Needs to be updated if struct mf_value grows.*/
 #define MF_EXACT_MASK_INITIALIZER { IN6ADDR_EXACT_INIT }
+BUILD_ASSERT_DECL(sizeof(union mf_value) == sizeof(struct in6_addr));
 
 /* Part of a field. */
 struct mf_subfield {