diff options
author | Ben Pfaff <blp@nicira.com> | 2012-06-26 10:52:34 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2012-06-26 22:02:52 -0700 |
commit | b5e5143b6a808d3463b205c36d49cdd9a9a9e4c3 (patch) | |
tree | 2c0fef011cbe3613d55e72ef5cb91074a17ded44 /lib/meta-flow.h | |
parent | 24016f5a45e873dd83feb41c0ca255377a6902d2 (diff) |
meta-flow: Accept NXM and OXM field names, support NXM and OXM for output.
This commit makes actions that accept NXM header values also accept OXM
header values and accept OXM field names where previously only NXM field
names were accepted.
This makes it possible to add new OXM fields that don't have NXM header
values, e.g. the OXM "metadata" field.
Inspired by Joe Stringer's patch:
http://openvswitch.org/pipermail/dev/2012-June/018344.html
Reported-by: Joe Stringer <joe@wand.net.nz>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/meta-flow.h')
-rw-r--r-- | lib/meta-flow.h | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/meta-flow.h b/lib/meta-flow.h index ffde5cc3..82bb13f9 100644 --- a/lib/meta-flow.h +++ b/lib/meta-flow.h @@ -188,21 +188,30 @@ struct mf_field { enum mf_prereqs prereqs; bool writable; /* May be written by actions? */ - /* NXM properties. + /* NXM and OXM 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. */ - - /* OXM properties */ - uint32_t oxm_header; /* Field id in the OXM basic class, - * an OXM_* constant. - * Ignored if oxm_name is NULL */ - const char *oxm_name; /* The OXM_* constant's name, - * NULL if the field is not present - * in the OXM basic class */ - + * There are the following possibilities for these members for a given + * mf_field: + * + * - Neither NXM nor OXM defines such a field: these members will all be + * zero or NULL. + * + * - NXM and OXM both define such a field: nxm_header and oxm_header will + * both be nonzero and different, similarly for nxm_name and oxm_name. + * + * - Only NXM or only OXM defines such a field: nxm_header and oxm_header + * will both have the same value (either an OXM_* or NXM_* value) and + * similarly for nxm_name and oxm_name. + * + * Thus, 'nxm_header' is the appropriate header to use when outputting an + * NXM formatted match, since it will be an NXM_* constant when possible + * for compatibility with OpenFlow implementations that expect that, with + * OXM_* constants used for fields that OXM adds. Conversely, 'oxm_header' + * is the header to use when outputting an OXM formatted match. */ + uint32_t nxm_header; /* An NXM_* (or OXM_*) constant. */ + const char *nxm_name; /* The nxm_header constant's name. */ + uint32_t oxm_header; /* An OXM_* (or NXM_*) constant. */ + const char *oxm_name; /* The oxm_header constant's name */ }; /* The representation of a field's value. */ |