On Wed, Oct 2, 2024 at 5:32 AM Ales Musil <[email protected]> wrote:
>
> On Tue, Oct 1, 2024 at 5:17 PM Xavier Simonart <[email protected]> wrote:
>
> > Delete flows on localnet port deletion, and add localnet
> > related flows when peer ports are added. This was properly done when
> > recomputing, but not when doing IP.
> >
> > When peer ports are added, some flows such as chassis_mac flows
> > must be added.
> >
> > Signed-off-by: Xavier Simonart <[email protected]>
> >
> > ---
> > v2: rebase on origin/main for scapy fix.
> > ---
> >  controller/physical.c |  9 ++++---
> >  tests/ovn.at          | 58 +++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 63 insertions(+), 4 deletions(-)
> >
> > diff --git a/controller/physical.c b/controller/physical.c
> > index 16e312f9d..762a2e756 100644
> > --- a/controller/physical.c
> > +++ b/controller/physical.c
> > @@ -699,7 +699,7 @@ put_replace_chassis_mac_flows(const struct shash
> > *ct_zones,
> >          put_resubmit(OFTABLE_LOG_INGRESS_PIPELINE, ofpacts_p);
> >          ofctrl_add_flow(flow_table, OFTABLE_PHY_TO_LOG, 180,
> >                          rport_binding->header_.uuid.parts[0],
> > -                        &match, ofpacts_p, hc_uuid);
> > +                        &match, ofpacts_p, &localnet_port->header_.uuid);
> >
> >          /* Provide second search criteria, i.e localnet port's
> >           * vlan ID for conjunction flow */
> > @@ -719,7 +719,7 @@ put_replace_chassis_mac_flows(const struct shash
> > *ct_zones,
> >          conj->clause = 1;
> >          ofctrl_add_flow(flow_table, OFTABLE_PHY_TO_LOG, 180,
> >                          rport_binding->header_.uuid.parts[0],
> > -                        &match, ofpacts_p, hc_uuid);
> > +                        &match, ofpacts_p, &localnet_port->header_.uuid);
> >      }
> >  }
> >
> > @@ -2392,8 +2392,9 @@ physical_handle_flows_for_lport(const struct
> > sbrec_port_binding *pb,
> >      struct local_datapath *ldp =
> >          get_local_datapath(p_ctx->local_datapaths,
> >                             pb->datapath->tunnel_key);
> > -    if (!strcmp(pb->type, "external")) {
> > -        /* External lports have a dependency on the localnet port.
> > +    if (!strcmp(pb->type, "external") ||
> > +        !strcmp(pb->type, "patch") || !strcmp(pb->type, "l3gateway")) {
> > +        /* Those lports have a dependency on the localnet port.
> >           * We need to remove the flows of the localnet port as well
> >           * and re-consider adding the flows for it.
> >           */
> > diff --git a/tests/ovn.at b/tests/ovn.at
> > index 826b52051..d2b14be53 100644
> > --- a/tests/ovn.at
> > +++ b/tests/ovn.at
> > @@ -39011,3 +39011,61 @@ OVN_CLEANUP([hv1],[hv2])
> >
> >  AT_CLEANUP
> >  ])
> > +
> > +OVN_FOR_EACH_NORTHD([
> > +AT_SETUP([localnet port flows after deletion])
> > +ovn_start
> > +net_add n1
> > +
> > +check ovn-nbctl ls-add sw0
> > +
> > +for i in 1 2; do
> > +    check ovn-nbctl lsp-add sw0 sw0-p${i} -- lsp-set-addresses sw0-p${i}
> > "00:00:10:01:02:0${i} 10.0.0.${i}"
> > +    sim_add hv${i}
> > +    as hv${i}
> > +    ovs-vsctl add-br br-phys
> > +    ovn_attach n1 br-phys 192.168.0.${i}
> > +    ovs-vsctl set open . external_ids:ovn-bridge-mappings=physnet1:br-phys
> > +    ovs-vsctl add-port br-int vif${i} -- \
> > +        set Interface vif${i} external-ids:iface-id=sw0-p${i} \
> > +                              options:tx_pcap=hv${i}/vif${i}-tx.pcap \
> > +                              options:rxq_pcap=hv${i}/vif${i}-rx.pcap
> > +done
> > +
> > +check ovn-nbctl lr-add lr0
> > +check ovn-nbctl lrp-add lr0 lr0-sw0 00:00:00:00:ff:01 10.0.0.254/24
> > +check ovn-nbctl lsp-add sw0 sw0-lr0
> > +check ovn-nbctl lsp-set-type sw0-lr0 router
> > +check ovn-nbctl lsp-set-addresses sw0-lr0 router
> > +check ovn-nbctl lsp-set-options sw0-lr0 router-port=lr0-sw0
> > +
> > +check ovn-nbctl --wait=hv sync
> > +wait_for_ports_up
> > +
> > +# We should not have any flows in table OFTABLE_PHY_TO_LOG from in_port
> > different from vif1 and ovn-hv2-0
> > +OVN_WAIT_REMOTE_INPUT_FLOWS(["hv1"],["hv2"])
> > +of1=$(as hv1 ovs-vsctl --bare --columns ofport find Interface name=vif1)
> > +of2=$(as hv1 ovs-vsctl --bare --columns ofport find Interface
> > name=ovn-hv2-0)
> > +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_PHY_TO_LOG |
> > grep -v NXST_FLOW | grep "in_port=" | grep -v "in_port=$of1" | grep -v
> > "in_port=$of2" | wc -l], [0], [dnl
> > +0
> > +])
> > +
> > +# Add localnet port to sw0
> > +check ovn-nbctl lsp-add sw0 ln-sw0 -- lsp-set-addresses ln-sw0 unknown --
> > lsp-set-type ln-sw0 localnet
> > +check ovn-nbctl --wait=hv lsp-set-options ln-sw0 network_name=physnet1 --
> > set logical_switch_port ln-sw0 tag_request=100
> > +
> > +OVN_WAIT_PATCH_PORT_FLOWS(["ln-sw0"], ["hv1"])
> > +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_PHY_TO_LOG |
> > grep -v NXST_FLOW | grep "in_port=" | grep -v "in_port=$of1" | grep -v
> > "in_port=$of2" | wc -l], [0], [dnl
> > +2
> > +])
> > +
> > +# Remove localnet port from sw0. Peer-ports flows should be deleted.
> > +check ovn-nbctl --wait=hv lsp-del ln-sw0
> > +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_PHY_TO_LOG |
> > grep -v NXST_FLOW | grep "in_port=" | grep -v "in_port=$of1" | grep -v
> > "in_port=$of2" | wc -l], [0], [dnl
> > +0
> > +])
> > +
> > +OVN_CLEANUP([hv1],[hv2])
> > +
> > +AT_CLEANUP
> > +])
> > --
> > 2.31.1
> >
> > _______________________________________________
> > dev mailing list
> > [email protected]
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
> >
> Looks good to me, thanks.
>
> Acked-by: Ales Musil <[email protected]>

Thanks.  Applied to main and backported till 23.09.

Numan

>
>
> --
>
> Ales Musil
>
> Senior Software Engineer - OVN Core
>
> Red Hat EMEA <https://www.redhat.com>
>
> [email protected]
> <https://red.ht/sig>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to