According to the ovs-fields manpage, 'TLVs must be ordered so that a field’s prerequisites are satisfied before if is parsed'. However, a match pattern like 'tcp,ipv6' can be parsed as 'tcp6', meanwhile 'ipv6,tcp' is parsed as 'tcp'. So a limitation here make sure that the order should be respected.
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 -- 2.33.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
