Inconsistent IGMP configuration across drivers

Bug #2044272 reported by Lucas Alvares Gomes
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
neutron
Fix Released
High
Lucas Alvares Gomes

Bug Description

Currently there's only one configuration available for IGMP in Neutron: [ovs]/igmp_snooping_enable.

By enabling this we will get different behaviors on ML2/OVN and ML2/OVS because the rest of the igmp configuration: "mcast-snooping-flood", "mcast-snooping-flood-reports" and "mcast-snooping-disable-flood-unregistered" are hard coded with different values in both drivers.

For example, in the help string for the [ovs]/igmp_snooping_enable it says [0]:

"""
... Setting this option to True will also enable the Open vSwitch mcast-snooping-disable-flood-unregistered flag...

"""

But that's only true for ML2/OVN nowadays where it was changed in 2020 [1] to match the behavior of ML2/OVS. But, in 2021, ML2/OVS changed this behavior again [2] and now this has caused another issue with one of our customers.

Right now, ML2/OVN will disable the flooding to unregistered ports and ML2/OVS will enable it.

This back and forth changing IGMP values is not new [3], this patch for example disables the "mcast-snooping-flood-reports" in ML2/OVN where it was hard coded as enabled before. The patch [4] is what enabled "mcast-snooping-flood" and "mcast-snooping-flood-reports" for OVN provnet ports. Then patch [1] disabled "mcast-snooping-flood-reports" for OVN provnet ports... And so on... It's messy.

The fact is that, since Neutron exposes only one configuration for IGMP but the backend offers a total of 4 config options we will never get it right. There will always be a use case that will have problems with these hard coded settings and we will have to keep changing it indefinitely.

This LP is proposing making a definitive and final change for IGMP in Neutron by exposing all these knobs to the operators via config options. I know in OpenStack nowadays we strive to have fewer configuration options where possible but, I think this is one case where this should not be applicable because of the many ways multicast can be configured on each deployment.

As part of this work tho, we will have to change the defaults of one of the drivers to make them consistent again and I would argue, given the help string for igmp_snooping_enable, that everything should be disabled by default.

[0] https://github.com/openstack/neutron/blob/2be4343756863f252c8289e2ca3e7afe71f566c4/neutron/conf/agent/ovs_conf.py#L41-L46
[1] https://review.opendev.org/c/openstack/neutron/+/762818
[2] https://review.opendev.org/c/openstack/neutron/+/766360
[3] https://review.opendev.org/c/openstack/neutron/+/888127
[4] https://review.opendev.org/c/openstack/neutron/+/779258

Tags: ovn ovs
Changed in neutron:
importance: Undecided → High
description: updated
description: updated
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to neutron (master)

Fix proposed to branch: master
Review: https://review.opendev.org/c/openstack/neutron/+/901753

Changed in neutron:
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to neutron (master)

Reviewed: https://review.opendev.org/c/openstack/neutron/+/901753
Committed: https://opendev.org/openstack/neutron/commit/114ca0f1be8c10915d7e755e68ac2117f7db78e7
Submitter: "Zuul (22348)"
Branch: master

commit 114ca0f1be8c10915d7e755e68ac2117f7db78e7
Author: Lucas Alvares Gomes <email address hidden>
Date: Wed Nov 22 13:05:24 2023 +0000

    Fix IGMP inconsistency across drivers

    Prior to this patch, ML2/OVS and ML2/OVN had inconsistent IGMP
    configurations. Neutron only exposed one configuration option for IGMP:
    igmp_snooping_enabled.

    Other features such as IGMP flood, IGMP flood reports and IGMP flood
    unregistered were hardcoded differently on each driver (see LP#2044272
    for a more details).

    These hardcoded values has led to many changes over the years tweaking
    them to work on different scenarios but they were never final because
    the fix for one case would break the other.

    This patch introduces 3 new configuration options for these other IGMP
    features that can be enabled or disabled on both backends. Operators
    can now fine tune their deployments in the way that will work for them.

    As a consequence of the hardcoded values for each driver we had to break
    some defaults and, in the case of ML2/OVS, if operators want to keep
    things as they were before this patch they will need to enable the new
    mcast_flood and mcast_flood_unregistered configuration options.

    That said, the for ML2/OVS there was also an inconsistency with the help
    string of igmp_snooping_enabled configuration option as it mentioned
    that enabling snooping would disable flooding to unregistered ports but
    that was not true anymore after the fix [0].

    [0] https://bugs.launchpad.net/neutron/+bug/1884723

    Closes-Bug: #2044272
    Change-Id: Ic4dde46aa0ea2b03362329c87341c83b24d32176
    Signed-off-by: Lucas Alvares Gomes <email address hidden>

Changed in neutron:
status: In Progress → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/neutron 24.0.0.0b1

This issue was fixed in the openstack/neutron 24.0.0.0b1 development milestone.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.