- * 1. 'wildcards' is nonzero if and only if at least one bit or field is
- * wildcarded.
- *
- * 2. Bits in 'wildcards' not included in OVSFW_ALL are set to 0. (This is a
- * corollary to invariant #1.)
- *
- * 3. The fields in 'wildcards' masked by OFPFW_NW_SRC_MASK and
- * OFPFW_NW_DST_MASK have values between 0 and 32, inclusive.
+ * These are used only internally to Open vSwitch, in the 'wildcards' member of
+ * struct flow_wildcards. They never appear in the wire protocol in this
+ * form. */
+
+typedef unsigned int OVS_BITWISE flow_wildcards_t;
+
+/* Same values and meanings as corresponding OFPFW_* bits. */
+#define FWW_IN_PORT ((OVS_FORCE flow_wildcards_t) (1 << 0))
+#define FWW_DL_SRC ((OVS_FORCE flow_wildcards_t) (1 << 2))
+#define FWW_DL_DST ((OVS_FORCE flow_wildcards_t) (1 << 3))
+ /* excluding the multicast bit */
+#define FWW_DL_TYPE ((OVS_FORCE flow_wildcards_t) (1 << 4))
+#define FWW_NW_PROTO ((OVS_FORCE flow_wildcards_t) (1 << 5))
+#define FWW_TP_SRC ((OVS_FORCE flow_wildcards_t) (1 << 6))
+#define FWW_TP_DST ((OVS_FORCE flow_wildcards_t) (1 << 7))
+/* Same meanings as corresponding OFPFW_* bits, but differ in value. */
+#define FWW_NW_TOS ((OVS_FORCE flow_wildcards_t) (1 << 1))
+/* No OFPFW_* bits, but they do have corresponding OVSFW_* bits. */
+#define FWW_TUN_ID ((OVS_FORCE flow_wildcards_t) (1 << 8))
+/* No corresponding OFPFW_* or OVSFW_* bits. */
+#define FWW_ETH_MCAST ((OVS_FORCE flow_wildcards_t) (1 << 9))
+ /* multicast bit only */
+#define FWW_ALL ((OVS_FORCE flow_wildcards_t) (((1 << 10)) - 1))
+
+/* Information on wildcards for a flow, as a supplement to "struct flow".