diff mbox series

[ovs-dev,ovn] northd: Match IPv4 or IPv6 for MAC resolution

Message ID 20191119012712.344975-1-russell@ovn.org
State Accepted
Headers show
Series [ovs-dev,ovn] northd: Match IPv4 or IPv6 for MAC resolution | expand

Commit Message

Russell Bryant Nov. 19, 2019, 1:27 a.m. UTC
While debugging some problems in a cluster using ovn-kubernetes, I
noticed that we're creating two conflicting logical flows.  These two
flows only matched on the destination MAC address.  It was not
deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS) version.

This change adds an ip4 or ip6 match to each flow as appropriate.

Signed-off-by: Russell Bryant <russell@ovn.org>
---
 northd/ovn-northd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- NOTE ---

I've only tested this by running "make check" and "make check-kernel" so
far, and all tests still pass.

If I'm reading this code right, I'm really surprised this hasn't come up
sooner?  I guess we also don't have adequate test coverage for these
flows?

Comments

Numan Siddique Nov. 19, 2019, 11:33 a.m. UTC | #1
On Tue, Nov 19, 2019 at 7:04 AM Russell Bryant <russell@ovn.org> wrote:
>
> While debugging some problems in a cluster using ovn-kubernetes, I
> noticed that we're creating two conflicting logical flows.  These two
> flows only matched on the destination MAC address.  It was not
> deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS) version.
>
> This change adds an ip4 or ip6 match to each flow as appropriate.
>
> Signed-off-by: Russell Bryant <russell@ovn.org>

Acked-by: Numan Siddique <numans@ovn.org>

> ---
>  northd/ovn-northd.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> --- NOTE ---
>
> I've only tested this by running "make check" and "make check-kernel" so
> far, and all tests still pass.
>
> If I'm reading this code right, I'm really surprised this hasn't come up
> sooner?  I guess we also don't have adequate test coverage for these
> flows?

Thanks for the patch.  Yeah we don't have much coverage here.
We should add system tests for this.

Numan

>
>
> diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> index 41e97f841..f0ab43b27 100644
> --- a/northd/ovn-northd.c
> +++ b/northd/ovn-northd.c
> @@ -9319,7 +9319,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
>          }
>
>          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> -                      "eth.dst == 00:00:00:00:00:00",
> +                      "eth.dst == 00:00:00:00:00:00 && ip4",
>                        "arp { "
>                        "eth.dst = ff:ff:ff:ff:ff:ff; "
>                        "arp.spa = reg1; "
> @@ -9328,7 +9328,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
>                        "output; "
>                        "};");
>          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> -                      "eth.dst == 00:00:00:00:00:00",
> +                      "eth.dst == 00:00:00:00:00:00 && ip6",
>                        "nd_ns { "
>                        "nd.target = xxreg0; "
>                        "output; "
> --
> 2.23.0
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
Russell Bryant Nov. 19, 2019, 3:43 p.m. UTC | #2
On Tue, Nov 19, 2019 at 6:33 AM Numan Siddique <numans@ovn.org> wrote:
>
> On Tue, Nov 19, 2019 at 7:04 AM Russell Bryant <russell@ovn.org> wrote:
> >
> > While debugging some problems in a cluster using ovn-kubernetes, I
> > noticed that we're creating two conflicting logical flows.  These two
> > flows only matched on the destination MAC address.  It was not
> > deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS) version.
> >
> > This change adds an ip4 or ip6 match to each flow as appropriate.
> >
> > Signed-off-by: Russell Bryant <russell@ovn.org>
>
> Acked-by: Numan Siddique <numans@ovn.org>

Thanks!  I applied this to master.

>
> > ---
> >  northd/ovn-northd.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > --- NOTE ---
> >
> > I've only tested this by running "make check" and "make check-kernel" so
> > far, and all tests still pass.
> >
> > If I'm reading this code right, I'm really surprised this hasn't come up
> > sooner?  I guess we also don't have adequate test coverage for these
> > flows?
>
> Thanks for the patch.  Yeah we don't have much coverage here.
> We should add system tests for this.
>
> Numan
>
> >
> >
> > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> > index 41e97f841..f0ab43b27 100644
> > --- a/northd/ovn-northd.c
> > +++ b/northd/ovn-northd.c
> > @@ -9319,7 +9319,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
> >          }
> >
> >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> > -                      "eth.dst == 00:00:00:00:00:00",
> > +                      "eth.dst == 00:00:00:00:00:00 && ip4",
> >                        "arp { "
> >                        "eth.dst = ff:ff:ff:ff:ff:ff; "
> >                        "arp.spa = reg1; "
> > @@ -9328,7 +9328,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
> >                        "output; "
> >                        "};");
> >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> > -                      "eth.dst == 00:00:00:00:00:00",
> > +                      "eth.dst == 00:00:00:00:00:00 && ip6",
> >                        "nd_ns { "
> >                        "nd.target = xxreg0; "
> >                        "output; "
> > --
> > 2.23.0
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
Han Zhou Nov. 19, 2019, 9:38 p.m. UTC | #3
On Tue, Nov 19, 2019 at 3:33 AM Numan Siddique <numans@ovn.org> wrote:
>
> On Tue, Nov 19, 2019 at 7:04 AM Russell Bryant <russell@ovn.org> wrote:
> >
> > While debugging some problems in a cluster using ovn-kubernetes, I
> > noticed that we're creating two conflicting logical flows.  These two
> > flows only matched on the destination MAC address.  It was not
> > deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS) version.
> >
> > This change adds an ip4 or ip6 match to each flow as appropriate.
> >
> > Signed-off-by: Russell Bryant <russell@ovn.org>
>
> Acked-by: Numan Siddique <numans@ovn.org>
>
> > ---
> >  northd/ovn-northd.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > --- NOTE ---
> >
> > I've only tested this by running "make check" and "make check-kernel" so
> > far, and all tests still pass.
> >
> > If I'm reading this code right, I'm really surprised this hasn't come up
> > sooner?  I guess we also don't have adequate test coverage for these
> > flows?
>
> Thanks for the patch.  Yeah we don't have much coverage here.
> We should add system tests for this.
>
> Numan
>

I noticed this when I was testing ddlog which couldn't handle this well
initially but later fixed. I thought it was a problem, too, but then
figured out it is actually handled by ovn-controller when translating to
open-flows. The condition ip4/ip6 is added during the translation
automatically.

> >
> >
> > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> > index 41e97f841..f0ab43b27 100644
> > --- a/northd/ovn-northd.c
> > +++ b/northd/ovn-northd.c
> > @@ -9319,7 +9319,7 @@ build_lrouter_flows(struct hmap *datapaths,
struct hmap *ports,
> >          }
> >
> >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> > -                      "eth.dst == 00:00:00:00:00:00",
> > +                      "eth.dst == 00:00:00:00:00:00 && ip4",
> >                        "arp { "
> >                        "eth.dst = ff:ff:ff:ff:ff:ff; "
> >                        "arp.spa = reg1; "
> > @@ -9328,7 +9328,7 @@ build_lrouter_flows(struct hmap *datapaths,
struct hmap *ports,
> >                        "output; "
> >                        "};");
> >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> > -                      "eth.dst == 00:00:00:00:00:00",
> > +                      "eth.dst == 00:00:00:00:00:00 && ip6",
> >                        "nd_ns { "
> >                        "nd.target = xxreg0; "
> >                        "output; "
> > --
> > 2.23.0
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Han Zhou Nov. 19, 2019, 9:44 p.m. UTC | #4
On Tue, Nov 19, 2019 at 1:38 PM Han Zhou <zhouhan@gmail.com> wrote:

>
>
> On Tue, Nov 19, 2019 at 3:33 AM Numan Siddique <numans@ovn.org> wrote:
> >
> > On Tue, Nov 19, 2019 at 7:04 AM Russell Bryant <russell@ovn.org> wrote:
> > >
> > > While debugging some problems in a cluster using ovn-kubernetes, I
> > > noticed that we're creating two conflicting logical flows.  These two
> > > flows only matched on the destination MAC address.  It was not
> > > deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS) version.
> > >
> > > This change adds an ip4 or ip6 match to each flow as appropriate.
> > >
> > > Signed-off-by: Russell Bryant <russell@ovn.org>
> >
> > Acked-by: Numan Siddique <numans@ovn.org>
> >
> > > ---
> > >  northd/ovn-northd.c | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > --- NOTE ---
> > >
> > > I've only tested this by running "make check" and "make check-kernel"
> so
> > > far, and all tests still pass.
> > >
> > > If I'm reading this code right, I'm really surprised this hasn't come
> up
> > > sooner?  I guess we also don't have adequate test coverage for these
> > > flows?
> >
> > Thanks for the patch.  Yeah we don't have much coverage here.
> > We should add system tests for this.
> >
> > Numan
> >
>
> I noticed this when I was testing ddlog which couldn't handle this well
> initially but later fixed. I thought it was a problem, too, but then
> figured out it is actually handled by ovn-controller when translating to
> open-flows. The condition ip4/ip6 is added during the translation
> automatically.
>
> This just explains why "this hasn't come up sooner", but the patch LGTM.
It is better to add the condition in logical flows.


> > >
> > >
> > > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> > > index 41e97f841..f0ab43b27 100644
> > > --- a/northd/ovn-northd.c
> > > +++ b/northd/ovn-northd.c
> > > @@ -9319,7 +9319,7 @@ build_lrouter_flows(struct hmap *datapaths,
> struct hmap *ports,
> > >          }
> > >
> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> > > -                      "eth.dst == 00:00:00:00:00:00",
> > > +                      "eth.dst == 00:00:00:00:00:00 && ip4",
> > >                        "arp { "
> > >                        "eth.dst = ff:ff:ff:ff:ff:ff; "
> > >                        "arp.spa = reg1; "
> > > @@ -9328,7 +9328,7 @@ build_lrouter_flows(struct hmap *datapaths,
> struct hmap *ports,
> > >                        "output; "
> > >                        "};");
> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> > > -                      "eth.dst == 00:00:00:00:00:00",
> > > +                      "eth.dst == 00:00:00:00:00:00 && ip6",
> > >                        "nd_ns { "
> > >                        "nd.target = xxreg0; "
> > >                        "output; "
> > > --
> > > 2.23.0
> > >
> > > _______________________________________________
> > > dev mailing list
> > > dev@openvswitch.org
> > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> > >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
Russell Bryant Nov. 19, 2019, 10:18 p.m. UTC | #5
On Tue, Nov 19, 2019 at 4:44 PM Han Zhou <zhouhan@gmail.com> wrote:
>
>
>
> On Tue, Nov 19, 2019 at 1:38 PM Han Zhou <zhouhan@gmail.com> wrote:
>>
>>
>>
>> On Tue, Nov 19, 2019 at 3:33 AM Numan Siddique <numans@ovn.org> wrote:
>> >
>> > On Tue, Nov 19, 2019 at 7:04 AM Russell Bryant <russell@ovn.org> wrote:
>> > >
>> > > While debugging some problems in a cluster using ovn-kubernetes, I
>> > > noticed that we're creating two conflicting logical flows.  These two
>> > > flows only matched on the destination MAC address.  It was not
>> > > deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS) version.
>> > >
>> > > This change adds an ip4 or ip6 match to each flow as appropriate.
>> > >
>> > > Signed-off-by: Russell Bryant <russell@ovn.org>
>> >
>> > Acked-by: Numan Siddique <numans@ovn.org>
>> >
>> > > ---
>> > >  northd/ovn-northd.c | 4 ++--
>> > >  1 file changed, 2 insertions(+), 2 deletions(-)
>> > >
>> > > --- NOTE ---
>> > >
>> > > I've only tested this by running "make check" and "make check-kernel" so
>> > > far, and all tests still pass.
>> > >
>> > > If I'm reading this code right, I'm really surprised this hasn't come up
>> > > sooner?  I guess we also don't have adequate test coverage for these
>> > > flows?
>> >
>> > Thanks for the patch.  Yeah we don't have much coverage here.
>> > We should add system tests for this.
>> >
>> > Numan
>> >
>>
>> I noticed this when I was testing ddlog which couldn't handle this well initially but later fixed. I thought it was a problem, too, but then figured out it is actually handled by ovn-controller when translating to open-flows. The condition ip4/ip6 is added during the translation automatically.
>>
> This just explains why "this hasn't come up sooner", but the patch LGTM. It is better to add the condition in logical flows.

Interesting - and it works the same even though there are different
arguments to arp{} or nd_ns{} in each logical flow?

>
>>
>> > >
>> > >
>> > > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
>> > > index 41e97f841..f0ab43b27 100644
>> > > --- a/northd/ovn-northd.c
>> > > +++ b/northd/ovn-northd.c
>> > > @@ -9319,7 +9319,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
>> > >          }
>> > >
>> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
>> > > -                      "eth.dst == 00:00:00:00:00:00",
>> > > +                      "eth.dst == 00:00:00:00:00:00 && ip4",
>> > >                        "arp { "
>> > >                        "eth.dst = ff:ff:ff:ff:ff:ff; "
>> > >                        "arp.spa = reg1; "
>> > > @@ -9328,7 +9328,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
>> > >                        "output; "
>> > >                        "};");
>> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
>> > > -                      "eth.dst == 00:00:00:00:00:00",
>> > > +                      "eth.dst == 00:00:00:00:00:00 && ip6",
>> > >                        "nd_ns { "
>> > >                        "nd.target = xxreg0; "
>> > >                        "output; "
>> > > --
>> > > 2.23.0
>> > >
>> > > _______________________________________________
>> > > dev mailing list
>> > > dev@openvswitch.org
>> > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>> > >
>> > _______________________________________________
>> > dev mailing list
>> > dev@openvswitch.org
>> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Han Zhou Nov. 19, 2019, 10:31 p.m. UTC | #6
On Tue, Nov 19, 2019 at 2:19 PM Russell Bryant <russell@ovn.org> wrote:

> On Tue, Nov 19, 2019 at 4:44 PM Han Zhou <zhouhan@gmail.com> wrote:
> >
> >
> >
> > On Tue, Nov 19, 2019 at 1:38 PM Han Zhou <zhouhan@gmail.com> wrote:
> >>
> >>
> >>
> >> On Tue, Nov 19, 2019 at 3:33 AM Numan Siddique <numans@ovn.org> wrote:
> >> >
> >> > On Tue, Nov 19, 2019 at 7:04 AM Russell Bryant <russell@ovn.org>
> wrote:
> >> > >
> >> > > While debugging some problems in a cluster using ovn-kubernetes, I
> >> > > noticed that we're creating two conflicting logical flows.  These
> two
> >> > > flows only matched on the destination MAC address.  It was not
> >> > > deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS) version.
> >> > >
> >> > > This change adds an ip4 or ip6 match to each flow as appropriate.
> >> > >
> >> > > Signed-off-by: Russell Bryant <russell@ovn.org>
> >> >
> >> > Acked-by: Numan Siddique <numans@ovn.org>
> >> >
> >> > > ---
> >> > >  northd/ovn-northd.c | 4 ++--
> >> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> >> > >
> >> > > --- NOTE ---
> >> > >
> >> > > I've only tested this by running "make check" and "make
> check-kernel" so
> >> > > far, and all tests still pass.
> >> > >
> >> > > If I'm reading this code right, I'm really surprised this hasn't
> come up
> >> > > sooner?  I guess we also don't have adequate test coverage for these
> >> > > flows?
> >> >
> >> > Thanks for the patch.  Yeah we don't have much coverage here.
> >> > We should add system tests for this.
> >> >
> >> > Numan
> >> >
> >>
> >> I noticed this when I was testing ddlog which couldn't handle this well
> initially but later fixed. I thought it was a problem, too, but then
> figured out it is actually handled by ovn-controller when translating to
> open-flows. The condition ip4/ip6 is added during the translation
> automatically.
> >>
> > This just explains why "this hasn't come up sooner", but the patch LGTM.
> It is better to add the condition in logical flows.
>
> Interesting - and it works the same even though there are different
> arguments to arp{} or nd_ns{} in each logical flow?
>
> They are two different lflows (since the actions are different), and
translated in two different OVS flows. During translation by
ovn-controller, when parsing the actions, the ip4/ip6 is specified as
prerequisite, and then the prerequisite is added as a match condition, too.
Please see:
https://github.com/ovn-org/ovn/blob/master/lib/actions.c#L1169
https://github.com/ovn-org/ovn/blob/master/lib/actions.c#L1211


> >
> >>
> >> > >
> >> > >
> >> > > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> >> > > index 41e97f841..f0ab43b27 100644
> >> > > --- a/northd/ovn-northd.c
> >> > > +++ b/northd/ovn-northd.c
> >> > > @@ -9319,7 +9319,7 @@ build_lrouter_flows(struct hmap *datapaths,
> struct hmap *ports,
> >> > >          }
> >> > >
> >> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> >> > > -                      "eth.dst == 00:00:00:00:00:00",
> >> > > +                      "eth.dst == 00:00:00:00:00:00 && ip4",
> >> > >                        "arp { "
> >> > >                        "eth.dst = ff:ff:ff:ff:ff:ff; "
> >> > >                        "arp.spa = reg1; "
> >> > > @@ -9328,7 +9328,7 @@ build_lrouter_flows(struct hmap *datapaths,
> struct hmap *ports,
> >> > >                        "output; "
> >> > >                        "};");
> >> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
> >> > > -                      "eth.dst == 00:00:00:00:00:00",
> >> > > +                      "eth.dst == 00:00:00:00:00:00 && ip6",
> >> > >                        "nd_ns { "
> >> > >                        "nd.target = xxreg0; "
> >> > >                        "output; "
> >> > > --
> >> > > 2.23.0
> >> > >
> >> > > _______________________________________________
> >> > > dev mailing list
> >> > > dev@openvswitch.org
> >> > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >> > >
> >> > _______________________________________________
> >> > dev mailing list
> >> > dev@openvswitch.org
> >> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
>
> --
> Russell Bryant
>
Russell Bryant Nov. 19, 2019, 10:57 p.m. UTC | #7
On Tue, Nov 19, 2019 at 5:32 PM Han Zhou <zhouhan@gmail.com> wrote:

>
>
> On Tue, Nov 19, 2019 at 2:19 PM Russell Bryant <russell@ovn.org> wrote:
>
>> On Tue, Nov 19, 2019 at 4:44 PM Han Zhou <zhouhan@gmail.com> wrote:
>> >
>> >
>> >
>> > On Tue, Nov 19, 2019 at 1:38 PM Han Zhou <zhouhan@gmail.com> wrote:
>> >>
>> >>
>> >>
>> >> On Tue, Nov 19, 2019 at 3:33 AM Numan Siddique <numans@ovn.org> wrote:
>> >> >
>> >> > On Tue, Nov 19, 2019 at 7:04 AM Russell Bryant <russell@ovn.org>
>> wrote:
>> >> > >
>> >> > > While debugging some problems in a cluster using ovn-kubernetes, I
>> >> > > noticed that we're creating two conflicting logical flows.  These
>> two
>> >> > > flows only matched on the destination MAC address.  It was not
>> >> > > deterministic whether you'd hit the IPv4 (ARP) or IPv6 (NS)
>> version.
>> >> > >
>> >> > > This change adds an ip4 or ip6 match to each flow as appropriate.
>> >> > >
>> >> > > Signed-off-by: Russell Bryant <russell@ovn.org>
>> >> >
>> >> > Acked-by: Numan Siddique <numans@ovn.org>
>> >> >
>> >> > > ---
>> >> > >  northd/ovn-northd.c | 4 ++--
>> >> > >  1 file changed, 2 insertions(+), 2 deletions(-)
>> >> > >
>> >> > > --- NOTE ---
>> >> > >
>> >> > > I've only tested this by running "make check" and "make
>> check-kernel" so
>> >> > > far, and all tests still pass.
>> >> > >
>> >> > > If I'm reading this code right, I'm really surprised this hasn't
>> come up
>> >> > > sooner?  I guess we also don't have adequate test coverage for
>> these
>> >> > > flows?
>> >> >
>> >> > Thanks for the patch.  Yeah we don't have much coverage here.
>> >> > We should add system tests for this.
>> >> >
>> >> > Numan
>> >> >
>> >>
>> >> I noticed this when I was testing ddlog which couldn't handle this
>> well initially but later fixed. I thought it was a problem, too, but then
>> figured out it is actually handled by ovn-controller when translating to
>> open-flows. The condition ip4/ip6 is added during the translation
>> automatically.
>> >>
>> > This just explains why "this hasn't come up sooner", but the patch
>> LGTM. It is better to add the condition in logical flows.
>>
>> Interesting - and it works the same even though there are different
>> arguments to arp{} or nd_ns{} in each logical flow?
>>
>> They are two different lflows (since the actions are different), and
> translated in two different OVS flows. During translation by
> ovn-controller, when parsing the actions, the ip4/ip6 is specified as
> prerequisite, and then the prerequisite is added as a match condition, too.
> Please see:
> https://github.com/ovn-org/ovn/blob/master/lib/actions.c#L1169
> https://github.com/ovn-org/ovn/blob/master/lib/actions.c#L1211
>

Ah ha!  That explains it.  Thank you.  :-)

>
>
>> >
>> >>
>> >> > >
>> >> > >
>> >> > > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
>> >> > > index 41e97f841..f0ab43b27 100644
>> >> > > --- a/northd/ovn-northd.c
>> >> > > +++ b/northd/ovn-northd.c
>> >> > > @@ -9319,7 +9319,7 @@ build_lrouter_flows(struct hmap *datapaths,
>> struct hmap *ports,
>> >> > >          }
>> >> > >
>> >> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
>> >> > > -                      "eth.dst == 00:00:00:00:00:00",
>> >> > > +                      "eth.dst == 00:00:00:00:00:00 && ip4",
>> >> > >                        "arp { "
>> >> > >                        "eth.dst = ff:ff:ff:ff:ff:ff; "
>> >> > >                        "arp.spa = reg1; "
>> >> > > @@ -9328,7 +9328,7 @@ build_lrouter_flows(struct hmap *datapaths,
>> struct hmap *ports,
>> >> > >                        "output; "
>> >> > >                        "};");
>> >> > >          ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
>> >> > > -                      "eth.dst == 00:00:00:00:00:00",
>> >> > > +                      "eth.dst == 00:00:00:00:00:00 && ip6",
>> >> > >                        "nd_ns { "
>> >> > >                        "nd.target = xxreg0; "
>> >> > >                        "output; "
>> >> > > --
>> >> > > 2.23.0
>> >> > >
>> >> > > _______________________________________________
>> >> > > dev mailing list
>> >> > > dev@openvswitch.org
>> >> > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>> >> > >
>> >> > _______________________________________________
>> >> > dev mailing list
>> >> > dev@openvswitch.org
>> >> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>>
>>
>> --
>> Russell Bryant
>>
>
diff mbox series

Patch

diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index 41e97f841..f0ab43b27 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -9319,7 +9319,7 @@  build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
         }
 
         ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
-                      "eth.dst == 00:00:00:00:00:00",
+                      "eth.dst == 00:00:00:00:00:00 && ip4",
                       "arp { "
                       "eth.dst = ff:ff:ff:ff:ff:ff; "
                       "arp.spa = reg1; "
@@ -9328,7 +9328,7 @@  build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
                       "output; "
                       "};");
         ovn_lflow_add(lflows, od, S_ROUTER_IN_ARP_REQUEST, 100,
-                      "eth.dst == 00:00:00:00:00:00",
+                      "eth.dst == 00:00:00:00:00:00 && ip6",
                       "nd_ns { "
                       "nd.target = xxreg0; "
                       "output; "