
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>
77 lines
3.0 KiB
Python
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()
|