diff options
author | Ben Pfaff <blp@nicira.com> | 2014-09-11 22:09:03 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-10-08 16:36:43 -0700 |
commit | bad8a439942c517d660720bdf2f113493081c336 (patch) | |
tree | 8d2820b8302863ef8065c0ccca0fa3da91821f7d /lib/bundle.c | |
parent | 743c159b5f30a8395e6e7204ce24429a59b87275 (diff) | |
download | openvswitch-bad8a439942c517d660720bdf2f113493081c336.tar.gz |
ofp-actions: Support experimenter OXMs in Nicira extensions.
Some of the Nicira extension actions include fixed-size 32-bit members that
designate NXM fields. These actions can't accommodate 64-bit experimenter
OXMs, so we need to figure out some kind of solution. This commit does
that, in different ways for different actions.
For some actions, I did not think it was worthwhile to worry about
experimenter OXM, so I just disabled use of them. This is what I did for
bundle, learn, and multipath actions.
Other actions could be gracefully reinterpreted to support experimenter
OXM. This is true of reg_move, which use NXM headers only at the end of
the action and such that using an experimenter OXM would make the action
longer (which unambigously signals to older OVS that the action is an
error, which is desired behavior since older OVS cannot interpret this
action). The stack push and pop actions are also in this category.
reg_load was the most frustrating case. In OpenFlow 1.5 we had already
eliminated this action in favor of OF1.5+ set_field. In other OpenFlow
versions, though, reg_load is more powerful than set_field because it
can modify partial fields. This commit therefore adds a new variant of
reg_load, called reg_load2, which is simply OF1.5+ set_field with a Nicira
extension header on it.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
Diffstat (limited to 'lib/bundle.c')
-rw-r--r-- | lib/bundle.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/bundle.c b/lib/bundle.c index a514ebb64..793eb82a9 100644 --- a/lib/bundle.c +++ b/lib/bundle.c @@ -207,6 +207,11 @@ bundle_parse__(const char *s, char **save_ptr, if (error) { return error; } + + if (!mf_nxm_header(bundle->dst.field->id)) { + return xasprintf("%s: experimenter OXM field '%s' not supported", + s, dst); + } } return NULL; |