neutron/neutron/conf/agent/ovs_conf.py
Lucas Alvares Gomes 114ca0f1be 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 <lucasagomes@gmail.com>
2023-12-15 09:05:19 +00:00

77 lines
3.0 KiB
Python

# Copyright 2011 VMware, Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_config import cfg
from neutron._i18n import _
# Default timeout for OVSDB commands
DEFAULT_OVSDB_TIMEOUT = 10
OPTS = [
cfg.IntOpt('ovsdb_timeout',
default=DEFAULT_OVSDB_TIMEOUT,
help=_('Timeout in seconds for OVSDB commands. '
'If the timeout expires, OVSDB commands will fail with '
'ALARMCLOCK error.')),
cfg.IntOpt('bridge_mac_table_size',
default=50000,
help=_('The maximum number of MAC addresses to learn on '
'a bridge managed by the Neutron OVS agent. Values '
'outside a reasonable range (10 to 1,000,000) might be '
'overridden by Open vSwitch according to the '
'documentation.')),
cfg.BoolOpt('igmp_snooping_enable', default=False,
help=_('Enable IGMP snooping for integration bridge. If this '
'option is set to True, support for Internet Group '
'Management Protocol (IGMP) is enabled in integration '
'bridge.')),
cfg.BoolOpt('igmp_flood', default=False,
help=_('Multicast packets (except reports) are '
'unconditionally forwarded to the ports bridging a '
'logical network to a physical network.')),
cfg.BoolOpt('igmp_flood_reports', default=True,
help=_('Multicast reports are unconditionally forwarded '
'to the ports bridging a logical network to a '
'physical network.')),
cfg.BoolOpt('igmp_flood_unregistered', default=False,
help=_('This option enables or disables flooding of '
'unregistered multicast packets to all ports. '
'If False, The switch will send unregistered '
'multicast packets only to ports connected to '
'multicast routers.')),
]
def register_ovs_agent_opts(cfg=cfg.CONF):
cfg.register_opts(OPTS, 'OVS')
def get_igmp_snooping_enabled():
return str(cfg.CONF.OVS.igmp_snooping_enable).lower()
def get_igmp_flood():
return str(cfg.CONF.OVS.igmp_flood).lower()
def get_igmp_flood_reports():
return str(cfg.CONF.OVS.igmp_flood_reports).lower()
def get_igmp_flood_unregistered():
return str(cfg.CONF.OVS.igmp_flood_unregistered).lower()