diff mbox series

[ovs-dev,v3] northd: do not create flows for reserved multicast IPv6 groups

Message ID 573ee5b675db3341c5b7b15ad9a7ebc07d9365bf.1675374669.git.lorenzo.bianconi@redhat.com
State Accepted
Headers show
Series [ovs-dev,v3] northd: do not create flows for reserved multicast IPv6 groups | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_ovn-kubernetes success github build: passed
ovsrobot/github-robot-_Build_and_Test fail github build: failed

Commit Message

Lorenzo Bianconi Feb. 2, 2023, 10:33 p.m. UTC
Avoid creating logical flows for Link-Local reserved multicast addresses if
advertised in a MLD reports since this interferes with Slaac IPv6 address
resolution implemented in OVN.

Acked-by: Acked-by: Dumitru Ceara <dceara@redhat.com>
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2154930
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
---
Changes since v2:
- cosmetics
---
 lib/ovn-util.h  | 17 +++++++++++++++++
 northd/northd.c |  6 ++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

Comments

Dumitru Ceara Feb. 3, 2023, 8:41 a.m. UTC | #1
On 2/2/23 23:33, Lorenzo Bianconi wrote:
> Avoid creating logical flows for Link-Local reserved multicast addresses if
> advertised in a MLD reports since this interferes with Slaac IPv6 address
> resolution implemented in OVN.
> 
> Acked-by: Acked-by: Dumitru Ceara <dceara@redhat.com>

One "Acked-by: " too many but otherwise this patch looks good to me.
The commit log can be fixed at apply time.

> Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2154930
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
> ---
> Changes since v2:
> - cosmetics
> ---

Thanks again for the fix!

Regards,
Dumitru
Ales Musil Feb. 10, 2023, 8:33 a.m. UTC | #2
On Thu, Feb 2, 2023 at 11:34 PM Lorenzo Bianconi <
lorenzo.bianconi@redhat.com> wrote:

> Avoid creating logical flows for Link-Local reserved multicast addresses if
> advertised in a MLD reports since this interferes with Slaac IPv6 address
> resolution implemented in OVN.
>
> Acked-by: Acked-by: Dumitru Ceara <dceara@redhat.com>
> Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2154930
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
> ---
> Changes since v2:
> - cosmetics
> ---
>  lib/ovn-util.h  | 17 +++++++++++++++++
>  northd/northd.c |  6 ++++--
>  2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/lib/ovn-util.h b/lib/ovn-util.h
> index cd19919cb..656be823d 100644
> --- a/lib/ovn-util.h
> +++ b/lib/ovn-util.h
> @@ -70,6 +70,23 @@ struct lport_addresses {
>      struct ipv6_netaddr *ipv6_addrs;
>  };
>
> +static inline bool
> +ipv6_is_all_router(const struct in6_addr *addr)
> +{
> +    return ipv6_addr_equals(addr, &in6addr_all_routers);
> +}
> +
> +static const struct in6_addr in6addr_all_site_routers = {{{
> +    0xff,0x05,0x00,0x00,0x00,0x00,0x00,0x00,
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02
> +}}};
> +
> +static inline bool
> +ipv6_is_all_site_router(const struct in6_addr *addr)
> +{
> +    return ipv6_addr_equals(addr, &in6addr_all_site_routers);
> +}
> +
>  bool is_dynamic_lsp_address(const char *address);
>  bool extract_addresses(const char *address, struct lport_addresses *,
>                         int *ofs);
> diff --git a/northd/northd.c b/northd/northd.c
> index 2d82eccfe..ce0d57b65 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -9020,9 +9020,11 @@ build_lswitch_ip_mcast_igmp_mld(struct
> ovn_igmp_group *igmp_group,
>                            igmp_group->mcgroup.name);
>          } else {
>              /* RFC 4291, section 2.7.1: Skip groups that correspond to all
> -             * hosts.
> +             * hosts, all link-local routers and all site routers.
>               */
> -            if (ipv6_is_all_hosts(&igmp_group->address)) {
> +            if (ipv6_is_all_hosts(&igmp_group->address) ||
> +                ipv6_is_all_router(&igmp_group->address) ||
> +                ipv6_is_all_site_router(&igmp_group->address)) {
>                  return;
>              }
>              if (atomic_compare_exchange_strong(
> --
> 2.39.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Looks good to me, thanks.

Reviewed-by: Ales Musil <amusil@redhat.com>
Dumitru Ceara Feb. 15, 2023, 7:30 p.m. UTC | #3
On 2/10/23 09:33, Ales Musil wrote:
> On Thu, Feb 2, 2023 at 11:34 PM Lorenzo Bianconi <
> lorenzo.bianconi@redhat.com> wrote:
> 
>> Avoid creating logical flows for Link-Local reserved multicast addresses if
>> advertised in a MLD reports since this interferes with Slaac IPv6 address
>> resolution implemented in OVN.
>>
>> Acked-by: Acked-by: Dumitru Ceara <dceara@redhat.com>
>> Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2154930
>> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
>> ---


> Looks good to me, thanks.
> 
> Reviewed-by: Ales Musil <amusil@redhat.com>
> 

Thanks, Lorenzo and Ales!

I applied this to the main branch and backported it down to 21.12.

Regards,
Dumitru
diff mbox series

Patch

diff --git a/lib/ovn-util.h b/lib/ovn-util.h
index cd19919cb..656be823d 100644
--- a/lib/ovn-util.h
+++ b/lib/ovn-util.h
@@ -70,6 +70,23 @@  struct lport_addresses {
     struct ipv6_netaddr *ipv6_addrs;
 };
 
+static inline bool
+ipv6_is_all_router(const struct in6_addr *addr)
+{
+    return ipv6_addr_equals(addr, &in6addr_all_routers);
+}
+
+static const struct in6_addr in6addr_all_site_routers = {{{
+    0xff,0x05,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02
+}}};
+
+static inline bool
+ipv6_is_all_site_router(const struct in6_addr *addr)
+{
+    return ipv6_addr_equals(addr, &in6addr_all_site_routers);
+}
+
 bool is_dynamic_lsp_address(const char *address);
 bool extract_addresses(const char *address, struct lport_addresses *,
                        int *ofs);
diff --git a/northd/northd.c b/northd/northd.c
index 2d82eccfe..ce0d57b65 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -9020,9 +9020,11 @@  build_lswitch_ip_mcast_igmp_mld(struct ovn_igmp_group *igmp_group,
                           igmp_group->mcgroup.name);
         } else {
             /* RFC 4291, section 2.7.1: Skip groups that correspond to all
-             * hosts.
+             * hosts, all link-local routers and all site routers.
              */
-            if (ipv6_is_all_hosts(&igmp_group->address)) {
+            if (ipv6_is_all_hosts(&igmp_group->address) ||
+                ipv6_is_all_router(&igmp_group->address) ||
+                ipv6_is_all_site_router(&igmp_group->address)) {
                 return;
             }
             if (atomic_compare_exchange_strong(