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 |
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 |
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
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>
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 --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(