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;
private final DataBroker broker;
private final IBgpManager bgpManager;
private IdManagerService idManager;
+ private VpnInterfaceManager vpnInterfaceManager;
private final FibEntriesListener fibListener;
private static final FutureCallback<Void> DEFAULT_CALLBACK =
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);
}
}
this.idManager = idManager;
}
+ public void setVpnInterfaceManager(VpnInterfaceManager vpnInterfaceManager) {
+ this.vpnInterfaceManager = vpnInterfaceManager;
+ }
+
@Override
protected void remove(InstanceIdentifier<VpnInstance> 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<VpnInstance> vpnIdentifier = VpnUtil.getVpnInstanceIdentifier(vpnName);
+ //Clean up vpn Interface
+ InstanceIdentifier<VpnInterfaces> vpnInterfacesId = InstanceIdentifier.builder(VpnInterfaces.class).build();
+ Optional<VpnInterfaces> optionalVpnInterfaces = read(LogicalDatastoreType.OPERATIONAL, vpnInterfacesId);
+
+ if(optionalVpnInterfaces.isPresent()) {
+ List<VpnInterface> 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();
@Override
protected void update(InstanceIdentifier<VpnInstance> 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<VpnInstance> identifier,
VpnInstance value) {
- LOG.info("key: {}, value: {}" +identifier, value);
-
- long vpnId = getUniqueId(value.getVpnInstanceName());
- InstanceIdentifier<VpnInstance1> augId = identifier.augmentation(VpnInstance1.class);
- Optional<VpnInstance1> vpnAugmenation = read(LogicalDatastoreType.CONFIGURATION, augId);
- if(vpnAugmenation.isPresent()) {
- VpnInstance1 vpn = vpnAugmenation.get();
- vpnId = vpn.getVpnId();
- LOG.info("VPN ID is {}", vpnId);
- }
+ LOG.trace("key: {}, value: {}", identifier, value);
+
+ 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();
return null;
}
- private Integer getUniqueId(String idKey) {
- GetUniqueIdInput getIdInput = new GetUniqueIdInputBuilder()
- .setPoolName(VpnConstants.VPN_IDPOOL_NAME)
- .setIdKey(idKey).build();
-
- try {
- Future<RpcResult<GetUniqueIdOutput>> result = idManager.getUniqueId(getIdInput);
- RpcResult<GetUniqueIdOutput> 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<RpcResult<AllocateIdOutput>> result = idManager.allocateId(getIdInput);
+// RpcResult<AllocateIdOutput> 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 <T extends DataObject> void delete(LogicalDatastoreType datastoreType, InstanceIdentifier<T> path) {
WriteTransaction tx = broker.newWriteOnlyTransaction();
@Override
protected void remove(InstanceIdentifier<VrfEntry> 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();
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);
@Override
protected void add(InstanceIdentifier<VrfEntry> 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();
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);