X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=itm%2Fitm-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fitm%2Fconfighelpers%2FItmInternalTunnelDeleteWorker.java;h=fc9a3a72bec9e643941d3a6ba657d219b3e90ae5;hb=3003216986296716a9382cce764ec036591fc4ff;hp=cb0b23f1d86368c7aa2b602119f2f3a2b0a2b8d6;hpb=89013bfee67ca4a74d63f1b8e940497e4e4a9bbb;p=vpnservice.git diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java index cb0b23f1..fc9a3a72 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java @@ -19,8 +19,11 @@ import org.opendaylight.vpnservice.itm.impl.ItmUtils; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.TunnelList; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.dpn.teps.info.TunnelEndPoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.InternalTunnel; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.InternalTunnelKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,9 +61,11 @@ public class ItmInternalTunnelDeleteWorker { for (TunnelEndPoints dstTep : dstDpn.getTunnelEndPoints()) { logger.trace("Processing dstTep " + dstTep); if (dstTep.getTransportZone().equals(srcTZone)) { + if( checkIfTrunkExists(dstDpn.getDPNID(), srcDpn.getDPNID(), dataBroker)) { // remove all trunk interfaces logger.trace("Invoking removeTrunkInterface between source TEP {} , Destination TEP {} " ,srcTep , dstTep); removeTrunkInterface(dataBroker, idManagerService, srcTep, dstTep, srcDpn.getDPNID(), dstDpn.getDPNID(), t, futures); + } } } } @@ -93,7 +98,7 @@ public class ItmInternalTunnelDeleteWorker { tnlContainerPath, dataBroker); // remove container if no DPNs are present if (containerOptional.isPresent()) { - DpnEndpoints deps = containerOptional.get(); + DpnEndpoints deps = containerOptional.get(); if (deps.getDPNTEPsInfo() == null || deps.getDPNTEPsInfo().isEmpty()) { logger.trace("Container Removal from DPNTEPSINFO CONFIG DS"); t.delete(LogicalDatastoreType.CONFIGURATION, tnlContainerPath); @@ -119,15 +124,43 @@ public class ItmInternalTunnelDeleteWorker { .getValue()); logger.trace("Removing forward Trunk Interface " + trunkfwdIfName); InstanceIdentifier trunkIdentifier = ItmUtils.buildId(trunkfwdIfName); - logger.debug( " Removing Trunk Interface Name - {} , Id - {} from Config DS {}, {} ", trunkfwdIfName, trunkIdentifier ) ; + logger.debug( " Removing Trunk Interface Name - {} , Id - {} from Config DS ", trunkfwdIfName, trunkIdentifier ) ; t.delete(LogicalDatastoreType.CONFIGURATION, trunkIdentifier); + + // also update itm-state ds -- Delete the forward tunnel-interface from the tunnel list + InstanceIdentifier path = InstanceIdentifier.create( + TunnelList.class) + .child(InternalTunnel.class, new InternalTunnelKey( srcDpnId, dstDpnId)); + t.delete(LogicalDatastoreType.CONFIGURATION,path) ; + // Release the Id for the forward trunk + ItmUtils.releaseId(idManagerService, trunkfwdIfName); + String trunkRevIfName = ItmUtils.getTrunkInterfaceName(idManagerService, dstTep.getInterfaceName(), dstTep.getIpAddress() .getIpv4Address().getValue(), srcTep.getIpAddress().getIpv4Address() .getValue()); logger.trace("Removing Reverse Trunk Interface " + trunkRevIfName); - trunkIdentifier = ItmUtils.buildId(trunkfwdIfName); - logger.debug( " Removing Trunk Interface Name - {} , Id - {} from Config DS {}, {} ", trunkfwdIfName, trunkIdentifier ) ; + trunkIdentifier = ItmUtils.buildId(trunkRevIfName); + logger.debug( " Removing Trunk Interface Name - {} , Id - {} from Config DS ", trunkRevIfName, trunkIdentifier ) ; t.delete(LogicalDatastoreType.CONFIGURATION, trunkIdentifier); + + // also update itm-state ds -- Delete the reverse tunnel-interface from the tunnel list + path = InstanceIdentifier.create( + TunnelList.class) + .child(InternalTunnel.class, new InternalTunnelKey(dstDpnId, srcDpnId)); + t.delete(LogicalDatastoreType.CONFIGURATION,path) ; + + // Release the Id for the Reverse trunk + ItmUtils.releaseId(idManagerService, trunkRevIfName); + } + private static boolean checkIfTrunkExists( BigInteger srcDpnId, BigInteger dstDpnId, DataBroker dataBroker) { + boolean existsFlag = false ; + InstanceIdentifier path = InstanceIdentifier.create( + TunnelList.class) + .child(InternalTunnel.class, new InternalTunnelKey( srcDpnId, dstDpnId)); + Optional internalTunnels = ItmUtils.read(LogicalDatastoreType.CONFIGURATION,path, dataBroker) ; + if( internalTunnels.isPresent()) + existsFlag = true ; + return existsFlag ; } }