git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vswitchd: Document behavior of 802.1p priorities with VLAN splinters.
[sliver-openvswitch.git]
/
lib
/
meta-flow.h
diff --git
a/lib/meta-flow.h
b/lib/meta-flow.h
index
e207935
..
a552e3c
100644
(file)
--- 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_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 */
/* 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. */
/* L2+L3 requirements. */
MFP_TCP, /* On IPv4 or IPv6. */
MFP_UDP, /* On IPv4 or IPv6. */
+ MFP_ICMPV4,
MFP_ICMPV6,
MFP_ICMPV6,
- MFP_ICMP_ANY,
/* L2+L3+L4 requirements. */
MFP_ND,
/* 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;
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). */
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. */
};
/* 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);
/* 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 *);
/* 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 *);
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);
void mf_get(const struct mf_field *, const struct cls_rule *,
union mf_value *value, union mf_value *mask);