summaryrefslogtreecommitdiff
path: root/lib/bundle.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2014-09-11 22:09:03 -0700
committerBen Pfaff <blp@nicira.com>2014-10-08 16:36:43 -0700
commitbad8a439942c517d660720bdf2f113493081c336 (patch)
tree8d2820b8302863ef8065c0ccca0fa3da91821f7d /lib/bundle.c
parent743c159b5f30a8395e6e7204ce24429a59b87275 (diff)
downloadopenvswitch-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.c5
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;