[ovs-dev] [PATCH] ovn-vtep: fix arping from vtep-gw physical port

Darrell Ball dlu998 at gmail.com
Tue Sep 20 22:06:52 UTC 2016


On Tue, Sep 20, 2016 at 2:38 PM, Ramu Ramamurthy <ramu.ramamurthy at gmail.com>
wrote:

> >
> > Does the following diff work on your system?
> >
> >
> > diff --git a/ovn/northd/ovn-northd.8.xml b/ovn/northd/ovn-northd.8.xml
> > index 7797417..4f1cd89 100644
> > --- a/ovn/northd/ovn-northd.8.xml
> > +++ b/ovn/northd/ovn-northd.8.xml
> > @@ -421,8 +421,8 @@
> >
> >      <ul>
> >        <li>
> > -        Priority-100 flows to skip ARP responder if inport is of type
> > -        <code>localnet</code>, and advances directly to the next table.
> > +        Priority-100 flows to skip ARP responder if inport is not
> > associated
> > +        with a local VIF, and advances directly to the next table.
> >        </li>
> >
> >        <li>
> > diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
> > index 8c7e80c..bcb9738 100644
> > --- a/ovn/northd/ovn-northd.c
> > +++ b/ovn/northd/ovn-northd.c
> > @@ -2428,7 +2428,9 @@ build_lswitch_flows(struct hmap *datapaths, struct
> > hmap *ports,
> >              continue;
> >          }
> >
> > -        if (!strcmp(op->nbsp->type, "localnet")) {
> > +        /* Skip installing arp responder if the logical switch inport
> > +         * is not associated with a local VIF. */
> > +        if (strcmp(op->nbsp->type, "")) {
> >              ds_clear(&match);
> >              ds_put_format(&match, "inport == %s", op->json_key);
> >              ovn_lflow_add(lflows, op->od, S_SWITCH_IN_ARP_ND_RSP, 100,
>
> Yes, the above works, The above code skips the arp-responder for all
> non-vif ports
> (localnet, vtep, router, l2gateway). Is that ok ?
>

Actually, I was just going to fire off another e-mail after further
reflection.

The present "l2gateway type" inport case could be kept for now; thats a
separate discussion
with other implications.
It will take advantage of the arp responder, however, for north->south
traffic.

The logical switch "router type" inport case should never be needed here
and if that is the inport,
we can go to the next table.

diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
index 8c7e80c..e1a33c1 100644
--- a/ovn/northd/ovn-northd.c
+++ b/ovn/northd/ovn-northd.c
@@ -2428,7 +2428,10 @@ build_lswitch_flows(struct hmap *datapaths, struct
hmap *ports,
             continue;
         }

-        if (!strcmp(op->nbsp->type, "localnet")) {
+        /* Skip arp responder if the logical switch inport is not
+         * associated with a local VIF or a l2gateway port */
+        if ((strcmp(op->nbsp->type, "")) &&
+            (strcmp(op->nbsp->type, "l2gateway"))) {
             ds_clear(&match);
             ds_put_format(&match, "inport == %s", op->json_key);
             ovn_lflow_add(lflows, op->od, S_SWITCH_IN_ARP_ND_RSP, 100,



>
> My usecase requires to skip the arp-responder for
> vtep because, multiple hypervisors could respond to an arp from vtep.
>

Thats right



More information about the dev mailing list