MFF_IPV6_LABEL, /* be32 */
MFF_IP_PROTO, /* u8 (used for IPv4 or IPv6) */
- MFF_IP_TOS, /* u8 (used for IPv4 or IPv6) */
+ MFF_IP_DSCP, /* u8 (used for IPv4 or IPv6) */
+ MFF_IP_ECN, /* u8 (used for IPv4 or IPv6) */
+ MFF_IP_TTL, /* u8 (used for IPv4 or IPv6) */
MFF_IP_FRAG, /* u8 (used for IPv4 or IPv6) */
MFF_ARP_OP, /* be16 */
MFF_UDP_SRC, /* be16 (used for IPv4 or IPv6) */
MFF_UDP_DST, /* be16 (used for IPv4 or IPv6) */
- MFF_ICMP_TYPE, /* u8 (used for IPv4 or IPv6) */
- MFF_ICMP_CODE, /* u8 (used for IPv4 or IPv6) */
+ MFF_ICMPV4_TYPE, /* u8 */
+ MFF_ICMPV4_CODE, /* u8 */
+
+ MFF_ICMPV6_TYPE, /* u8 */
+ MFF_ICMPV6_CODE, /* u8 */
/* ICMPv6 Neighbor Discovery. */
MFF_ND_TARGET, /* ipv6 */
/* L2+L3 requirements. */
MFP_TCP, /* On IPv4 or IPv6. */
MFP_UDP, /* On IPv4 or IPv6. */
+ MFP_ICMPV4,
MFP_ICMPV6,
- MFP_ICMP_ANY,
/* L2+L3+L4 requirements. */
MFP_ND,
flow_wildcards_t fww_bit; /* Either 0 or exactly one FWW_* bit. */
enum mf_string string;
enum mf_prereqs prereqs;
+ bool writable; /* May be written by actions? */
+
+ /* NXM properties.
+ *
+ * A few "mf_field"s don't correspond to NXM fields. Those have 0 and
+ * NULL for the following members, respectively. */
uint32_t nxm_header; /* An NXM_* constant (a few fields have 0). */
+ const char *nxm_name; /* The "NXM_*" constant's name. */
};
/* The representation of a field's value. */
/* Finding mf_fields. */
const struct mf_field *mf_from_id(enum mf_field_id);
const struct mf_field *mf_from_name(const char *name);
+const struct mf_field *mf_from_nxm_header(uint32_t nxm_header);
+const struct mf_field *mf_from_nxm_name(const char *nxm_name);
/* Inspecting wildcarded bits. */
bool mf_is_all_wild(const struct mf_field *, const struct flow_wildcards *);
union mf_value *value);
void mf_set_value(const struct mf_field *, const union mf_value *value,
struct cls_rule *);
+void mf_set_flow_value(const struct mf_field *, const union mf_value *value,
+ struct flow *);
void mf_get(const struct mf_field *, const struct cls_rule *,
union mf_value *value, union mf_value *mask);