X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmeta-flow.h;h=a552e3ce8b00aa2d1a58bc80ac584ec692d5bda0;hb=05bfbcb693680794c5a0398587a7da6b46b3e3f5;hp=e2079359fb920fe20969883f181ad2a49b9f142c;hpb=a61680c6d15fa1f1ae3072a83c0e3d7ed08f6048;p=sliver-openvswitch.git diff --git a/lib/meta-flow.h b/lib/meta-flow.h index e2079359f..a552e3ce8 100644 --- a/lib/meta-flow.h +++ b/lib/meta-flow.h @@ -88,8 +88,11 @@ enum mf_field_id { 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 */ @@ -116,8 +119,8 @@ enum mf_prereqs { /* 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, @@ -175,7 +178,14 @@ struct mf_field { 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. */ @@ -191,6 +201,8 @@ union mf_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 *); @@ -210,6 +222,8 @@ void mf_get_value(const struct mf_field *, const struct flow *, 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);