[AIM][SFC] Use 1/1 and 0/1 as default subnets

Change-Id: If81daec8d72fb66690087a02911b471d9a24b43f
This commit is contained in:
Ivar Lazzaro 2018-04-12 10:47:21 -07:00
parent 0dec95dc4e
commit dd36b62514
No known key found for this signature in database
GPG Key ID: ACEEC8CB558DC3CF
2 changed files with 38 additions and 38 deletions

View File

@ -45,6 +45,7 @@ FLOWC_DST = 'dst'
LOG = logging.getLogger(__name__)
PHYSDOM_TYPE = 'PhysDom'
SUPPORTED_DOM_TYPES = [PHYSDOM_TYPE]
DEFAULT_SUBNETS = ['128.0.0.0/1', '0.0.0.0/1', '8000::/1', '::/1']
MAX_PPGS_PER_CHAIN = 3
@ -597,26 +598,20 @@ class SfcAIMDriver(SfcAIMDriverBase):
cidr = netaddr.IPNetwork(cidr)
l3out = self.aim_mech._get_svi_net_l3out(net)
if l3out:
if cidr.prefixlen == 0:
# Use default External Network
ext_net = self.aim_mech._get_svi_default_external_epg(net)
ext_net_db = self.aim.get(aim_ctx, ext_net)
if not ext_net_db:
raise exceptions.DefaultExternalNetworkNotFound(
id=net['id'])
else:
# Create ExternalNetwork and ExternalSubnet on the proper
# L3Out. Return the External network
ext_net = aim_resource.ExternalNetwork(
tenant_name=l3out.tenant_name, l3out_name=l3out.name,
name=flc_aid)
# Create ExternalNetwork and ExternalSubnet on the proper
# L3Out. Return the External network
ext_net = aim_resource.ExternalNetwork(
tenant_name=l3out.tenant_name, l3out_name=l3out.name,
name=flc_aid)
ext_net_db = self.aim.get(aim_ctx, ext_net)
if not ext_net_db:
ext_net_db = self.aim.create(aim_ctx, ext_net)
subnets = [str(cidr)] if cidr.prefixlen != 0 else DEFAULT_SUBNETS
for sub in subnets:
ext_sub = aim_resource.ExternalSubnet(
tenant_name=ext_net.tenant_name,
l3out_name=ext_net.l3out_name,
external_network_name=ext_net.name, cidr=str(cidr))
ext_net_db = self.aim.get(aim_ctx, ext_net)
if not ext_net_db:
ext_net_db = self.aim.create(aim_ctx, ext_net)
external_network_name=ext_net.name, cidr=sub)
ext_sub_db = self.aim.get(aim_ctx, ext_sub)
if not ext_sub_db:
self.aim.create(aim_ctx, ext_sub)
@ -644,14 +639,10 @@ class SfcAIMDriver(SfcAIMDriverBase):
cidr = netaddr.IPNetwork(cidr)
ext_net = None
if l3out:
if cidr.prefixlen != 0:
ext_net = aim_resource.ExternalNetwork(
tenant_name=l3out.tenant_name, l3out_name=l3out.name,
name=flc_aid)
epg = self.aim.get(aim_ctx, ext_net)
else:
epg = self.aim.get(
aim_ctx, self.aim_mech._get_svi_default_external_epg(net))
ext_net = aim_resource.ExternalNetwork(
tenant_name=l3out.tenant_name, l3out_name=l3out.name,
name=flc_aid)
epg = self.aim.get(aim_ctx, ext_net)
else:
epg = self.aim.get(aim_ctx, self.aim_mech._get_epg_by_network_id(
plugin_context.session, net['id']))
@ -977,7 +968,11 @@ class SfcAIMDriver(SfcAIMDriverBase):
else:
cidr = flowc['destination_ip_prefix']
net = self._get_flowc_dst_network(plugin_context, flowc)
cidr = aim_utils.sanitize_display_name(cidr)
cidr = netaddr.IPNetwork(cidr)
if cidr.prefixlen == 0:
cidr = 'default'
else:
cidr = aim_utils.sanitize_display_name(str(cidr))
name = self.name_mapper.network(plugin_context.session, net['id'],
prefix=cidr + '_')
return name

View File

@ -436,21 +436,26 @@ class TestAIMServiceFunctionChainingBase(test_aim_base.AIMBaseTestCase):
# DN extension for external networks.
ext = aim_res.ExternalNetwork.from_dn(
net['apic:distinguished_names']['ExternalNetwork'])
name_prefix = cidr.replace('/', '_')
subnets = [cidr]
if cidr in ['0.0.0.0/0', '::/0']:
# use default external EPG
ext_net = self.aim_mgr.get(ctx, ext)
else:
ext_net = self.aim_mgr.get(
ctx, aim_res.ExternalNetwork(
tenant_name=ext.tenant_name,
l3out_name=ext.l3out_name,
name=cidr.replace(
'/', '_') + '_' + 'net_' + net['id']))
ext_sub = self.aim_mgr.get(ctx, aim_res.ExternalSubnet(
tenant_name=ext.tenant_name, l3out_name=ext.l3out_name,
external_network_name=ext_net.name, cidr=cidr))
name_prefix = 'default'
subnets = ['128.0.0.0/1', '0.0.0.0/1', '8000::/1',
'::/1']
ext_net = self.aim_mgr.get(
ctx, aim_res.ExternalNetwork(
tenant_name=ext.tenant_name,
l3out_name=ext.l3out_name,
name=name_prefix + '_' + 'net_' + net['id']))
for sub in subnets:
ext_sub = self.aim_mgr.get(ctx, aim_res.ExternalSubnet(
tenant_name=ext.tenant_name,
l3out_name=ext.l3out_name,
external_network_name=ext_net.name, cidr=sub))
self.assertIsNotNone(ext_sub)
self.assertIsNotNone(ext_net)
self.assertIsNotNone(ext_sub)
self.assertTrue(
contract.name in (ext_net.consumed_contract_names if
pref == 'src_' else