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=9ccdd3d85b13e009ed979118ed857016f1fb37e9;hb=2cb614254701461fc81d18df284389e99521083c;hp=5c43ac436f7db9b58d2e6dca3726188c548901fc;hpb=35631566cc1c319e83d150f53ea9529f0ce7e015;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 5c43ac436f..9ccdd3d85b 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,6 +7,7 @@ */ 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; @@ -108,6 +109,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev16011 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; @@ -1220,10 +1222,7 @@ public class NeutronvpnUtils { 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(); + List rds = vpnInstance.getRouteDistinguisher(); if (rds != null) { existingRDs.addAll(rds); } @@ -1462,13 +1461,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 +1475,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.merge(vpnIdentifier, builder.build(), false))); }); + return; } /**