X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=vpnmanager%2Fvpnmanager-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2FVpnManager.java;h=b387c29b69bbb29725811f850fed6e592d5b9c8c;hb=478586aec1c6363f22cc99a99cdd37fa14bd4dbe;hp=ee0c56eaefaccb00bb449e3136dc43ef4f57f3e6;hpb=cc530f909d6f2feeb6e97eb45778e437d55bd48b;p=vpnservice.git diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java index ee0c56ea..b387c29b 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java @@ -26,18 +26,20 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnAfConfig; +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.VpnInstances; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceBuilder; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.VpnInstance1; import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.VpnInstance1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntry; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,6 +54,7 @@ public class VpnManager extends AbstractDataChangeListener implemen private final DataBroker broker; private final IBgpManager bgpManager; private IdManagerService idManager; + private VpnInterfaceManager vpnInterfaceManager; private final FibEntriesListener fibListener; private static final FutureCallback DEFAULT_CALLBACK = @@ -83,10 +86,10 @@ public class VpnManager extends AbstractDataChangeListener implemen try { listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, getWildCardPath(), VpnManager.this, DataChangeScope.SUBTREE); - fibListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, + fibListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, getFibEntryListenerPath(), fibListener, DataChangeScope.BASE); } catch (final Exception e) { - LOG.error("VPN Service DataChange listener registration fail!", e); + LOG.error("VPN Service DataChange listener registration fail !", e); throw new IllegalStateException("VPN Service registration Listener failed.", e); } } @@ -95,11 +98,30 @@ public class VpnManager extends AbstractDataChangeListener implemen this.idManager = idManager; } + public void setVpnInterfaceManager(VpnInterfaceManager vpnInterfaceManager) { + this.vpnInterfaceManager = vpnInterfaceManager; + } + @Override protected void remove(InstanceIdentifier identifier, VpnInstance del) { - LOG.info("Remove event - Key: {}, value: {}", identifier, del); + LOG.trace("Remove VPN event - Key: {}, value: {}", identifier, del); String vpnName = del.getVpnInstanceName(); InstanceIdentifier vpnIdentifier = VpnUtil.getVpnInstanceIdentifier(vpnName); + //Clean up vpn Interface + InstanceIdentifier vpnInterfacesId = InstanceIdentifier.builder(VpnInterfaces.class).build(); + Optional optionalVpnInterfaces = read(LogicalDatastoreType.OPERATIONAL, vpnInterfacesId); + + if(optionalVpnInterfaces.isPresent()) { + List vpnInterfaces = optionalVpnInterfaces.get().getVpnInterface(); + for(VpnInterface vpnInterface : vpnInterfaces) { + if(vpnInterface.getVpnInstanceName().equals(vpnName)) { + LOG.debug("VpnInterface {} will be removed from VPN {}", vpnInterface.getName(), vpnName); + vpnInterfaceManager.remove( + VpnUtil.getVpnInterfaceIdentifier(vpnInterface.getName()), vpnInterface); + } + } + } + delete(LogicalDatastoreType.OPERATIONAL, vpnIdentifier); String rd = del.getIpv4Family().getRouteDistinguisher(); @@ -113,15 +135,15 @@ public class VpnManager extends AbstractDataChangeListener implemen @Override protected void update(InstanceIdentifier identifier, VpnInstance original, VpnInstance update) { - LOG.info("Update event - Key: {}, value: {}", identifier, update); + LOG.trace("Update event - Key: {}, value: {}", identifier, update); } @Override protected void add(InstanceIdentifier identifier, VpnInstance value) { - LOG.info("key: {}, value: {}" +identifier, value); + LOG.trace("key: {}, value: {}", identifier, value); - long vpnId = getUniqueId(value.getVpnInstanceName()); + long vpnId = VpnUtil.getUniqueId(idManager, VpnConstants.VPN_IDPOOL_NAME, value.getVpnInstanceName()); VpnInstance opValue = new VpnInstanceBuilder(value). addAugmentation(VpnInstance1.class, new VpnInstance1Builder().setVpnId(vpnId).build()).build(); @@ -206,24 +228,24 @@ public class VpnManager extends AbstractDataChangeListener implemen return null; } - private Integer getUniqueId(String idKey) { - GetUniqueIdInput getIdInput = new GetUniqueIdInputBuilder() - .setPoolName(VpnConstants.VPN_IDPOOL_NAME) - .setIdKey(idKey).build(); - - try { - Future> result = idManager.getUniqueId(getIdInput); - RpcResult rpcResult = result.get(); - if(rpcResult.isSuccessful()) { - return rpcResult.getResult().getIdValue().intValue(); - } else { - LOG.warn("RPC Call to Get Unique Id returned with Errors {}", rpcResult.getErrors()); - } - } catch (NullPointerException | InterruptedException | ExecutionException e) { - LOG.warn("Exception when getting Unique Id",e); - } - return 0; - } +// private Integer getUniqueId(IdManagerService idManager, String poolName,String idKey) { +// AllocateIdInput getIdInput = new AllocateIdInputBuilder() +// .setPoolName(poolName) +// .setIdKey(idKey).build(); +// +// try { +// Future> result = idManager.allocateId(getIdInput); +// RpcResult rpcResult = result.get(); +// if(rpcResult.isSuccessful()) { +// return rpcResult.getResult().getIdValue().intValue(); +// } else { +// LOG.warn("RPC Call to Get Unique Id returned with Errors {}", rpcResult.getErrors()); +// } +// } catch (InterruptedException | ExecutionException e) { +// LOG.warn("Exception when getting Unique Id",e); +// } +// return 0; +// } private void delete(LogicalDatastoreType datastoreType, InstanceIdentifier path) { WriteTransaction tx = broker.newWriteOnlyTransaction(); @@ -240,7 +262,7 @@ public class VpnManager extends AbstractDataChangeListener implemen @Override protected void remove(InstanceIdentifier identifier, VrfEntry del) { - LOG.info("Remove Fib event - Key : {}, value : {} ",identifier, del); + LOG.trace("Remove Fib event - Key : {}, value : {} ", identifier, del); final VrfTablesKey key = identifier.firstKeyOf(VrfTables.class, VrfTablesKey.class); String rd = key.getRouteDistinguisher(); Long label = del.getLabel(); @@ -256,12 +278,12 @@ public class VpnManager extends AbstractDataChangeListener implemen LOG.debug("Fib Route entry is empty."); return; } - LOG.info("Removing label from vpn info - {}", label); + LOG.debug("Removing label from vpn info - {}", label); routeIds.remove(label); asyncWrite(LogicalDatastoreType.OPERATIONAL, augId, new VpnInstance1Builder(vpnAug).setRouteEntryId(routeIds).build(), DEFAULT_CALLBACK); } else { - LOG.info("VPN Augmentation not found"); + LOG.warn("VPN Augmentation not found for vpn instance {}", vpn.getVpnInstanceName()); } } else { LOG.warn("No VPN Instance found for RD: {}", rd); @@ -278,7 +300,7 @@ public class VpnManager extends AbstractDataChangeListener implemen @Override protected void add(InstanceIdentifier identifier, VrfEntry add) { - LOG.info("Add Vrf Entry event - Key : {}, value : {}",identifier, add); + LOG.trace("Add Vrf Entry event - Key : {}, value : {}", identifier, add); final VrfTablesKey key = identifier.firstKeyOf(VrfTables.class, VrfTablesKey.class); String rd = key.getRouteDistinguisher(); Long label = add.getLabel(); @@ -293,12 +315,12 @@ public class VpnManager extends AbstractDataChangeListener implemen if(routeIds == null) { routeIds = new ArrayList<>(); } - LOG.info("Adding label to vpn info - {}", label); + LOG.debug("Adding label to vpn info - {}", label); routeIds.add(label); asyncWrite(LogicalDatastoreType.OPERATIONAL, augId, new VpnInstance1Builder(vpnAug).setRouteEntryId(routeIds).build(), DEFAULT_CALLBACK); } else { - LOG.info("VPN Augmentation not found"); + LOG.warn("VPN Augmentation not found for vpn instance {}", vpn.getVpnInstanceName()); } } else { LOG.warn("No VPN Instance found for RD: {}", rd);