Merge "[NSX-P] Ensure multicast setting is specified in all cases"
This commit is contained in:
commit
83d59be2c8
@ -1145,12 +1145,17 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
with db_api.CONTEXT_READER.using(context):
|
with db_api.CONTEXT_READER.using(context):
|
||||||
network = self._get_network(context, net_id)
|
network = self._get_network(context, net_id)
|
||||||
for subnet in network.subnets:
|
for subnet in network.subnets:
|
||||||
if(subnet.enable_dhcp and
|
versions.add(subnet.ip_version)
|
||||||
(subnet.ip_version == 4 or
|
|
||||||
subnet.ipv6_address_mode != const.IPV6_SLAAC)):
|
|
||||||
versions.add(subnet.ip_version)
|
|
||||||
return versions
|
return versions
|
||||||
|
|
||||||
|
def _get_segment_multicast_setting(self, context, net_id):
|
||||||
|
seg_subnets_ip_ver = self._get_segment_subnets_versions(
|
||||||
|
context, net_id)
|
||||||
|
# Multicast cannot be enabled on segments with v6 subnets only
|
||||||
|
if len(seg_subnets_ip_ver) == 1 and seg_subnets_ip_ver.pop() == 6:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def _get_segment_subnets(self, context, net_id, net_az=None,
|
def _get_segment_subnets(self, context, net_id, net_az=None,
|
||||||
interface_subnets=None,
|
interface_subnets=None,
|
||||||
deleted_dhcp_subnets=None):
|
deleted_dhcp_subnets=None):
|
||||||
@ -1243,15 +1248,9 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
# Update the DHCP server on the segment
|
# Update the DHCP server on the segment
|
||||||
net_id = network['id']
|
net_id = network['id']
|
||||||
segment_id = self._get_network_nsx_segment_id(context, net_id)
|
segment_id = self._get_network_nsx_segment_id(context, net_id)
|
||||||
seg_subnets_ip_ver = self._get_segment_subnets_versions(
|
multicast = self._get_segment_multicast_setting(context, net_id)
|
||||||
context, net_id)
|
|
||||||
seg_subnets = self._get_segment_subnets(context, net_id, net_az=az)
|
seg_subnets = self._get_segment_subnets(context, net_id, net_az=az)
|
||||||
dhcp_config = self._get_segment_dhcp_server_config(segment_id, az)
|
dhcp_config = self._get_segment_dhcp_server_config(segment_id, az)
|
||||||
# Multicast cannot be enabled on segments with v6 subnets only
|
|
||||||
if len(seg_subnets_ip_ver) == 1 and seg_subnets_ip_ver.pop() == 6:
|
|
||||||
multicast = False
|
|
||||||
else:
|
|
||||||
multicast = True
|
|
||||||
# Update dhcp server config on the segment
|
# Update dhcp server config on the segment
|
||||||
self.nsxpolicy.segment.update(
|
self.nsxpolicy.segment.update(
|
||||||
segment_id=segment_id,
|
segment_id=segment_id,
|
||||||
@ -1274,6 +1273,7 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
net_id = network['id']
|
net_id = network['id']
|
||||||
net_dhcp_subnets = self._get_net_dhcp_subnets(context, net_id)
|
net_dhcp_subnets = self._get_net_dhcp_subnets(context, net_id)
|
||||||
segment_id = self._get_network_nsx_segment_id(context, net_id)
|
segment_id = self._get_network_nsx_segment_id(context, net_id)
|
||||||
|
multicast = self._get_segment_multicast_setting(context, net_id)
|
||||||
|
|
||||||
if subnet_id and len(net_dhcp_subnets) > 1:
|
if subnet_id and len(net_dhcp_subnets) > 1:
|
||||||
# remove dhcp only from this subnet
|
# remove dhcp only from this subnet
|
||||||
@ -1281,6 +1281,7 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
context, net_id, deleted_dhcp_subnets=[subnet_id])
|
context, net_id, deleted_dhcp_subnets=[subnet_id])
|
||||||
self.nsxpolicy.segment.update(
|
self.nsxpolicy.segment.update(
|
||||||
segment_id,
|
segment_id,
|
||||||
|
multicast=multicast,
|
||||||
subnets=seg_subnets)
|
subnets=seg_subnets)
|
||||||
self._delete_subnet_dhcp_port(context, net_id, subnet_id=subnet_id)
|
self._delete_subnet_dhcp_port(context, net_id, subnet_id=subnet_id)
|
||||||
else:
|
else:
|
||||||
@ -1289,6 +1290,7 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
context, net_id, deleted_dhcp_subnets=net_dhcp_subnets)
|
context, net_id, deleted_dhcp_subnets=net_dhcp_subnets)
|
||||||
self.nsxpolicy.segment.update(
|
self.nsxpolicy.segment.update(
|
||||||
segment_id=segment_id,
|
segment_id=segment_id,
|
||||||
|
multicast=multicast,
|
||||||
subnets=seg_subnets,
|
subnets=seg_subnets,
|
||||||
dhcp_server_config_id=None)
|
dhcp_server_config_id=None)
|
||||||
|
|
||||||
@ -1326,9 +1328,11 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
ports = self.get_ports(context, filters=filters)
|
ports = self.get_ports(context, filters=filters)
|
||||||
dhcp_server_config = self._get_segment_dhcp_server_config(
|
dhcp_server_config = self._get_segment_dhcp_server_config(
|
||||||
segment_id, az)
|
segment_id, az)
|
||||||
|
multicast = self._get_segment_multicast_setting(context, net_id)
|
||||||
self.nsxpolicy.segment.update(
|
self.nsxpolicy.segment.update(
|
||||||
segment_id=segment_id,
|
segment_id=segment_id,
|
||||||
dhcp_server_config_id=dhcp_server_config,
|
dhcp_server_config_id=dhcp_server_config,
|
||||||
|
multicast=multicast,
|
||||||
subnets=seg_subnets)
|
subnets=seg_subnets)
|
||||||
|
|
||||||
# Update DHCP bindings for all the ports.
|
# Update DHCP bindings for all the ports.
|
||||||
@ -3184,8 +3188,11 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
# overlay interface
|
# overlay interface
|
||||||
pol_subnets = self._get_segment_subnets(
|
pol_subnets = self._get_segment_subnets(
|
||||||
context, network_id, interface_subnets=rtr_subnets)
|
context, network_id, interface_subnets=rtr_subnets)
|
||||||
|
multicast = self._get_segment_multicast_setting(
|
||||||
|
context, network_id)
|
||||||
self.nsxpolicy.segment.update(segment_id,
|
self.nsxpolicy.segment.update(segment_id,
|
||||||
tier1_id=router_id,
|
tier1_id=router_id,
|
||||||
|
multicast=multicast,
|
||||||
subnets=pol_subnets)
|
subnets=pol_subnets)
|
||||||
|
|
||||||
# will update the router only if needed
|
# will update the router only if needed
|
||||||
@ -3274,7 +3281,8 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
# (it is possible to have both IPv4 & 6 subnets)
|
# (it is possible to have both IPv4 & 6 subnets)
|
||||||
seg_subnets = self._get_segment_subnets(
|
seg_subnets = self._get_segment_subnets(
|
||||||
context, network_id, interface_subnets=net_rtr_subnets)
|
context, network_id, interface_subnets=net_rtr_subnets)
|
||||||
|
multicast = self._get_segment_multicast_setting(
|
||||||
|
context, network_id)
|
||||||
if not net_rtr_subnets and not seg_subnets:
|
if not net_rtr_subnets and not seg_subnets:
|
||||||
# Remove the tier1 connectivity of this segment
|
# Remove the tier1 connectivity of this segment
|
||||||
# This must be done is a separate call as it uses PUT
|
# This must be done is a separate call as it uses PUT
|
||||||
@ -3291,6 +3299,7 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
|
|||||||
# update remaining (DHCP/ipv4/6) subnets
|
# update remaining (DHCP/ipv4/6) subnets
|
||||||
if seg_subnets:
|
if seg_subnets:
|
||||||
self.nsxpolicy.segment.update(segment_id,
|
self.nsxpolicy.segment.update(segment_id,
|
||||||
|
multicast=multicast,
|
||||||
subnets=seg_subnets)
|
subnets=seg_subnets)
|
||||||
|
|
||||||
# will update the router only if needed
|
# will update the router only if needed
|
||||||
|
@ -1503,6 +1503,7 @@ class NsxPTestSubnets(common_v3.NsxV3TestSubnets,
|
|||||||
seg_update.assert_called_with(
|
seg_update.assert_called_with(
|
||||||
dhcp_server_config_id=NSX_DHCP_PROFILE_ID,
|
dhcp_server_config_id=NSX_DHCP_PROFILE_ID,
|
||||||
segment_id=subnet['subnet']['network_id'],
|
segment_id=subnet['subnet']['network_id'],
|
||||||
|
multicast=False,
|
||||||
subnets=[mock.ANY])
|
subnets=[mock.ANY])
|
||||||
|
|
||||||
def test_subnet_disable_dhcpv6(self):
|
def test_subnet_disable_dhcpv6(self):
|
||||||
@ -1522,6 +1523,7 @@ class NsxPTestSubnets(common_v3.NsxV3TestSubnets,
|
|||||||
seg_update.assert_called_once_with(
|
seg_update.assert_called_once_with(
|
||||||
dhcp_server_config_id=None,
|
dhcp_server_config_id=None,
|
||||||
segment_id=subnet['subnet']['network_id'],
|
segment_id=subnet['subnet']['network_id'],
|
||||||
|
multicast=False,
|
||||||
subnets=[])
|
subnets=[])
|
||||||
|
|
||||||
def test_delete_ipv6_dhcp_subnet(self):
|
def test_delete_ipv6_dhcp_subnet(self):
|
||||||
@ -1540,6 +1542,7 @@ class NsxPTestSubnets(common_v3.NsxV3TestSubnets,
|
|||||||
seg_update.assert_called_once_with(
|
seg_update.assert_called_once_with(
|
||||||
dhcp_server_config_id=None,
|
dhcp_server_config_id=None,
|
||||||
segment_id=subnet['subnet']['network_id'],
|
segment_id=subnet['subnet']['network_id'],
|
||||||
|
multicast=False,
|
||||||
subnets=[])
|
subnets=[])
|
||||||
|
|
||||||
|
|
||||||
@ -2099,6 +2102,7 @@ class NsxPTestL3NatTestCase(NsxPTestL3NatTest,
|
|||||||
# We expect two subnet objects on segment
|
# We expect two subnet objects on segment
|
||||||
seg_update.assert_called_with(
|
seg_update.assert_called_with(
|
||||||
n['network']['id'],
|
n['network']['id'],
|
||||||
|
multicast=True,
|
||||||
subnets=[mock.ANY, mock.ANY],
|
subnets=[mock.ANY, mock.ANY],
|
||||||
tier1_id=r['router']['id'])
|
tier1_id=r['router']['id'])
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user