Merge "Subnets with prefix length 0 are invalid"
This commit is contained in:
commit
e44f02d207
@ -564,6 +564,16 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||||||
CIDR if overlapping IPs are disabled.
|
CIDR if overlapping IPs are disabled.
|
||||||
"""
|
"""
|
||||||
new_subnet_ipset = netaddr.IPSet([new_subnet_cidr])
|
new_subnet_ipset = netaddr.IPSet([new_subnet_cidr])
|
||||||
|
# Disallow subnets with prefix length 0 as they will lead to
|
||||||
|
# dnsmasq failures (see bug 1362651).
|
||||||
|
# This is not a discrimination against /0 subnets.
|
||||||
|
# A /0 subnet is conceptually possible but hardly a practical
|
||||||
|
# scenario for neutron's use cases.
|
||||||
|
for cidr in new_subnet_ipset.iter_cidrs():
|
||||||
|
if cidr.prefixlen == 0:
|
||||||
|
err_msg = _("0 is not allowed as CIDR prefix length")
|
||||||
|
raise n_exc.InvalidInput(error_message=err_msg)
|
||||||
|
|
||||||
if cfg.CONF.allow_overlapping_ips:
|
if cfg.CONF.allow_overlapping_ips:
|
||||||
subnet_list = network.subnets
|
subnet_list = network.subnets
|
||||||
else:
|
else:
|
||||||
|
@ -2349,6 +2349,17 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase):
|
|||||||
res = subnet_req.get_response(self.api)
|
res = subnet_req.get_response(self.api)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPClientError.code)
|
self.assertEqual(res.status_int, webob.exc.HTTPClientError.code)
|
||||||
|
|
||||||
|
def test_create_subnet_bad_V4_cidr_prefix_len(self):
|
||||||
|
with self.network() as network:
|
||||||
|
data = {'subnet': {'network_id': network['network']['id'],
|
||||||
|
'cidr': '0.0.0.0/0',
|
||||||
|
'ip_version': '4',
|
||||||
|
'tenant_id': network['network']['tenant_id'],
|
||||||
|
'gateway_ip': '0.0.0.1'}}
|
||||||
|
subnet_req = self.new_create_request('subnets', data)
|
||||||
|
res = subnet_req.get_response(self.api)
|
||||||
|
self.assertEqual(res.status_int, webob.exc.HTTPClientError.code)
|
||||||
|
|
||||||
def test_create_subnet_bad_V6_cidr(self):
|
def test_create_subnet_bad_V6_cidr(self):
|
||||||
with self.network() as network:
|
with self.network() as network:
|
||||||
data = {'subnet': {'network_id': network['network']['id'],
|
data = {'subnet': {'network_id': network['network']['id'],
|
||||||
|
Loading…
Reference in New Issue
Block a user