On Thu, May 9, 2024 at 2:17 PM Numan Siddique <num...@ovn.org> wrote:
>
> On Thu, May 9, 2024 at 5:54 AM Shibir Basak <shibir.ba...@nutanix.com> wrote:
> >
> > Hi team,
> >
> > Could someone please review these changes?
>
> Sorry for the delay.  I'll take a look and come back.

Thanks for the patch.  I applied it to the main with the below changes.

---------------------------------------------------------------------------------------------
diff --git a/AUTHORS.rst b/AUTHORS.rst
index b4e0a2695d..2f5713d8b6 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -366,6 +366,7 @@ Shan Wei                           davids...@tencent.com
 Sharon Krendel                     thekaf...@gmail.com
 Shashank Ram                       r...@vmware.com
 Shashwat Srivastava                shashwat.srivast...@tcs.com
+Shibir-basak                       shibir.ba...@nutanix.com
 Shih-Hao Li                        shi...@vmware.com
 Shu Shen                           shu.s...@radisys.com
 Simon Horman                       ho...@ovn.org
diff --git a/NEWS b/NEWS
index 3b5e93dc9a..9883fd2ae9 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,9 @@ Post v24.03.0
     external-ids, the option is no longer needed as it became effectively
     "true" for all scenarios.
   - Added DHCPv4 relay support.
+  - A new LSP option "force_fdb_lookup" has been added to ensure the additional
+    MAC addresses configured on the LSP with "unknown", are learnt via the
+    OVN native FDB.

 OVN v24.03.0 - 01 Mar 2024
 --------------------------
diff --git a/northd/ovn-northd.8.xml b/northd/ovn-northd.8.xml
index 2e588e28f6..83cdbdd9f0 100644
--- a/northd/ovn-northd.8.xml
+++ b/northd/ovn-northd.8.xml
@@ -2038,6 +2038,12 @@ output;
           also forwarded to the  <code>MC_UNKNOWN</code> multicast group.
         </p>

+        <p>
+          The above flow is not added if the logical switch port is of type
+          VIF, has <code>unknown</code> as one of its address and has the
+          option <code>options:force_fdb_lookup</code> set to true.
+        </p>
+
         <p>
           For the Ethernet address on a logical switch port of type
           <code>router</code>, when that logical switch port's

---------------------------------------------------------------------------------------------

Numan

>
> Numan
>
> >
> > Thanks,
> > Shibir Basak
> >
> > > On 24-Apr-2024, at 12:15 PM, Shibir Basak <shibir.ba...@nutanix.com> 
> > > wrote:
> > >
> > > This option is applicable only if the lsp is of default 'type'
> > > i.e. type=empty_string (which is a VM (or VIF) interface) and the
> > > lsp also has 'unknown' addresses configured.
> > > If lsp option 'force_fdb_lookup' is set to true, mac addresses
> > > of the lsp (if configured) are not installed in the l2 lookup
> > > table of the Logical Switch pipeline. However, MAC addresses
> > > are learnt using the FDB Table.
> > >
> > > Usecase:
> > > =========
> > > This option is required to reduce packet loss when VM is being
> > > migrated across AZs (via VXLAN tunnel). lsp is configured in both
> > > AZs on different logical switches which are sharing the same IP
> > > subnet. If the port has unknown address set along with MAC, IP
> > > then, any packet destined to VM's MAC on destination AZ will get
> > > forwarded locally, which may lead to packet loss during VM migration.
> > >
> > > This option is useful to reduce packet loss during VM migration
> > > by forcing the logical switch to learn MAC using FDB.
> > >
> > > The other way to address this issue is to use pkt_clone_type
> > > option but this causes too much of packet duplication when there
> > > are multiple ports with unknown address in the logical switch.
> > >
> > > Signed-off-by: shibir-basak <shibir.ba...@nutanix.com>
> > > ---
> > > northd/northd.c     | 16 ++++++++++++++++
> > > ovn-nb.xml          | 11 +++++++++++
> > > tests/ovn-northd.at | 38 ++++++++++++++++++++++++++++++++++++++
> > > 3 files changed, 65 insertions(+)
> > >
> > > diff --git a/northd/northd.c b/northd/northd.c
> > > index 37f443e70..c29396716 100644
> > > --- a/northd/northd.c
> > > +++ b/northd/northd.c
> > > @@ -1380,6 +1380,16 @@ lrport_is_enabled(const struct 
> > > nbrec_logical_router_port *lrport)
> > >     return !lrport->enabled || *lrport->enabled;
> > > }
> > >
> > > +static bool
> > > +lsp_force_fdb_lookup(const struct ovn_port *op)
> > > +{
> > > +    /* To enable FDB Table lookup on a logical switch port, it has to be
> > > +     * of 'type' empty_string and "addresses" must have "unknown".
> > > +     */
> > > +    return !op->nbsp->type[0] && op->has_unknown &&
> > > +        smap_get_bool(&op->nbsp->options, "force_fdb_lookup", false);
> > > +}
> > > +
> > > static struct ovn_port *
> > > ovn_port_get_peer(const struct hmap *lr_ports, struct ovn_port *op)
> > > {
> > > @@ -9479,6 +9489,12 @@ build_lswitch_ip_unicast_lookup(struct ovn_port 
> > > *op,
> > >
> > >         if (ovs_scan(op->nbsp->addresses[i],
> > >                     ETH_ADDR_SCAN_FMT, ETH_ADDR_SCAN_ARGS(mac))) {
> > > +            /* Skip adding flows related to the MAC address
> > > +             * as force FDB Lookup is enabled on the lsp.
> > > +             */
> > > +            if (lsp_force_fdb_lookup(op)) {
> > > +                continue;
> > > +            }
> > >             ds_clear(match);
> > >             ds_put_format(match, "eth.dst == "ETH_ADDR_FMT,
> > >                           ETH_ADDR_ARGS(mac));
> > > diff --git a/ovn-nb.xml b/ovn-nb.xml
> > > index b652046a7..4724d0537 100644
> > > --- a/ovn-nb.xml
> > > +++ b/ovn-nb.xml
> > > @@ -1262,6 +1262,17 @@
> > >           </p>
> > >         </column>
> > >
> > > +        <column name="options" key="force_fdb_lookup"
> > > +                type='{"type": "boolean"}'>
> > > +          This option is supported only if the Logical Switch Port is of
> > > +          default <ref column="type"/> (i.e. type set to empty_string) 
> > > and also
> > > +          <ref column="addresses"/> column contains <code>unknown</code>.
> > > +          If set to <code>true</code>, MAC addresses (if configured)
> > > +          are not installed in the l2 lookup table but the MAC addresses 
> > > are
> > > +          learnt and stored in the FDB table.
> > > +          The default value is <code>false</code>.
> > > +        </column>
> > > +
> > >         <column name="options" key="pkt_clone_type"
> > >                 type='{"type": "string", "enum": ["set", 
> > > ["mc_unknown"]]}'>
> > >           If set to mc_unknown, packets going to this VIF get cloned to 
> > > all
> > > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> > > index be006fb32..82e7a6574 100644
> > > --- a/tests/ovn-northd.at
> > > +++ b/tests/ovn-northd.at
> > > @@ -6886,6 +6886,44 @@ AT_CLEANUP
> > > ])
> > >
> > >
> > > +OVN_FOR_EACH_NORTHD_NO_HV([
> > > +AT_SETUP([check options: force_fdb_lookup for LSP])
> > > +ovn_start NORTHD_TYPE
> > > +ovn-nbctl ls-add S1
> > > +ovn-nbctl --wait=sb lsp-add S1 S1-vm1
> > > +ovn-nbctl --wait=sb lsp-add S1 S1-localnet
> > > +ovn-nbctl --wait=sb lsp-set-addresses S1-vm1 "50:54:00:00:00:01 
> > > 192.168.0.1" unknown
> > > +ovn-nbctl --wait=sb lsp-set-type S1-localnet localnet
> > > +
> > > +#Verify the flows before setting force_fdb_lookup option
> > > +ovn-sbctl dump-flows S1 > S1flows
> > > +AT_CAPTURE_FILE([S1flows])
> > > +
> > > +AT_CHECK([grep -e "ls_in_l2_lkup.*S1-vm1" S1flows | ovn_strip_lflows], 
> > > [0], [dnl
> > > +  table=??(ls_in_l2_lkup      ), priority=50   , match=(eth.dst == 
> > > 50:54:00:00:00:01), action=(outport = "S1-vm1"; output;)
> > > +])
> > > +
> > > +#Set the force_fdb_lookup option and verify the flows
> > > +ovn-nbctl --wait=sb set logical_switch_port S1-vm1 
> > > options:force_fdb_lookup=true
> > > +ovn-nbctl --wait=sb set logical_switch_port S1-localnet 
> > > options:force_fdb_lookup=true
> > > +
> > > +ovn-sbctl dump-flows S1 > S1flows
> > > +AT_CAPTURE_FILE([S1flows])
> > > +
> > > +#Verify the flows for default port type (VM port)
> > > +AT_CHECK([grep -e "ls_in_l2_lkup.*S1-vm1" S1flows | grep -e 
> > > "match=(eth.dst == 50:54:00:00:00:01)"], [1], [])
> > > +AT_CHECK([grep -e "ls_in_.*_fdb.*S1-vm1" S1flows | ovn_strip_lflows], 
> > > [0], [dnl
> > > +  table=??(ls_in_lookup_fdb   ), priority=100  , match=(inport == 
> > > "S1-vm1"), action=(reg0[[11]] = lookup_fdb(inport, eth.src); next;)
> > > +  table=??(ls_in_put_fdb      ), priority=100  , match=(inport == 
> > > "S1-vm1" && reg0[[11]] == 0), action=(put_fdb(inport, eth.src); next;)
> > > +])
> > > +
> > > +#Verify the flows for a non-default port type (localnet port)
> > > +AT_CHECK([grep -e "ls_in_.*_fdb.*S1-localnet" S1flows], [1], [])
> > > +
> > > +AT_CLEANUP
> > > +])
> > > +
> > > +
> > > OVN_FOR_EACH_NORTHD_NO_HV([
> > > AT_SETUP([check options:pkt_clone_type for LSP])
> > > ovn_start NORTHD_TYPE
> > > --
> > > 2.22.3
> > >
> >
> > _______________________________________________
> > dev mailing list
> > d...@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to