From b85d01b8ab1f2fb41b1515da53f1be1472b14335 Mon Sep 17 00:00:00 2001 From: Faseela K Date: Mon, 7 Dec 2015 23:19:07 +0530 Subject: [PATCH] Fixing issues with idmanager Adding if-index support for interfacemanager Change-Id: If607bb91f14d729478065b7c5af29f26ffbd8e28 Signed-off-by: Faseela K --- .../org/opendaylight/idmanager/IdUtils.java | 7 ---- .../impl/rev150325/IdmanagerImplModule.java | 3 ++ .../idmanager/test/IdManagerTest.java | 7 ---- .../src/main/yang/odl-interface-meta.yang | 13 +++++++ .../src/main/yang/odl-interface-rpc.yang | 14 +++++++ .../vpnservice/interfacemgr/IfmUtil.java | 39 ++++++++++++++++++- .../interfacemgr/InterfacemgrProvider.java | 8 ++-- .../commons/InterfaceMetaUtils.java | 22 +++++++++++ .../listeners/InterfaceConfigListener.java | 5 ++- .../InterfaceInventoryStateListener.java | 24 ++++++++---- .../listeners/VlanMemberConfigListener.java | 5 ++- .../OvsInterfaceConfigAddHelper.java | 30 +++++++------- .../OvsInterfaceConfigRemoveHelper.java | 14 +++---- .../OvsInterfaceConfigUpdateHelper.java | 3 +- .../OvsVlanMemberConfigAddHelper.java | 23 ++++++----- .../OvsVlanMemberConfigRemoveHelper.java | 3 +- .../OvsVlanMemberConfigUpdateHelper.java | 3 +- .../OvsInterfaceStateAddHelper.java | 10 ++++- .../OvsInterfaceStateRemoveHelper.java | 9 ++++- .../InterfaceManagerRpcService.java | 23 +++++++++++ .../TunnelInterfaceConfigurationTest.java | 3 +- .../vpnservice/nexthopmgr/NexthopManager.java | 4 +- .../nexthopmgr/NexthopmgrProvider.java | 5 ++- 23 files changed, 200 insertions(+), 77 deletions(-) diff --git a/idmanager/idmanager-impl/src/main/java/org/opendaylight/idmanager/IdUtils.java b/idmanager/idmanager-impl/src/main/java/org/opendaylight/idmanager/IdUtils.java index 507dad2b..ebf4cd73 100644 --- a/idmanager/idmanager-impl/src/main/java/org/opendaylight/idmanager/IdUtils.java +++ b/idmanager/idmanager-impl/src/main/java/org/opendaylight/idmanager/IdUtils.java @@ -52,15 +52,8 @@ class IdUtils { private static int BLADE_ID; static { - String hostName; try { - hostName = InetAddress.getLocalHost().getHostName(); BLADE_ID = InetAddresses.coerceToInteger(InetAddress.getLocalHost()); - if (hostName.indexOf("-") > 0) { - BLADE_ID = new Integer(hostName.split("-")[1].toString()).intValue(); - } else { - LOGGER.error("Host name {} is not matching with the condition!! PL-X is expected", hostName); - } } catch (Exception e) { LOGGER.error("IdManager - Exception - {}", e.getMessage()); } diff --git a/idmanager/idmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/idmanager/impl/rev150325/IdmanagerImplModule.java b/idmanager/idmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/idmanager/impl/rev150325/IdmanagerImplModule.java index d141e3ee..17f99bef 100644 --- a/idmanager/idmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/idmanager/impl/rev150325/IdmanagerImplModule.java +++ b/idmanager/idmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/idmanager/impl/rev150325/IdmanagerImplModule.java @@ -11,6 +11,7 @@ package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.idmanag import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.idmanager.IdManagerServiceProvider; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.LockManagerService; public class IdmanagerImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.idmanager.impl.rev150325.AbstractIdmanagerImplModule { public IdmanagerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { @@ -23,7 +24,9 @@ public class IdmanagerImplModule extends org.opendaylight.yang.gen.v1.urn.openda @Override public java.lang.AutoCloseable createInstance() { + LockManagerService lockManagerService = getRpcRegistryDependency().getRpcService(LockManagerService.class); IdManagerServiceProvider provider = new IdManagerServiceProvider(getRpcRegistryDependency()); + provider.setLockManager(lockManagerService); getBrokerDependency().registerProvider(provider); return provider; } diff --git a/idmanager/idmanager-impl/src/test/java/org/opendaylight/idmanager/test/IdManagerTest.java b/idmanager/idmanager-impl/src/test/java/org/opendaylight/idmanager/test/IdManagerTest.java index 181cc499..9833d04c 100644 --- a/idmanager/idmanager-impl/src/test/java/org/opendaylight/idmanager/test/IdManagerTest.java +++ b/idmanager/idmanager-impl/src/test/java/org/opendaylight/idmanager/test/IdManagerTest.java @@ -69,15 +69,8 @@ public class IdManagerTest { private static final Logger LOG = LoggerFactory.getLogger(IdManagerTest.class); private static int BLADE_ID; static { - String hostName; try { - hostName = InetAddress.getLocalHost().getHostName(); BLADE_ID = InetAddresses.coerceToInteger(InetAddress.getLocalHost()); - if (hostName.indexOf("-") > 0) { - BLADE_ID = new Integer(hostName.split("-")[1].toString()).intValue(); - } else { - LOG.error("Host name {} is not matching with the condition!! PL-X is expected", hostName); - } } catch (Exception e) { LOG.error("IdManager - Exception - {}", e.getMessage()); } diff --git a/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-meta.yang b/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-meta.yang index 66b4a850..ef6aa20a 100644 --- a/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-meta.yang +++ b/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-meta.yang @@ -61,4 +61,17 @@ module odl-interface-meta { } } } + + container if-indexes-interface-map { + config false; + list if-index-interface { + key if-index; + leaf if-index { + type int32; + } + leaf interface-name { + type string; + } + } + } } \ No newline at end of file diff --git a/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang b/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang index 88ce5ac6..ef1cad59 100644 --- a/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang +++ b/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang @@ -128,4 +128,18 @@ module odl-interface-rpc { } } } + + rpc get-interface-from-if-index { + description "to get interface associated with an if-index"; + input { + leaf if-index { + type int32; + } + } + output { + leaf interface-name { + type string; + } + } + } } \ No newline at end of file diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java index ebfed475..26366286 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java @@ -38,9 +38,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150 import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class IfmUtil { - + private static final Logger LOG = LoggerFactory.getLogger(IfmUtil.class); + private static final int INVALID_ID = 0; public static String getDpnFromNodeConnectorId(NodeConnectorId portId) { /* * NodeConnectorId is of form 'openflow:dpnid:portnum' @@ -154,6 +158,37 @@ public class IfmUtil { return new BigInteger[] { metadata, metadataMask }; } + public static Integer allocateId(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 INVALID_ID; + } - + public static void releaseId(IdManagerService idManager, String poolName, String idKey) { + ReleaseIdInput idInput = new ReleaseIdInputBuilder() + .setPoolName(poolName) + .setIdKey(idKey).build(); + try { + Future> result = idManager.releaseId(idInput); + RpcResult rpcResult = result.get(); + if(!rpcResult.isSuccessful()) { + LOG.warn("RPC Call to release Id {} with Key {} returned with Errors {}", + idKey, rpcResult.getErrors()); + } + } catch (InterruptedException | ExecutionException e) { + LOG.warn("Exception when releasing Id for key {}", idKey, e); + } + } } diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java index e886115f..f519acf3 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java @@ -13,7 +13,6 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.idmanager.IdManager; import org.opendaylight.vpnservice.interfacemgr.listeners.InterfaceConfigListener; import org.opendaylight.vpnservice.interfacemgr.listeners.InterfaceInventoryStateListener; import org.opendaylight.vpnservice.interfacemgr.listeners.InterfaceTopologyStateListener; @@ -28,6 +27,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. 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.CreateIdPoolInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.*; import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; @@ -43,7 +43,7 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable private static final Logger LOG = LoggerFactory.getLogger(InterfacemgrProvider.class); private RpcProviderRegistry rpcProviderRegistry; - private IdManager idManager; + private IdManagerService idManager; private InterfaceConfigListener interfaceConfigListener; private InterfaceTopologyStateListener topologyStateListener; @@ -64,7 +64,7 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable LOG.info("InterfacemgrProvider Session Initiated"); try { final DataBroker dataBroker = session.getSALService(DataBroker.class); - idManager = new IdManager(dataBroker); + idManager = rpcProviderRegistry.getRpcService(IdManagerService.class); createIdPool(); interfaceManagerRpcService = new InterfaceManagerRpcService(dataBroker); @@ -74,7 +74,7 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable interfaceConfigListener = new InterfaceConfigListener(dataBroker, idManager); interfaceConfigListener.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker); - interfaceInventoryStateListener = new InterfaceInventoryStateListener(dataBroker); + interfaceInventoryStateListener = new InterfaceInventoryStateListener(dataBroker, idManager); interfaceInventoryStateListener.registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker); topologyStateListener = new InterfaceTopologyStateListener(dataBroker); diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/InterfaceMetaUtils.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/InterfaceMetaUtils.java index f8aaaf6b..a123fccc 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/InterfaceMetaUtils.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/InterfaceMetaUtils.java @@ -11,10 +11,17 @@ import com.google.common.base.Optional; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.idmanager.IdManager; +import org.opendaylight.vpnservice.interfacemgr.IfmConstants; import org.opendaylight.vpnservice.interfacemgr.IfmUtil; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.BridgeInterfaceInfo; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.BridgeRefInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.IfIndexesInterfaceMap; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.InterfaceChildInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._if.indexes._interface.map.IfIndexInterface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._if.indexes._interface.map.IfIndexInterfaceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._if.indexes._interface.map.IfIndexInterfaceKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -146,4 +153,19 @@ public class InterfaceMetaUtils { } return interfaceChildEntryOptional.get(); } + + public static void createLportTagInterfaceMap(WriteTransaction t, String infName, Integer ifIndex) { + InstanceIdentifier id = InstanceIdentifier.builder(IfIndexesInterfaceMap.class).child(IfIndexInterface.class, new IfIndexInterfaceKey(ifIndex)).build(); + IfIndexInterface ifIndexInterface = new IfIndexInterfaceBuilder().setIfIndex(ifIndex).setKey(new IfIndexInterfaceKey(ifIndex)).setInterfaceName(infName).build(); + t.put(LogicalDatastoreType.OPERATIONAL, id, ifIndexInterface, true); + } + + public static void removeLportTagInterfaceMap(WriteTransaction t, IdManagerService idManager, DataBroker broker, String infName, Integer ifIndex) { + InstanceIdentifier id = InstanceIdentifier.builder(IfIndexesInterfaceMap.class).child(IfIndexInterface.class, new IfIndexInterfaceKey(ifIndex)).build(); + Optional ifIndexesInterface = IfmUtil.read(LogicalDatastoreType.OPERATIONAL, id, broker); + if(ifIndexesInterface.isPresent()) { + t.delete(LogicalDatastoreType.OPERATIONAL, id); + } + IfmUtil.releaseId(idManager, IfmConstants.IFM_IDPOOL_NAME, infName); + } } \ No newline at end of file diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java index a8457c55..6e911667 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java @@ -18,6 +18,7 @@ import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.confighelpers.OvsIn import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.confighelpers.OvsInterfaceConfigUpdateHelper; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; 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.interfacemgr.rev150331.ParentRefs; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; @@ -33,9 +34,9 @@ import java.util.concurrent.Callable; public class InterfaceConfigListener extends AsyncDataTreeChangeListenerBase { private static final Logger LOG = LoggerFactory.getLogger(InterfaceConfigListener.class); private DataBroker dataBroker; - private IdManager idManager; + private IdManagerService idManager; - public InterfaceConfigListener(final DataBroker dataBroker, final IdManager idManager) { + public InterfaceConfigListener(final DataBroker dataBroker, final IdManagerService idManager) { super(Interface.class, InterfaceConfigListener.class); this.dataBroker = dataBroker; this.idManager = idManager; diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceInventoryStateListener.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceInventoryStateListener.java index 8629a75c..f496bbc0 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceInventoryStateListener.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceInventoryStateListener.java @@ -10,16 +10,19 @@ package org.opendaylight.vpnservice.interfacemgr.listeners; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; +import org.opendaylight.idmanager.IdManager; import org.opendaylight.vpnservice.datastoreutils.AsyncDataChangeListenerBase; import org.opendaylight.vpnservice.datastoreutils.DataStoreJobCoordinator; import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.statehelpers.OvsInterfaceStateAddHelper; import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.statehelpers.OvsInterfaceStateRemoveHelper; +import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.statehelpers.OvsInterfaceStateRemoveHelper; import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.statehelpers.OvsInterfaceStateUpdateHelper; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,10 +41,12 @@ import java.util.concurrent.Callable; public class InterfaceInventoryStateListener extends AsyncDataChangeListenerBase implements AutoCloseable{ private static final Logger LOG = LoggerFactory.getLogger(InterfaceInventoryStateListener.class); private DataBroker dataBroker; + private IdManagerService idManager; - public InterfaceInventoryStateListener(final DataBroker dataBroker) { + public InterfaceInventoryStateListener(final DataBroker dataBroker, final IdManagerService idManager) { super(FlowCapableNodeConnector.class, InterfaceInventoryStateListener.class); this.dataBroker = dataBroker; + this.idManager = idManager; } @Override @@ -68,7 +73,7 @@ public class InterfaceInventoryStateListener extends AsyncDataChangeListenerBase NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(key.firstIdentifierOf(NodeConnector.class)).getId(); DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance(); - InterfaceStateRemoveWorker interfaceStateRemoveWorker = new InterfaceStateRemoveWorker(key, + InterfaceStateRemoveWorker interfaceStateRemoveWorker = new InterfaceStateRemoveWorker(idManager, key, flowCapableNodeConnectorOld, portName); coordinator.enqueueJob(portName, interfaceStateRemoveWorker); } @@ -92,7 +97,7 @@ public class InterfaceInventoryStateListener extends AsyncDataChangeListenerBase NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(key.firstIdentifierOf(NodeConnector.class)).getId(); DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance(); - InterfaceStateAddWorker ifStateAddWorker = new InterfaceStateAddWorker(nodeConnectorId, + InterfaceStateAddWorker ifStateAddWorker = new InterfaceStateAddWorker(idManager, nodeConnectorId, fcNodeConnectorNew, portName); coordinator.enqueueJob(portName, ifStateAddWorker); } @@ -101,20 +106,22 @@ public class InterfaceInventoryStateListener extends AsyncDataChangeListenerBase private final NodeConnectorId nodeConnectorId; private final FlowCapableNodeConnector fcNodeConnectorNew; private final String portName; + private final IdManagerService idManager; - public InterfaceStateAddWorker(NodeConnectorId nodeConnectorId, + public InterfaceStateAddWorker(IdManagerService idManager, NodeConnectorId nodeConnectorId, FlowCapableNodeConnector fcNodeConnectorNew, String portName) { this.nodeConnectorId = nodeConnectorId; this.fcNodeConnectorNew = fcNodeConnectorNew; this.portName = portName; + this.idManager = idManager; } @Override public Object call() throws Exception { // If another renderer(for eg : CSS) needs to be supported, check can be performed here // to call the respective helpers. - return OvsInterfaceStateAddHelper.addState(dataBroker, nodeConnectorId, + return OvsInterfaceStateAddHelper.addState(dataBroker, idManager, nodeConnectorId, portName, fcNodeConnectorNew); } @@ -168,20 +175,23 @@ public class InterfaceInventoryStateListener extends AsyncDataChangeListenerBase InstanceIdentifier key; FlowCapableNodeConnector fcNodeConnectorOld; private final String portName; + private final IdManagerService idManager; - public InterfaceStateRemoveWorker(InstanceIdentifier key, + public InterfaceStateRemoveWorker(IdManagerService idManager, + InstanceIdentifier key, FlowCapableNodeConnector fcNodeConnectorOld, String portName) { this.key = key; this.fcNodeConnectorOld = fcNodeConnectorOld; this.portName = portName; + this.idManager = idManager; } @Override public Object call() throws Exception { // If another renderer(for eg : CSS) needs to be supported, check can be performed here // to call the respective helpers. - return OvsInterfaceStateRemoveHelper.removeState(key, dataBroker, portName, fcNodeConnectorOld); + return OvsInterfaceStateRemoveHelper.removeState(idManager, key, dataBroker, portName, fcNodeConnectorOld); } @Override diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/VlanMemberConfigListener.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/VlanMemberConfigListener.java index 2d947162..eb43d689 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/VlanMemberConfigListener.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/VlanMemberConfigListener.java @@ -17,6 +17,7 @@ import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.confighelpers.OvsVl import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.confighelpers.OvsVlanMemberConfigUpdateHelper; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; 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.interfacemgr.rev150331.IfL2vlan; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.ParentRefs; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -29,9 +30,9 @@ import java.util.concurrent.Callable; public class VlanMemberConfigListener extends AsyncDataTreeChangeListenerBase { private static final Logger LOG = LoggerFactory.getLogger(VlanMemberConfigListener.class); private DataBroker dataBroker; - private IdManager idManager; + private IdManagerService idManager; - public VlanMemberConfigListener(final DataBroker dataBroker, final IdManager idManager) { + public VlanMemberConfigListener(final DataBroker dataBroker, final IdManagerService idManager) { super(Interface.class, VlanMemberConfigListener.class); this.dataBroker = dataBroker; this.idManager = idManager; diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java index 323ac880..17d4cf6b 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java @@ -13,6 +13,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.idmanager.IdManager; +import org.opendaylight.vpnservice.interfacemgr.IfmConstants; import org.opendaylight.vpnservice.interfacemgr.IfmUtil; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceManagerCommonUtils; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; @@ -25,6 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -51,7 +53,7 @@ public class OvsInterfaceConfigAddHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsInterfaceConfigAddHelper.class); public static List> addConfiguration(DataBroker dataBroker, ParentRefs parentRefs, - Interface interfaceNew, IdManager idManager) { + Interface interfaceNew, IdManagerService idManager) { List> futures = new ArrayList<>(); IfTunnel ifTunnel = interfaceNew.getAugmentation(IfTunnel.class); @@ -60,19 +62,20 @@ public class OvsInterfaceConfigAddHelper { return futures; } - addVlanConfiguration(interfaceNew, dataBroker, futures); + addVlanConfiguration(interfaceNew, dataBroker, idManager, futures); return futures; } - private static void addVlanConfiguration(Interface interfaceNew, DataBroker dataBroker, + private static void addVlanConfiguration(Interface interfaceNew, DataBroker dataBroker, IdManagerService idManager, List> futures) { WriteTransaction t = dataBroker.newWriteOnlyTransaction(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState = InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(interfaceNew.getName(), dataBroker); + if (ifState == null) { return; } - updateStateEntry(interfaceNew, t, ifState); + updateStateEntry(interfaceNew, ifState.getIfIndex(), t, ifState); IfL2vlan ifL2vlan = interfaceNew.getAugmentation(IfL2vlan.class); if (ifL2vlan == null || ifL2vlan.getL2vlanMode() != IfL2vlan.L2vlanMode.Trunk) { @@ -120,7 +123,7 @@ public class OvsInterfaceConfigAddHelper { } private static void addTunnelConfiguration(DataBroker dataBroker, ParentRefs parentRefs, - Interface interfaceNew, IdManager idManager, + Interface interfaceNew, IdManagerService idManager, List> futures) { LOG.debug("adding tunnel configuration for {}", interfaceNew.getName()); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); @@ -168,17 +171,16 @@ public class OvsInterfaceConfigAddHelper { } } - private static void updateStateEntry(Interface interfaceNew, WriteTransaction t, + private static void updateStateEntry(Interface interfaceNew, Integer ifIndex, WriteTransaction t, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState) { - OperStatus operStatus; + InstanceIdentifier ifStateId = + IfmUtil.buildStateInterfaceId(interfaceNew.getName()); + InterfaceBuilder ifaceBuilder = new InterfaceBuilder(); if (!interfaceNew.isEnabled() && ifState.getOperStatus() != OperStatus.Down) { - operStatus = OperStatus.Down; - InstanceIdentifier ifStateId = - IfmUtil.buildStateInterfaceId(interfaceNew.getName()); - InterfaceBuilder ifaceBuilder = new InterfaceBuilder(); - ifaceBuilder.setOperStatus(operStatus); - ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(interfaceNew.getName())); - t.merge(LogicalDatastoreType.OPERATIONAL, ifStateId, ifaceBuilder.build()); + ifaceBuilder.setOperStatus(OperStatus.Down); } + ifaceBuilder.setIfIndex(ifIndex); + ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(interfaceNew.getName())); + t.merge(LogicalDatastoreType.OPERATIONAL, ifStateId, ifaceBuilder.build()); } } diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java index bb55c4f7..03f9c060 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java @@ -23,6 +23,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -49,21 +50,16 @@ public class OvsInterfaceConfigRemoveHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsInterfaceConfigRemoveHelper.class); public static List> removeConfiguration(DataBroker dataBroker, Interface interfaceOld, - IdManager idManager, ParentRefs parentRefs) { + IdManagerService idManager, ParentRefs parentRefs) { List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); IfTunnel ifTunnel = interfaceOld.getAugmentation(IfTunnel.class); if (ifTunnel != null) { removeTunnelConfiguration(parentRefs, dataBroker, interfaceOld, idManager, t); - futures.add(t.submit()); - return futures; + }else { + removeVlanConfiguration(dataBroker, interfaceOld, t); } - - removeVlanConfiguration(dataBroker, interfaceOld, t); - - /* FIXME: Deallocate ID from Idmanager. */ - futures.add(t.submit()); return futures; } @@ -128,7 +124,7 @@ public class OvsInterfaceConfigRemoveHelper { } private static void removeTunnelConfiguration(ParentRefs parentRefs, DataBroker dataBroker, Interface interfaceOld, - IdManager idManager, WriteTransaction t) { + IdManagerService idManager, WriteTransaction t) { BigInteger dpId = null; if (parentRefs != null) { diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java index b7c2bb09..0770bd5b 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java @@ -22,6 +22,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -38,7 +39,7 @@ import java.util.List; public class OvsInterfaceConfigUpdateHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsInterfaceConfigUpdateHelper.class); - public static List> updateConfiguration(DataBroker dataBroker, IdManager idManager, + public static List> updateConfiguration(DataBroker dataBroker, IdManagerService idManager, Interface interfaceNew, Interface interfaceOld) { List> futures = new ArrayList<>(); diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java index 78f87f34..d9dd3762 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java @@ -23,6 +23,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; @@ -42,7 +43,7 @@ public class OvsVlanMemberConfigAddHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsVlanMemberConfigAddHelper.class); public static List> addConfiguration(DataBroker dataBroker, ParentRefs parentRefs, Interface interfaceNew, IfL2vlan ifL2vlan, - IdManager idManager) { + IdManagerService idManager) { List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); @@ -137,18 +138,16 @@ public class OvsVlanMemberConfigAddHelper { } } - private static long createInterfaceChildEntry(DataBroker dataBroker, IdManager idManager, WriteTransaction t, + private static long createInterfaceChildEntry(DataBroker dataBroker, IdManagerService idManager, WriteTransaction t, InterfaceParentEntryKey interfaceParentEntryKey, String childInterface){ - //TODO FIXME -// long lportTag = InterfaceManagerCommonUtils.getUniqueId(idManager, childInterface); -// InterfaceChildEntryKey interfaceChildEntryKey = new InterfaceChildEntryKey(childInterface); -// InstanceIdentifier intfId = -// InterfaceMetaUtils.getInterfaceChildEntryIdentifier(interfaceParentEntryKey, interfaceChildEntryKey); -// InterfaceChildEntryBuilder entryBuilder = new InterfaceChildEntryBuilder().setKey(interfaceChildEntryKey) -// .setChildInterface(childInterface); -// t.put(LogicalDatastoreType.CONFIGURATION, intfId, entryBuilder.build(),true); -// return lportTag; - return 0L; + long lportTag = IfmUtil.allocateId(idManager, IfmConstants.IFM_IDPOOL_NAME, childInterface); + InterfaceChildEntryKey interfaceChildEntryKey = new InterfaceChildEntryKey(childInterface); + InstanceIdentifier intfId = + InterfaceMetaUtils.getInterfaceChildEntryIdentifier(interfaceParentEntryKey, interfaceChildEntryKey); + InterfaceChildEntryBuilder entryBuilder = new InterfaceChildEntryBuilder().setKey(interfaceChildEntryKey) + .setChildInterface(childInterface); + t.put(LogicalDatastoreType.CONFIGURATION, intfId, entryBuilder.build(),true); + return lportTag; } } diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java index a0b404f3..cb039796 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java @@ -16,6 +16,7 @@ import org.opendaylight.vpnservice.interfacemgr.IfmUtil; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceManagerCommonUtils; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; 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.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -33,7 +34,7 @@ public class OvsVlanMemberConfigRemoveHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsVlanMemberConfigRemoveHelper.class); public static List> removeConfiguration(DataBroker dataBroker, ParentRefs parentRefs, Interface interfaceOld, IfL2vlan ifL2vlan, - IdManager idManager) { + IdManagerService idManager) { List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java index 73edde02..70332265 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java @@ -18,6 +18,7 @@ import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntryKey; @@ -34,7 +35,7 @@ public class OvsVlanMemberConfigUpdateHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsVlanMemberConfigUpdateHelper.class); public static List> updateConfiguration(DataBroker dataBroker, ParentRefs parentRefsNew, Interface interfaceOld, IfL2vlan ifL2vlanNew, - Interface interfaceNew, IdManager idManager) { + Interface interfaceNew, IdManagerService idManager) { List> futures = new ArrayList<>(); ParentRefs parentRefsOld = interfaceOld.getAugmentation(ParentRefs.class); diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateAddHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateAddHelper.java index 95df1987..9891226d 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateAddHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateAddHelper.java @@ -11,6 +11,8 @@ import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.idmanager.IdManager; +import org.opendaylight.vpnservice.interfacemgr.IfmConstants; import org.opendaylight.vpnservice.interfacemgr.IfmUtil; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceManagerCommonUtils; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; @@ -20,6 +22,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -42,7 +45,7 @@ import java.util.List; public class OvsInterfaceStateAddHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsInterfaceStateAddHelper.class); - public static List> addState(DataBroker dataBroker, NodeConnectorId nodeConnectorId, + public static List> addState(DataBroker dataBroker, IdManagerService idManager, NodeConnectorId nodeConnectorId, String portName, FlowCapableNodeConnector fcNodeConnectorNew) { LOG.debug("Adding Interface State to Oper DS for port: {}", portName); List> futures = new ArrayList<>(); @@ -69,12 +72,15 @@ public class OvsInterfaceStateAddHelper { List lowerLayerIfList = new ArrayList<>(); lowerLayerIfList.add(nodeConnectorId.getValue()); + Integer ifIndex = IfmUtil.allocateId(idManager, IfmConstants.IFM_IDPOOL_NAME, portName); InstanceIdentifier ifStateId = IfmUtil.buildStateInterfaceId(portName); InterfaceBuilder ifaceBuilder = new InterfaceBuilder().setOperStatus(operStatus) - .setAdminStatus(adminStatus).setPhysAddress(physAddress).setLowerLayerIf(lowerLayerIfList) + .setAdminStatus(adminStatus).setPhysAddress(physAddress).setIfIndex(ifIndex).setLowerLayerIf(lowerLayerIfList) .setKey(IfmUtil.getStateInterfaceKeyFromName(portName)); t.put(LogicalDatastoreType.OPERATIONAL, ifStateId, ifaceBuilder.build(), true); + // allocate lport tag and set in if-index + InterfaceMetaUtils.createLportTagInterfaceMap(t, portName, ifIndex); if (iface == null) { futures.add(t.submit()); return futures; diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateRemoveHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateRemoveHelper.java index 26734cac..9d9c668e 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateRemoveHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/statehelpers/OvsInterfaceStateRemoveHelper.java @@ -17,6 +17,7 @@ import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -30,13 +31,19 @@ import java.util.List; public class OvsInterfaceStateRemoveHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsInterfaceStateRemoveHelper.class); - public static List> removeState(InstanceIdentifier key, + public static List> removeState(IdManagerService idManager, + InstanceIdentifier key, DataBroker dataBroker, String portName, FlowCapableNodeConnector fcNodeConnectorOld) { LOG.debug("Removing interface-state for port: {}", portName); List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); InstanceIdentifier ifStateId = IfmUtil.buildStateInterfaceId(portName); + /* Remove entry from if-index-interface-name map and deallocate Id from Idmanager. */ + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface interfaceState = + InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(portName, dataBroker); + InterfaceMetaUtils.removeLportTagInterfaceMap(t, idManager, dataBroker, interfaceState.getName(), interfaceState.getIfIndex()); + t.delete(LogicalDatastoreType.OPERATIONAL, ifStateId); // For Vlan-Trunk Interface, remove the trunk-member operstates as well... diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java index a2d26912..ef70eb84 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java @@ -31,7 +31,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.IfIndexesInterfaceMap; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.InterfaceChildInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._if.indexes._interface.map.IfIndexInterface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._if.indexes._interface.map.IfIndexInterfaceKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info._interface.parent.entry.InterfaceChildEntry; @@ -214,6 +217,26 @@ public class InterfaceManagerRpcService implements OdlInterfaceRpcService { return Futures.immediateFuture(rpcResultBuilder.build()); } + @Override + public Future> getInterfaceFromIfIndex(GetInterfaceFromIfIndexInput input) { + Integer ifIndex = input.getIfIndex(); + RpcResultBuilder rpcResultBuilder = null; + try { + InstanceIdentifier id = InstanceIdentifier.builder(IfIndexesInterfaceMap.class).child(IfIndexInterface.class, new IfIndexInterfaceKey(ifIndex)).build(); + Optional ifIndexesInterface = IfmUtil.read(LogicalDatastoreType.OPERATIONAL, id, dataBroker); + if(ifIndexesInterface.isPresent()) { + String interfaceName = ifIndexesInterface.get().getInterfaceName(); + GetInterfaceFromIfIndexOutputBuilder output = new GetInterfaceFromIfIndexOutputBuilder().setInterfaceName(interfaceName); + rpcResultBuilder = RpcResultBuilder.success(); + rpcResultBuilder.withResult(output.build()); + } + } catch (Exception e) { + LOG.error("Retrieval of interfaceName for the key {} failed due to {}", ifIndex, e); + rpcResultBuilder = RpcResultBuilder.failed(); + } + return Futures.immediateFuture(rpcResultBuilder.build()); + } + public List getEgressActionInfosForInterface(String interfaceName) { Interface interfaceInfo = InterfaceManagerCommonUtils.getInterfaceFromConfigDS(new InterfaceKey(interfaceName), dataBroker); diff --git a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java index 92c0b743..24fa511b 100644 --- a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java +++ b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java @@ -33,6 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.No import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeGre; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.BridgeEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.BridgeEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.bridge.entry.BridgeInterfaceEntry; @@ -82,7 +83,7 @@ public class TunnelInterfaceConfigurationTest { TerminationPoint terminationPoint; @Mock DataBroker dataBroker; - @Mock IdManager idManager; + @Mock IdManagerService idManager; @Mock ListenerRegistration dataChangeListenerRegistration; @Mock ReadOnlyTransaction mockReadTx; @Mock WriteTransaction mockWriteTx; diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java index f44e8419..4f384474 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java @@ -64,7 +64,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { private final DataBroker broker; private IMdsalApiManager mdsalManager; private IInterfaceManager interfaceManager; - private IdManager idManager; + private IdManagerService idManager; private static final short LPORT_INGRESS_TABLE = 0; private static final short LFIB_TABLE = 20; private static final short FIB_TABLE = 21; @@ -103,7 +103,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { this.mdsalManager = mdsalManager; } - public void setIdManager(IdManager idManager) { + public void setIdManager(IdManagerService idManager) { this.idManager = idManager; } diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopmgrProvider.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopmgrProvider.java index de61812f..5855c759 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopmgrProvider.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopmgrProvider.java @@ -14,6 +14,7 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.vpnservice.nexthopmgr.NexthopManager; import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager; import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.L3nexthopService; import org.opendaylight.idmanager.IdManager; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; @@ -28,7 +29,7 @@ public class NexthopmgrProvider implements BindingAwareProvider, AutoCloseable { private NexthopManager nhManager; private IMdsalApiManager mdsalManager; private IInterfaceManager interfaceManager; - private IdManager idManager; + private IdManagerService idManager; private RpcProviderRegistry rpcProviderRegistry; public RpcProviderRegistry getRpcProviderRegistry() { @@ -46,7 +47,7 @@ public class NexthopmgrProvider implements BindingAwareProvider, AutoCloseable { nhManager = new NexthopManager(dbx); vpnIfListener = new VpnInterfaceChangeListener(dbx, nhManager); odlIfListener = new OdlInterfaceChangeListener(dbx, nhManager, interfaceManager); - idManager = new IdManager(dbx); + idManager = rpcProviderRegistry.getRpcService(IdManagerService.class); final BindingAwareBroker.RpcRegistration rpcRegistration = getRpcProviderRegistry().addRpcImplementation(L3nexthopService.class, nhManager); nhManager.setMdsalManager(mdsalManager); nhManager.setInterfaceManager(interfaceManager); -- 2.36.6