* to represent its value. */
enum OVS_PACKED_ENUM mf_field_id {
/* Metadata. */
+ MFF_DP_HASH, /* be32 */
+ MFF_RECIRC_ID, /* be32 */
MFF_TUN_ID, /* be64 */
MFF_TUN_SRC, /* be32 */
MFF_TUN_DST, /* be32 */
MFF_MPLS_BOS, /* u8 */
/* L3. */
+ /* Update mf_is_l3_or_higher() if MFF_IPV4_SRC is
+ * no longer the first element for a field of layer 3 or higher */
MFF_IPV4_SRC, /* be32 */
MFF_IPV4_DST, /* be32 */
enum ofputil_protocol usable_protocols; /* If fully/cidr masked. */
/* If partially/non-cidr masked. */
enum ofputil_protocol usable_protocols_bitwise;
+
+ int flow_be32ofs; /* Field's be32 offset in "struct flow", if prefix tree
+ * lookup is supported for the field, or -1. */
};
/* The representation of a field's value. */
bool mf_are_prereqs_ok(const struct mf_field *, const struct flow *);
void mf_mask_field_and_prereqs(const struct mf_field *, struct flow *mask);
+static inline bool
+mf_is_l3_or_higher(const struct mf_field *mf)
+{
+ return mf->id >= MFF_IPV4_SRC;
+}
+
/* Field values. */
bool mf_is_value_valid(const struct mf_field *, const union mf_value *value);