Signed-off-by: Wan Junjie <[email protected]>
---
lib/ofp-flow.c | 3 +++
tests/ofproto-dpif.at | 8 ++++----
tests/ovs-ofctl.at | 15 +++++++++++++++
3 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/lib/ofp-flow.c b/lib/ofp-flow.c
index 3bc744f78..db9b75c7b 100644
--- a/lib/ofp-flow.c
+++ b/lib/ofp-flow.c
@@ -1580,6 +1580,9 @@ parse_ofp_str__(struct ofputil_flow_mod *fm, int command,
char *string,
char *error = NULL;
if (ofp_parse_protocol(name, &p)) {
+ if (match.flow.nw_proto) {
+ return xstrdup("TLVs must be ordered");
+ }
match_set_dl_type(&match, htons(p->dl_type));
if (p->nw_proto) {
match_set_nw_proto(&match, p->nw_proto);
diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
index 728243183..a4a7ab5fb 100644
--- a/tests/ofproto-dpif.at
+++ b/tests/ofproto-dpif.at
@@ -11629,14 +11629,14 @@ table=1,priority=1,action=drop
dnl
dnl Table 2
dnl
-table=2,priority=10,in_port=1,tcp,ct_zone=1,ct_state=+trk+new,tcp,action=ct(commit,zone=1),ct(table=3,zone=2)
-table=2,priority=10,in_port=1,tcp,ct_zone=1,ct_state=+trk+est,tcp,action=ct(table=3,zone=2)
+table=2,priority=10,in_port=1,tcp,ct_zone=1,ct_state=+trk+new,action=ct(commit,zone=1),ct(table=3,zone=2)
+table=2,priority=10,in_port=1,tcp,ct_zone=1,ct_state=+trk+est,action=ct(table=3,zone=2)
table=2,priority=1,action=drop
dnl
dnl Table 3
dnl
-table=3,priority=10,in_port=1,tcp,ct_zone=2,ct_state=+trk+new,tcp,action=ct(commit,zone=2),4
-table=3,priority=10,in_port=1,tcp,ct_zone=2,ct_state=+trk+est,tcp,action=3
+table=3,priority=10,in_port=1,tcp,ct_zone=2,ct_state=+trk+new,action=ct(commit,zone=2),4
+table=3,priority=10,in_port=1,tcp,ct_zone=2,ct_state=+trk+est,action=3
table=2,priority=1,action=drop
])
diff --git a/tests/ovs-ofctl.at b/tests/ovs-ofctl.at
index a8934051e..b933924b8 100644
--- a/tests/ovs-ofctl.at
+++ b/tests/ovs-ofctl.at
@@ -381,6 +381,21 @@ do
done
AT_CLEANUP
+AT_SETUP([ovs-ofctl parse-flow with protocol order])
+for test_case in \
+ 'tcp,ip' \
+ 'tcp,ipv6' \
+ 'udp,ip' \
+ 'udp,ip6'
+do
+ set $test_case
+ field=$1
+ AT_CHECK_UNQUOTED([ovs-ofctl parse-flow "$field,actions=drop"], [1], [],
+[ovs-ofctl: TLVs must be ordered
+])
+done
+AT_CLEANUP
+
AT_SETUP([ovs-ofctl action inconsistency (OpenFlow 1.1)])
OVS_VSWITCHD_START
add_of_ports br0 1 2 3