The match wasn't cleared which led to matches being appended together
and the ovn-controller failed to parse them.
Fixes: 3faadc76ad71 ("northd: Fix pmtud for non routed traffic.")
Signed-off-by: Ales Musil <[email protected]>
---
northd/northd.c | 3 ++-
tests/ovn-northd.at | 24 ++++++++++++++++++++++--
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/northd/northd.c b/northd/northd.c
index 495b838fc..a78cbcd53 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -11989,9 +11989,9 @@ build_lswitch_icmp_packet_toobig_admin_flows(
{
ovs_assert(op->nbsp);
- ds_clear(match);
if (!lsp_is_router(op->nbsp)) {
for (size_t i = 0; i < op->n_lsp_addrs; i++) {
+ ds_clear(match);
ds_put_format(match,
"((ip4 && icmp4.type == 3 && icmp4.code == 4) ||"
" (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&"
@@ -12011,6 +12011,7 @@ build_lswitch_icmp_packet_toobig_admin_flows(
return;
}
+ ds_clear(match);
if (peer->od->is_gw_router) {
ds_put_format(match,
"((ip4 && icmp4.type == 3 && icmp4.code == 4) ||"
diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index 7f579630c..f3ffb4a6d 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -8752,8 +8752,8 @@ ovn_strip_lflows ], [0], [dnl
table=??(ls_out_check_port_sec), priority=100 , match=(eth.mcast),
action=(reg0[[15]] = 0; next;)
])
-check ovn-nbctl lsp-add sw0 sw0p1 -- lsp-set-addresses sw0p1
"00:00:00:00:00:01"
-check ovn-nbctl lsp-add sw0 sw0p2 -- lsp-set-addresses sw0p2
"00:00:00:00:00:02"
+check ovn-nbctl lsp-add sw0 sw0p1 -- lsp-set-addresses sw0p1
"00:00:00:00:00:01" "00:00:00:00:01:01"
+check ovn-nbctl lsp-add sw0 sw0p2 -- lsp-set-addresses sw0p2
"00:00:00:00:00:02" "00:00:00:00:02:02"
check ovn-nbctl --wait=sb lsp-add sw0 localnetport -- lsp-set-type
localnetport localnet
ovn-sbctl dump-flows sw0 > sw0flows
@@ -8768,11 +8768,15 @@ ovn_strip_lflows ], [0], [dnl
table=??(ls_in_check_port_sec), priority=105 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
flags.tunnel_rx == 1), action=(drop;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:01:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:02:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=50 , match=(1),
action=(reg0[[15]] = check_in_port_sec(); next;)
table=??(ls_in_l2_lkup ), priority=0 , match=(1), action=(outport =
get_fdb(eth.dst); next;)
table=??(ls_in_l2_lkup ), priority=110 , match=(eth.dst ==
$svc_monitor_mac && (tcp || icmp || icmp6)), action=(handle_svc_check(inport);)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:01), action=(outport = "sw0p1"; output;)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:02), action=(outport = "sw0p2"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:01:01), action=(outport = "sw0p1"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:02:02), action=(outport = "sw0p2"; output;)
table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast),
action=(outport = "_MC_flood"; output;)
table=??(ls_in_l2_unknown ), priority=0 , match=(1), action=(output;)
table=??(ls_in_l2_unknown ), priority=50 , match=(outport == "none"),
action=(drop;)
@@ -8797,11 +8801,15 @@ ovn_strip_lflows ], [0], [dnl
table=??(ls_in_check_port_sec), priority=105 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
flags.tunnel_rx == 1), action=(drop;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:01:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:02:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=50 , match=(1),
action=(reg0[[15]] = check_in_port_sec(); next;)
table=??(ls_in_l2_lkup ), priority=0 , match=(1), action=(outport =
get_fdb(eth.dst); next;)
table=??(ls_in_l2_lkup ), priority=110 , match=(eth.dst ==
$svc_monitor_mac && (tcp || icmp || icmp6)), action=(handle_svc_check(inport);)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:01), action=(outport = "sw0p1"; output;)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:02), action=(outport = "sw0p2"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:01:01), action=(outport = "sw0p1"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:02:02), action=(outport = "sw0p2"; output;)
table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast),
action=(outport = "_MC_flood"; output;)
table=??(ls_in_l2_unknown ), priority=0 , match=(1), action=(output;)
table=??(ls_in_l2_unknown ), priority=50 , match=(outport == "none"),
action=(drop;)
@@ -8827,11 +8835,15 @@ ovn_strip_lflows ], [0], [dnl
table=??(ls_in_check_port_sec), priority=105 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
flags.tunnel_rx == 1), action=(drop;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:01:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:02:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=50 , match=(1),
action=(reg0[[15]] = check_in_port_sec(); next;)
table=??(ls_in_l2_lkup ), priority=0 , match=(1), action=(outport =
get_fdb(eth.dst); next;)
table=??(ls_in_l2_lkup ), priority=110 , match=(eth.dst ==
$svc_monitor_mac && (tcp || icmp || icmp6)), action=(handle_svc_check(inport);)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:01), action=(drop;)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:02), action=(outport = "sw0p2"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:01:01), action=(drop;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:02:02), action=(outport = "sw0p2"; output;)
table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast),
action=(outport = "_MC_flood"; output;)
table=??(ls_in_l2_unknown ), priority=0 , match=(1), action=(output;)
table=??(ls_in_l2_unknown ), priority=50 , match=(outport == "none"),
action=(drop;)
@@ -8856,12 +8868,16 @@ ovn_strip_lflows ], [0], [dnl
table=??(ls_in_check_port_sec), priority=105 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
flags.tunnel_rx == 1), action=(drop;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:01:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:02:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=50 , match=(1),
action=(reg0[[15]] = check_in_port_sec(); next;)
table=??(ls_in_check_port_sec), priority=70 , match=(inport == "sw0p2"),
action=(set_queue(10); reg0[[15]] = check_in_port_sec(); next;)
table=??(ls_in_l2_lkup ), priority=0 , match=(1), action=(outport =
get_fdb(eth.dst); next;)
table=??(ls_in_l2_lkup ), priority=110 , match=(eth.dst ==
$svc_monitor_mac && (tcp || icmp || icmp6)), action=(handle_svc_check(inport);)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:01), action=(drop;)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:02), action=(outport = "sw0p2"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:01:01), action=(drop;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:02:02), action=(outport = "sw0p2"; output;)
table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast),
action=(outport = "_MC_flood"; output;)
table=??(ls_in_l2_unknown ), priority=0 , match=(1), action=(output;)
table=??(ls_in_l2_unknown ), priority=50 , match=(outport == "none"),
action=(drop;)
@@ -8888,6 +8904,8 @@ ovn_strip_lflows ], [0], [dnl
table=??(ls_in_check_port_sec), priority=105 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
flags.tunnel_rx == 1), action=(drop;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:00:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:01:01 && outport == "sw0p1" &&
!is_chassis_resident("sw0p1") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
+ table=??(ls_in_check_port_sec), priority=110 , match=(((ip4 && icmp4.type
== 3 && icmp4.code == 4) || (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&
eth.src == 00:00:00:00:02:02 && outport == "sw0p2" &&
!is_chassis_resident("sw0p2") && flags.tunnel_rx == 1), action=(outport <->
inport; next;)
table=??(ls_in_check_port_sec), priority=50 , match=(1),
action=(reg0[[15]] = check_in_port_sec(); next;)
table=??(ls_in_check_port_sec), priority=70 , match=(inport ==
"localnetport"), action=(set_queue(10); reg0[[15]] = check_in_port_sec(); next;)
table=??(ls_in_check_port_sec), priority=70 , match=(inport == "sw0p1"),
action=(reg0[[14]] = 1; next(pipeline=ingress, table=??);)
@@ -8896,6 +8914,8 @@ ovn_strip_lflows ], [0], [dnl
table=??(ls_in_l2_lkup ), priority=110 , match=(eth.dst ==
$svc_monitor_mac && (tcp || icmp || icmp6)), action=(handle_svc_check(inport);)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:01), action=(outport = "sw0p1"; output;)
table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:00:02), action=(outport = "sw0p2"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:01:01), action=(outport = "sw0p1"; output;)
+ table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst ==
00:00:00:00:02:02), action=(outport = "sw0p2"; output;)
table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast),
action=(outport = "_MC_flood"; output;)
table=??(ls_in_l2_unknown ), priority=0 , match=(1), action=(output;)
table=??(ls_in_l2_unknown ), priority=50 , match=(outport == "none"),
action=(drop;)
--
2.45.0
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev