X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=neutronvpn%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Fneutronvpn%2FNeutronvpnUtils.java;h=1b784a2fee4d70d98763563ce42132385942dfd5;hb=cf1ea9172b94fc17e45391b62bf4ca24ac5c5fe0;hp=e5b147a6c90931c8b064b673419deb7a1823f0a5;hpb=559a215cea7ed1e91a8a9c04f0841a71626ed5e8;p=netvirt.git diff --git a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnUtils.java b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnUtils.java index e5b147a6c9..1b784a2fee 100644 --- a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnUtils.java +++ b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnUtils.java @@ -7,10 +7,10 @@ */ package org.opendaylight.netvirt.neutronvpn; +import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; import com.google.common.base.Function; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; @@ -28,6 +28,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -39,10 +40,6 @@ import javax.inject.Singleton; import org.apache.commons.lang3.StringUtils; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker; import org.opendaylight.genius.infra.Datastore; import org.opendaylight.genius.infra.ManagedNewTransactionRunner; @@ -53,15 +50,12 @@ import org.opendaylight.genius.utils.JvmGlobalLocks; import org.opendaylight.infrautils.jobcoordinator.JobCoordinator; import org.opendaylight.infrautils.utils.concurrent.ListenableFutures; import org.opendaylight.infrautils.utils.concurrent.LoggingFutures; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.ReadTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.netvirt.neutronvpn.api.enums.IpVersionChoice; import org.opendaylight.netvirt.neutronvpn.api.utils.NeutronConstants; import org.opendaylight.netvirt.neutronvpn.api.utils.NeutronUtils; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceKey; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; @@ -111,6 +105,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev16011 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.external.subnets.SubnetsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.floating.ip.port.info.FloatingIpIdToPortMapping; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.floating.ip.port.info.FloatingIpIdToPortMappingKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.VpnInstances; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.VpnInterfaces; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.VpnInstance; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.VpnInstanceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.VpnInstanceKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.interfaces.VpnInterface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.interfaces.VpnInterfaceKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NetworkMaps; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronVpnPortIdSubportData; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronVpnPortipPortData; @@ -129,6 +130,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev15060 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.vpn.instance.RouterIdsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.vpnmaps.VpnMap; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.vpnmaps.VpnMapKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.vpnmaps.vpnmap.RouterIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev150712.NetworkL3Extension; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.Routers; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.Router; @@ -143,6 +145,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712. import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIpsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey; @@ -246,7 +249,7 @@ public class NeutronvpnUtils { protected Uuid getVpnForNetwork(Uuid network) { Optional optionalVpnMaps = read(LogicalDatastoreType.CONFIGURATION, VPN_MAPS_IID); if (optionalVpnMaps.isPresent() && optionalVpnMaps.get().nonnullVpnMap() != null) { - for (VpnMap vpnMap : new ArrayList<>(optionalVpnMaps.get().nonnullVpnMap())) { + for (VpnMap vpnMap : new ArrayList<>(optionalVpnMaps.get().nonnullVpnMap().values())) { List netIds = vpnMap.getNetworkIds(); if (netIds != null && netIds.contains(network)) { return vpnMap.getVpnId(); @@ -290,10 +293,10 @@ public class NeutronvpnUtils { Optional optionalVpnMaps = read(LogicalDatastoreType.CONFIGURATION, VPN_MAPS_IID); if (optionalVpnMaps.isPresent() && optionalVpnMaps.get().nonnullVpnMap() != null) { - for (VpnMap vpnMap : new ArrayList<>(optionalVpnMaps.get().nonnullVpnMap())) { - List routerIdsList = vpnMap.getRouterIds(); - if (routerIdsList == null || routerIdsList.isEmpty()) { + for (VpnMap vpnMap : new ArrayList<>(optionalVpnMaps.get().nonnullVpnMap().values())) { + Map keyRouterIdsMap = vpnMap.getRouterIds(); + if (keyRouterIdsMap == null || keyRouterIdsMap.isEmpty()) { continue; } // Skip router vpnId fetching from internet BGP-VPN @@ -301,7 +304,7 @@ public class NeutronvpnUtils { continue; } // FIXME: NETVIRT-1503: this check can be replaced by a ReadOnlyTransaction.exists() - if (routerIdsList.stream().anyMatch(routerIds -> routerId.equals(routerIds.getRouterId()))) { + if (keyRouterIdsMap.values().stream().anyMatch(routerIds -> routerId.equals(routerIds.getRouterId()))) { if (externalVpn) { if (!routerId.equals(vpnMap.getVpnId())) { return vpnMap.getVpnId(); @@ -343,7 +346,8 @@ public class NeutronvpnUtils { Optional optionalVpnMap = read(LogicalDatastoreType.CONFIGURATION, vpnMapIdentifier(vpnId)); if (optionalVpnMap.isPresent()) { VpnMap vpnMap = optionalVpnMap.get(); - return NeutronUtils.getVpnMapRouterIdsListUuid(vpnMap.getRouterIds()); + return NeutronUtils.getVpnMapRouterIdsListUuid(new ArrayList(vpnMap.getRouterIds().values())); } LOG.error("getRouterIdListforVpn: Failed as VPNMaps DS is absent for VPN {}", vpnId.getValue()); return null; @@ -369,8 +373,8 @@ public class NeutronvpnUtils { // read subnetmaps Optional subnetmaps = read(LogicalDatastoreType.CONFIGURATION, SUBNETMAPS_IID); if (subnetmaps.isPresent() && subnetmaps.get().getSubnetmap() != null) { - List subnetMapList = subnetmaps.get().getSubnetmap(); - for (Subnetmap candidateSubnetMap : subnetMapList) { + Map keySubnetmapMap = subnetmaps.get().getSubnetmap(); + for (Subnetmap candidateSubnetMap : keySubnetmapMap.values()) { if (candidateSubnetMap.getVpnId() != null && candidateSubnetMap.getVpnId().equals(vpnid)) { subnets.add(candidateSubnetMap.getId()); } @@ -425,7 +429,7 @@ public class NeutronvpnUtils { } LOG.debug("getNeutronNetwork for {}", networkId.getValue()); InstanceIdentifier inst = NEUTRON_NETWORKS_IID.child(Network.class, new NetworkKey(networkId)); - return read(LogicalDatastoreType.CONFIGURATION, inst).orNull(); + return read(LogicalDatastoreType.CONFIGURATION, inst).orElse(null); } protected @Nullable Port getNeutronPort(Uuid portId) { @@ -435,7 +439,7 @@ public class NeutronvpnUtils { } LOG.debug("getNeutronPort for {}", portId.getValue()); InstanceIdentifier inst = NEUTRON_PORTS_IID.child(Port.class, new PortKey(portId)); - return read(LogicalDatastoreType.CONFIGURATION, inst).orNull(); + return read(LogicalDatastoreType.CONFIGURATION, inst).orElse(null); } public PortIdToSubport getPortIdToSubport(Uuid portId) { @@ -458,7 +462,7 @@ public class NeutronvpnUtils { interfaceAclBuilder.setPortSecurityEnabled(false); interfaceAclBuilder.setInterfaceType(InterfaceAcl.InterfaceType.DhcpService); List aclAllowedAddressPairs = NeutronvpnUtils.getAllowedAddressPairsForAclService( - port.getMacAddress(), port.getFixedIps()); + port.getMacAddress(), new ArrayList(port.getFixedIps().values())); interfaceAclBuilder.setAllowedAddressPairs(aclAllowedAddressPairs); return interfaceAclBuilder.build(); } @@ -694,9 +698,11 @@ public class NeutronvpnUtils { */ protected static List getAllowedAddressPairsForFixedIps( List aclInterfaceAllowedAddressPairs, MacAddress portMacAddress, - List origFixedIps, List newFixedIps) { - List addedFixedIps = getFixedIpsDelta(newFixedIps, origFixedIps); - List deletedFixedIps = getFixedIpsDelta(origFixedIps, newFixedIps); + @Nullable Map origFixedIps, Collection newFixedIps) { + List addedFixedIps = getFixedIpsDelta(new ArrayList(newFixedIps), + new ArrayList(origFixedIps.values())); + List deletedFixedIps = getFixedIpsDelta(new ArrayList(origFixedIps.values()), + new ArrayList(newFixedIps)); List updatedAllowedAddressPairs = aclInterfaceAllowedAddressPairs != null ? new ArrayList<>(aclInterfaceAllowedAddressPairs) : new ArrayList<>(); @@ -720,13 +726,19 @@ public class NeutronvpnUtils { protected static List getUpdatedAllowedAddressPairs( List aclInterfaceAllowedAddressPairs, List origAllowedAddressPairs, + .AllowedAddressPairs> origAllowedAddressPairs, List newAllowedAddressPairs) { + .AllowedAddressPairs> newAllowedAddressPairs) { List addedAllowedAddressPairs = - getAllowedAddressPairsDelta(newAllowedAddressPairs,origAllowedAddressPairs); + getAllowedAddressPairsDelta(new ArrayList(newAllowedAddressPairs), + new ArrayList(origAllowedAddressPairs)); List deletedAllowedAddressPairs = - getAllowedAddressPairsDelta(origAllowedAddressPairs, newAllowedAddressPairs); + getAllowedAddressPairsDelta(new ArrayList(origAllowedAddressPairs), + new ArrayList(newAllowedAddressPairs)); List updatedAllowedAddressPairs = aclInterfaceAllowedAddressPairs != null ? new ArrayList<>(aclInterfaceAllowedAddressPairs) : new ArrayList<>(); @@ -752,11 +764,12 @@ public class NeutronvpnUtils { interfaceAclBuilder.setSecurityGroups(securityGroups); } List aclAllowedAddressPairs = NeutronvpnUtils.getAllowedAddressPairsForAclService( - port.getMacAddress(), port.getFixedIps()); + port.getMacAddress(), new ArrayList(port.getFixedIps().values())); // Update the allowed address pair with the IPv6 LLA that is auto configured on the port. aclAllowedAddressPairs.add(NeutronvpnUtils.updateIPv6LinkLocalAddressForAclService(port.getMacAddress())); List - portAllowedAddressPairs = port.getAllowedAddressPairs(); + portAllowedAddressPairs = new ArrayList(port.getAllowedAddressPairs().values()); if (portAllowedAddressPairs != null) { aclAllowedAddressPairs.addAll(NeutronvpnUtils.getAllowedAddressPairsForAclService(portAllowedAddressPairs)); } @@ -774,20 +787,20 @@ public class NeutronvpnUtils { @Nullable protected List getSubnetInfo(Port port) { - List portFixedIps = port.getFixedIps(); - if (portFixedIps == null) { + Map keyFixedIpsMap = port.getFixedIps(); + if (keyFixedIpsMap == null) { LOG.error("Failed to get Fixed IPs for the port {}", port.getName()); return null; } List subnetInfoList = new ArrayList<>(); - for (FixedIps portFixedIp : portFixedIps) { + for (FixedIps portFixedIp : keyFixedIpsMap.values()) { Uuid subnetId = portFixedIp.getSubnetId(); Subnet subnet = getNeutronSubnet(subnetId); if (subnet != null) { Class ipVersion = - NeutronSecurityRuleConstants.IP_VERSION_MAP.get(subnet.getIpVersion()); + NeutronSecurityGroupConstants.IP_VERSION_MAP.get(subnet.getIpVersion()); Class raMode = subnet.getIpv6RaMode() == null ? null - : NeutronSecurityRuleConstants.RA_MODE_MAP.get(subnet.getIpv6RaMode()); + : NeutronSecurityGroupConstants.RA_MODE_MAP.get(subnet.getIpv6RaMode()); SubnetInfo subnetInfo = new SubnetInfoBuilder().withKey(new SubnetInfoKey(subnetId)) .setIpVersion(ipVersion).setIpPrefix(new IpPrefixOrAddress(subnet.getCidr())) .setIpv6RaMode(raMode).setGatewayIp(subnet.getGatewayIp()).build(); @@ -816,7 +829,7 @@ public class NeutronvpnUtils { List subnetMapList = new ArrayList<>(); Optional subnetMaps = read(LogicalDatastoreType.CONFIGURATION, SUBNETMAPS_IID); if (subnetMaps.isPresent() && subnetMaps.get().getSubnetmap() != null) { - for (Subnetmap subnetmap : subnetMaps.get().getSubnetmap()) { + for (Subnetmap subnetmap : subnetMaps.get().getSubnetmap().values()) { if (routerId.equals(subnetmap.getRouterId())) { subnetMapList.add(subnetmap); } @@ -832,7 +845,7 @@ public class NeutronvpnUtils { List subnetIdList = new ArrayList<>(); Optional subnetMaps = read(LogicalDatastoreType.CONFIGURATION, SUBNETMAPS_IID); if (subnetMaps.isPresent() && subnetMaps.get().getSubnetmap() != null) { - for (Subnetmap subnetmap : subnetMaps.get().getSubnetmap()) { + for (Subnetmap subnetmap : subnetMaps.get().getSubnetmap().values()) { if (routerId.equals(subnetmap.getRouterId())) { subnetIdList.add(subnetmap.getId()); } @@ -849,7 +862,8 @@ public class NeutronvpnUtils { try { // FIXME: why are we not using getNeutronSubnet() here? it does caching for us... Optional subnet = read(LogicalDatastoreType.CONFIGURATION, - NEUTRON_SUBNETS_IID.child(Subnet.class, new SubnetKey(port.getFixedIps().get(0).getSubnetId()))); + NEUTRON_SUBNETS_IID.child(Subnet.class, new SubnetKey( + new ArrayList(port.getFixedIps().values()).get(0).getSubnetId()))); if (subnet.isPresent()) { String cidr = subnet.get().getCidr().stringValue(); // Extract the prefix length from cidr @@ -1068,7 +1082,7 @@ public class NeutronvpnUtils { private Optional read(LogicalDatastoreType datastoreType, InstanceIdentifier path) { try { return SingleTransactionDataBroker.syncReadOptional(dataBroker, datastoreType, path); - } catch (ReadFailedException e) { + } catch (ExecutionException | InterruptedException e) { throw new RuntimeException(e); } } @@ -1142,17 +1156,23 @@ public class NeutronvpnUtils { */ public Optional getInterVpnLinkByEndpointIp(String endpointIp) { InstanceIdentifier interVpnLinksIid = InstanceIdentifier.builder(InterVpnLinks.class).build(); - Optional interVpnLinksOpData = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, - interVpnLinksIid); - if (interVpnLinksOpData.isPresent()) { - for (InterVpnLink interVpnLink : interVpnLinksOpData.get().nonnullInterVpnLink()) { - if (interVpnLink.getFirstEndpoint().getIpAddress().getValue().equals(endpointIp) - || interVpnLink.getSecondEndpoint().getIpAddress().getValue().equals(endpointIp)) { - return Optional.of(interVpnLink); + Optional interVpnLinksOpData = null; + try { + interVpnLinksOpData = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, + interVpnLinksIid); + if (interVpnLinksOpData.isPresent()) { + for (InterVpnLink interVpnLink : interVpnLinksOpData.get().nonnullInterVpnLink().values()) { + if (interVpnLink.getFirstEndpoint().getIpAddress().getValue().equals(endpointIp) + || interVpnLink.getSecondEndpoint().getIpAddress().getValue().equals(endpointIp)) { + return Optional.of(interVpnLink); + } } } + } catch (ExecutionException | InterruptedException e) { + LOG.error("getInterVpnLinkByEndpointIp: Exception when reading intervpn Links for endpoint Ip {} ", + endpointIp, e); } - return Optional.absent(); + return Optional.empty(); } protected Integer releaseId(String poolName, String idKey) { @@ -1219,11 +1239,8 @@ public class NeutronvpnUtils { InstanceIdentifier path = InstanceIdentifier.builder(VpnInstances.class).build(); Optional vpnInstancesOptional = read(LogicalDatastoreType.CONFIGURATION, path); if (vpnInstancesOptional.isPresent() && vpnInstancesOptional.get().getVpnInstance() != null) { - for (VpnInstance vpnInstance : vpnInstancesOptional.get().getVpnInstance()) { - if (vpnInstance.getIpv4Family() == null) { - continue; - } - List rds = vpnInstance.getIpv4Family().getRouteDistinguisher(); + for (VpnInstance vpnInstance : vpnInstancesOptional.get().getVpnInstance().values()) { + List rds = vpnInstance.getRouteDistinguisher(); if (rds != null) { existingRDs.addAll(rds); } @@ -1248,10 +1265,10 @@ public class NeutronvpnUtils { public static List buildStaticMacEntry(Port port) { PhysAddress physAddress = new PhysAddress(port.getMacAddress().getValue()); - List fixedIps = port.getFixedIps(); + Map keyFixedIpsMap = port.getFixedIps(); IpAddress ipAddress = null; - if (isNotEmpty(fixedIps)) { - ipAddress = port.getFixedIps().get(0).getIpAddress(); + if (isNotEmpty(keyFixedIpsMap.values())) { + ipAddress = new ArrayList(port.getFixedIps().values()).get(0).getIpAddress(); } StaticMacEntriesBuilder staticMacEntriesBuilder = new StaticMacEntriesBuilder(); List staticMacEntries = new ArrayList<>(); @@ -1307,7 +1324,7 @@ public class NeutronvpnUtils { List subnetIdList = new ArrayList<>(); Optional subnetMaps = read(LogicalDatastoreType.CONFIGURATION, SUBNETMAPS_IID); if (subnetMaps.isPresent() && subnetMaps.get().getSubnetmap() != null) { - for (Subnetmap subnetmap : subnetMaps.get().getSubnetmap()) { + for (Subnetmap subnetmap : subnetMaps.get().getSubnetmap().values()) { if (routerId.equals(subnetmap.getRouterId())) { subnetIdList.add(subnetmap); } @@ -1336,7 +1353,7 @@ public class NeutronvpnUtils { InstanceIdentifier id = getVpnInstanceToVpnIdIdentifier(vpnName); return SingleTransactionDataBroker.syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(dataBroker, - LogicalDatastoreType.CONFIGURATION, id).toJavaUtil().map( + LogicalDatastoreType.CONFIGURATION, id).map( org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id .VpnInstance::getVrfId).orElse(null); } @@ -1427,7 +1444,7 @@ public class NeutronvpnUtils { Optional allSubnetMaps = read(LogicalDatastoreType.CONFIGURATION, SUBNETMAPS_IID); // calculate and store in list IpVersion for each subnetMap, belonging to current VpnInstance List snIpVersions = new ArrayList<>(); - for (Subnetmap snMap : allSubnetMaps.get().nonnullSubnetmap()) { + for (Subnetmap snMap : allSubnetMaps.get().nonnullSubnetmap().values()) { if (snMap.getId().equals(sm.getId())) { continue; } @@ -1462,13 +1479,13 @@ public class NeutronvpnUtils { public void updateVpnInstanceWithIpFamily(String vpnName, IpVersionChoice ipVersion, boolean add) { jobCoordinator.enqueueJob("VPN-" + vpnName, () -> { - VpnInstanceOpDataEntry vpnInstanceOpDataEntry = getVpnInstanceOpDataEntryFromVpnId(vpnName); - if (vpnInstanceOpDataEntry == null) { + VpnInstance vpnInstance = getVpnInstance(dataBroker, new Uuid(vpnName)); + if (vpnInstance == null) { return Collections.emptyList(); } - if (vpnInstanceOpDataEntry.getType() == VpnInstanceOpDataEntry.Type.L2) { + if (vpnInstance.isL2vpn()) { LOG.debug("updateVpnInstanceWithIpFamily: Update VpnInstance {} with ipFamily {}." - + "VpnInstanceOpDataEntry is L2 instance. Do nothing.", vpnName, ipVersion); + + "VpnInstance is L2 instance. Do nothing.", vpnName, ipVersion); return Collections.emptyList(); } if (ipVersion == IpVersionChoice.UNDEFINED) { @@ -1476,24 +1493,32 @@ public class NeutronvpnUtils { + "is not allowed. Do nothing", vpnName); return Collections.emptyList(); } - VpnInstanceOpDataEntryBuilder builder = new VpnInstanceOpDataEntryBuilder() - .setVrfId(vpnInstanceOpDataEntry.getVrfId()); + VpnInstanceBuilder builder = new VpnInstanceBuilder(vpnInstance); boolean ipConfigured = add; - if (ipVersion.isIpVersionChosen(IpVersionChoice.IPV4AND6)) { - builder.setIpv4Configured(ipConfigured); - builder.setIpv6Configured(ipConfigured); - } else if (ipVersion.isIpVersionChosen(IpVersionChoice.IPV4)) { - builder.setIpv4Configured(ipConfigured); - } else if (ipVersion.isIpVersionChosen(IpVersionChoice.IPV6)) { - builder.setIpv6Configured(ipConfigured); + + int originalValue = vpnInstance.getIpAddressFamilyConfigured().getIntValue(); + int updatedValue = ipVersion.choice; + + if (originalValue != updatedValue) { + if (ipConfigured) { + originalValue = originalValue == 0 ? updatedValue : updatedValue + originalValue; + } else { + originalValue = 10 - updatedValue; + } + } else if (!ipConfigured) { + originalValue = 0; } + + builder.setIpAddressFamilyConfigured(VpnInstance.IpAddressFamilyConfigured.forValue(originalValue)); + + InstanceIdentifier vpnIdentifier = InstanceIdentifier.builder(VpnInstances.class) + .child(VpnInstance.class, new VpnInstanceKey(vpnName)).build(); + LOG.info("updateVpnInstanceWithIpFamily: Successfully {} IP family {} to Vpn {}", + add == true ? "added" : "removed", ipVersion, vpnName); return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit( - OPERATIONAL, tx -> { - tx.merge(getVpnOpDataIdentifier(vpnInstanceOpDataEntry.getVrfId()), builder.build(), false); - LOG.info("updateVpnInstanceWithIpFamily: Successfully {} {} to Vpn {}", - add == true ? "added" : "removed", ipVersion, vpnName); - })); + CONFIGURATION, tx -> tx.mergeParentStructureMerge(vpnIdentifier, builder.build()))); }); + return; } /** @@ -1671,7 +1696,7 @@ public class NeutronvpnUtils { VpnInstanceOpDataEntryBuilder builder = new VpnInstanceOpDataEntryBuilder(vpnInstanceOpDataEntry); builder.setBgpvpnType(choice); ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, tx -> { - tx.merge(id, builder.build(), false); + tx.merge(id, builder.build()); LOG.debug("updateVpnInstanceOpWithType: sent merge to operDS BgpvpnType {} for {}", choice, vpn.getValue()); }), LOG, "Error updating VPN instance op {} with type {}", vpn, choice); } @@ -1698,7 +1723,8 @@ public class NeutronvpnUtils { LogicalDatastoreType.OPERATIONAL, id); List dpns = new ArrayList<>(); if (routerDpnListData.isPresent()) { - for (DpnVpninterfacesList dpnVpnInterface : routerDpnListData.get().nonnullDpnVpninterfacesList()) { + for (DpnVpninterfacesList dpnVpnInterface + : routerDpnListData.get().nonnullDpnVpninterfacesList().values()) { dpns.add(dpnVpnInterface.getDpnId()); } } @@ -1731,7 +1757,7 @@ public class NeutronvpnUtils { InstanceIdentifier id = getVpnInstanceToVpnIdIdentifier(vpnName); return SingleTransactionDataBroker.syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(dataBroker, - LogicalDatastoreType.CONFIGURATION, id).toJavaUtil().map( + LogicalDatastoreType.CONFIGURATION, id).map( org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id .VpnInstance::getVpnId).orElse(null).toJava(); } @@ -1758,7 +1784,7 @@ public class NeutronvpnUtils { jobCoordinator.enqueueJob(jobKey, () -> { SettableFuture> settableFuture = SettableFuture.create(); List futures = Collections.singletonList(settableFuture); - try (ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction()) { + try (ReadTransaction tx = dataBroker.newReadOnlyTransaction()) { Futures.addCallback(tx.read(datastoreType, iid), new SettableFutureCallback>(settableFuture) { @Override