summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@ovn.org>2019-04-30 13:25:48 -0700
committerBen Pfaff <blp@ovn.org>2019-06-09 16:01:09 -0700
commit0cb2fe2f6e87bc1a3ca15d1a8ab9317fc2b6a9e6 (patch)
tree17fac4062a6fd28700325d9ed682a617fe1eb62c
parentb1986b08b97cb063be97ba3a7c5cb885e10e1ffe (diff)
downloadopenvswitch-0cb2fe2f6e87bc1a3ca15d1a8ab9317fc2b6a9e6.tar.gz
ofp-actions: Make encap action really require OF1.3+.
This action is only supported in OpenFlow 1.3 and later, but the parser from text allowed it in earlier versions, which could cause confusion, e.g.: $ ovs-ofctl parse-flow 'actions=encap(ethernet())' usable protocols: any chosen protocol: OpenFlow10-table_id 2019-04-30T20:19:59Z|00001|ofp_actions|WARN|unknown OpenFlow10 action for vendor 0x2320 and type 46 2019-04-30T20:19:59Z|00002|ofp_actions|WARN|bad action at offset 0 (OFPBAC_BAD_VENDOR_TYPE): 00000000 ff ff 00 10 00 00 23 20-00 2e 00 00 00 00 00 00 OFPT_FLOW_MOD (xid=0x1): ***decode error: OFPBAC_BAD_VENDOR_TYPE*** 00000000 01 0e 00 58 00 00 00 01-00 38 20 ff 00 00 00 00 |...X.....8 .....| 00000010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 |................| 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 00 |................| 00000040 ff ff ff ff ff ff 00 00-ff ff 00 10 00 00 23 20 |..............# | 00000050 00 2e 00 00 00 00 00 00- |........ | Acked-by: Numan Siddique <nusiddiq@redhat.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
-rw-r--r--lib/ofp-actions.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
index 1a24063d0..182277da8 100644
--- a/lib/ofp-actions.c
+++ b/lib/ofp-actions.c
@@ -4430,6 +4430,8 @@ parse_ed_props(const uint16_t prop_class, char **arg, int *n_props, struct ofpbu
static char * OVS_WARN_UNUSED_RESULT
parse_ENCAP(char *arg, const struct ofpact_parse_params *pp)
{
+ *pp->usable_protocols &= OFPUTIL_P_OF13_UP;
+
struct ofpact_encap *encap;
char *key, *value, *str;
char *error = NULL;