On 1/17/25 3:06 PM, Ales Musil wrote:
> On Fri, Jan 17, 2025 at 2:49 PM Dumitru Ceara <[email protected]> wrote:
>
>> On 1/13/25 1:11 PM, Lorenzo Bianconi wrote:
>>> Similar to commit 1431276926 ("controller: fix ovn patch port
>>> incremental processing"), update peer logical flows when the related
>>> patch port is removed.
>>>
>>> Reported-at: https://issues.redhat.com/browse/FDP-947
>>> Signed-off-by: Lorenzo Bianconi <[email protected]>
>>> ---
>>
>> Hi Lorenzo,
>>
>>> Changes in v2:
>>> - use OFTABLE_LOG_TO_PHY for table 65
>>> ---
>>> controller/physical.c | 14 ++++++++-----
>>> tests/ovn.at | 47 +++++++++++++++++++++++++++++++++++++++++++
>>> 2 files changed, 56 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/controller/physical.c b/controller/physical.c
>>> index c56c73c20..affa559d5 100644
>>> --- a/controller/physical.c
>>> +++ b/controller/physical.c
>>> @@ -2413,12 +2413,16 @@ physical_handle_flows_for_lport(const struct
>> sbrec_port_binding *pb,
>>>
>>> if (!removed) {
>>> physical_eval_port_binding(p_ctx, pb, flow_table);
>>> - if (!strcmp(pb->type, "patch")) {
>>> - const struct sbrec_port_binding *peer =
>>> - get_binding_peer(p_ctx->sbrec_port_binding_by_name, pb);
>>> - if (peer) {
>>> - physical_eval_port_binding(p_ctx, peer, flow_table);
>>> + }
>>> +
>>> + if (!strcmp(pb->type, "patch")) {
>>> + const struct sbrec_port_binding *peer =
>>> + get_binding_peer(p_ctx->sbrec_port_binding_by_name, pb);
>>> + if (peer) {
>>> + if (removed) {
>>> + ofctrl_remove_flows(flow_table, &peer->header_.uuid);
>>> }
>>> + physical_eval_port_binding(p_ctx, peer, flow_table);
>>
>> I'm not sure if this works correctly. If "!removed", e.g., when the LSP
>> patch port is updated, we won't remove the flows. Won't that cause
>> stale flows?
>>
>> I'm not sure of what the right way to fix this is. For example, if a
>> pb.type changes from "patch" to something else we won't be removing the
>> flows here. Because pb->type is already different.
>>
>> CC-ing Ales, Numan in case they have ideas.
>>
>> Regards,
>> Dumitru
>>
>
> Hi Dumitru and Lorenzo,
>
> As discussed offline we should probably fall back to full recompute
> once we detect type change. The type shouldn't change that often so
> it shouldn't be any performance hit. As for the part when the type
> stays the same I think we need to always remove flows for peer and
> install them again, does that make sense?
>
Sounds reasonable to me. Lorenzo, would you have time to prepare a new
revision?
Thanks,
Dumitru
>
>>> }
>>> }
>>>
>>> diff --git a/tests/ovn.at b/tests/ovn.at
>>> index de01a649f..3aad19a19 100644
>>> --- a/tests/ovn.at
>>> +++ b/tests/ovn.at
>>> @@ -40752,3 +40752,50 @@ AT_CHECK([as hv1 ovs-ofctl dump-flows br-int
>> table=OFTABLE_PHY_TO_LOG | grep -v
>>> OVN_CLEANUP([hv1],[hv2])
>>> AT_CLEANUP
>>> ])
>>> +
>>> +OVN_FOR_EACH_NORTHD([
>>> +AT_SETUP([requested-tnl-key-recompute])
>>> +AT_KEYWORDS([requested-tnl-key-recompute])
>>> +
>>> +m4_define([OFTABLE_LOG_TO_PHY], [65])
>>> +
>>> +ovn_start
>>> +net_add n1
>>> +
>>> +check ovn-nbctl ls-add ls
>>> +check ovn-nbctl lsp-add ls lsp -- lsp-set-addresses lsp
>> "00:00:10:01:02:01 10.0.0.1"
>>> +
>>> +check ovn-nbctl lr-add lr
>>> +check ovn-nbctl set logical_router lr
>> options:mac_binding_age_threshold=3600
>>> +check ovn-nbctl lrp-add lr lr-ls 00:00:00:00:ff:01 10.0.0.254/24
>>> +check ovn-nbctl lsp-add ls ls-lr
>>> +check ovn-nbctl lsp-set-type ls-lr router
>>> +check ovn-nbctl lsp-set-addresses ls-lr router
>>> +check ovn-nbctl lsp-set-options ls-lr router-port=lr-ls
>>> +
>>> +sim_add hv1
>>> +
>>> +as hv1
>>> +ovs-vsctl add-br br-phys
>>> +ovn_attach n1 br-phys 192.168.0.1
>>> +ovs-vsctl set open . external_ids:ovn-bridge-mappings=physnet1:br-phys
>>> +ovs-vsctl add-port br-int vif -- set Interface vif
>> external-ids:iface-id=lsp
>>> +
>>> +check ovn-nbctl --wait=hv sync
>>> +wait_for_ports_up
>>> +
>>> +check ovn-nbctl --wait=hv set logical_router_port lr-ls
>> options:requested-tnl-key=42
>>> +ls_tnl_key=$(fetch_column datapath_binding tunnel_key
>> external_ids:name=ls)
>>> +AT_CHECK([ovs-ofctl dump-flows br-int table=OFTABLE_LOG_TO_PHY | grep
>> metadata=0x${ls_tnl_key} | grep -q load:0x2a->NXM_NX_REG14])
>>> +
>>> +check ovn-nbctl lrp-del lr-ls
>>> +check ovn-nbctl \
>>> + -- lrp-add lr lr-ls 00:00:00:00:10:00 192.168.10.1/24 \
>>> + -- set logical_router_port lr-ls options:requested-tnl-key=43
>>> +check ovn-nbctl --wait=hv sync
>>> +
>>> +AT_CHECK([ovs-ofctl dump-flows br-int table=OFTABLE_LOG_TO_PHY | grep
>> metadata=0x${ls_tnl_key} | grep -q load:0x2b->NXM_NX_REG14])
>>> +
>>> +OVN_CLEANUP([hv1])
>>> +AT_CLEANUP
>>> +])
>>
>>
> Thanks,
> Ales
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev