ifm changes for performance enhancements 92/68392/6
authorEdw7n <n.edwin.anthony@ericsson.com>
Sat, 17 Feb 2018 20:27:39 +0000 (01:57 +0530)
committerFaseela K <faseela.k@ericsson.com>
Wed, 21 Feb 2018 05:38:01 +0000 (05:38 +0000)
Change-Id: Icdceb46e6453b6b1e503d14d89bd1b201f9a183b
Signed-off-by: Edw7n <n.edwin.anthony@ericsson.com>
interfacemanager/interfacemanager-api/src/main/java/org/opendaylight/genius/interfacemanager/interfaces/IInterfaceManager.java
interfacemanager/interfacemanager-api/src/main/yang/ifm-config.yang
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/InterfacemgrProvider.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceManagerCommonUtils.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceInventoryStateListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceTopologyStateListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/TerminationPointStateListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceTopologyStateUpdateHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/SouthboundUtils.java
interfacemanager/interfacemanager-impl/src/main/resources/initial/genius-ifm-config.xml
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java

index bc0e86a424af52fb177df3a10daf92567f5101ab..562e6df7455162f282e69245f5c793cc31c8c1e8 100644 (file)
@@ -127,4 +127,6 @@ public interface IInterfaceManager {
     void updateInterfaceParentRef(String interfaceName, String parentInterface, boolean readInterfaceBeforeWrite);
 
     long getLogicalTunnelSelectGroupId(int lportTag);
+
+    boolean isItmDirectTunnelsEnabled();
 }
index 18609c0d3ee71157c17b9929e0b5741d08b93a28..a1327244a0ce0ec342fbe1800469fe84ffd58d8a 100644 (file)
@@ -24,5 +24,10 @@ module ifm-config {
            default 15;
            description "IFM statistics polling interval (in minutes)";
        }
+       leaf itm-direct-tunnels {
+          description "Enable the ITM to handle tunnels directly by-passing interface manager.";
+          type boolean;
+          default false;
+       }
     }
 }
index f8fab598e95c0793218dde6abb2696dca0bcb21e..329fe3b55547ca17bfe3c77b867f1f75548d931c 100644 (file)
@@ -59,6 +59,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.config.rev160406.IfmConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternal;
@@ -104,6 +105,7 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
     private final JobCoordinator coordinator;
     private final InterfaceManagerCommonUtils interfaceManagerCommonUtils;
     private final InterfaceMetaUtils interfaceMetaUtils;
+    private final IfmConfig ifmConfig;
     private Map<String, OvsdbTerminationPointAugmentation> ifaceToTpMap;
     private Map<String, InstanceIdentifier<Node>> ifaceToNodeIidMap;
     private Map<InstanceIdentifier<Node>, OvsdbBridgeAugmentation> nodeIidToBridgeMap;
@@ -114,7 +116,7 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
     public InterfacemgrProvider(final DataBroker dataBroker, final EntityOwnershipService entityOwnershipService,
             final IdManagerService idManager, final InterfaceManagerRpcService interfaceManagerRpcService,
             final JobCoordinator coordinator, final InterfaceManagerCommonUtils interfaceManagerCommonUtils,
-            final InterfaceMetaUtils interfaceMetaUtils) {
+            final InterfaceMetaUtils interfaceMetaUtils, final IfmConfig ifmConfig) {
         this.dataBroker = dataBroker;
         this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
         this.entityOwnershipService = entityOwnershipService;
@@ -123,6 +125,7 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
         this.coordinator = coordinator;
         this.interfaceManagerCommonUtils = interfaceManagerCommonUtils;
         this.interfaceMetaUtils = interfaceMetaUtils;
+        this.ifmConfig = ifmConfig;
     }
 
     @PostConstruct
@@ -864,4 +867,9 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
     public long getLogicalTunnelSelectGroupId(int lportTag) {
         return IfmUtil.getLogicalTunnelSelectGroupId(lportTag);
     }
+
+    @Override
+    public boolean isItmDirectTunnelsEnabled() {
+        return ifmConfig.isItmDirectTunnels();
+    }
 }
index fdb35efee1800f72cb95cddb993b1045498138eb..c95fc4f475f8fdd0617379ce4dc19fb99cb84656 100644 (file)
@@ -753,4 +753,12 @@ public final class InterfaceManagerCommonUtils {
     private static String getDpnPrefixedPortName(String dpnId, String portName) {
         return dpnId + IfmConstants.OF_URI_SEPARATOR + portName;
     }
+
+    public boolean isTunnelInternal(String interfaceName) {
+        IfTunnel ifTunnel = getInterfaceFromConfigDS(interfaceName).getAugmentation(IfTunnel.class);
+        if (ifTunnel != null) {
+            return ifTunnel.isInternal();
+        }
+        return false;
+    }
 }
index d4484016475249bbc0a3689875a470034bde7ff2..472ff9c3eba8946b16e8a18a5b91bb3d8a01a8b4 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataTreeChangeListenerBase;
 import org.opendaylight.genius.interfacemanager.IfmConstants;
 import org.opendaylight.genius.interfacemanager.IfmUtil;
+import org.opendaylight.genius.interfacemanager.InterfacemgrProvider;
 import org.opendaylight.genius.interfacemanager.commons.AlivenessMonitorUtils;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceMetaUtils;
@@ -74,6 +75,7 @@ public class InterfaceInventoryStateListener
     private final OvsInterfaceStateAddHelper ovsInterfaceStateAddHelper;
     private final InterfaceMetaUtils interfaceMetaUtils;
     private final PortNameCache portNameCache;
+    private final InterfacemgrProvider interfacemgrProvider;
 
     @Inject
     public InterfaceInventoryStateListener(final DataBroker dataBroker, final IdManagerService idManagerService,
@@ -85,7 +87,8 @@ public class InterfaceInventoryStateListener
             final AlivenessMonitorUtils alivenessMonitorUtils,
             final InterfaceMetaUtils interfaceMetaUtils,
             final PortNameCache portNameCache,
-            final InterfaceServiceRecoveryHandler interfaceServiceRecoveryHandler) {
+            final InterfaceServiceRecoveryHandler interfaceServiceRecoveryHandler,
+            final InterfacemgrProvider interfacemgrProvider) {
         super(FlowCapableNodeConnector.class, InterfaceInventoryStateListener.class);
         this.dataBroker = dataBroker;
         this.idManager = idManagerService;
@@ -97,6 +100,7 @@ public class InterfaceInventoryStateListener
         this.ovsInterfaceStateAddHelper = ovsInterfaceStateAddHelper;
         this.interfaceMetaUtils = interfaceMetaUtils;
         this.portNameCache = portNameCache;
+        this.interfacemgrProvider = interfacemgrProvider;
         registerListener();
         interfaceServiceRecoveryHandler.addRecoverableListener(this);
     }
@@ -125,6 +129,13 @@ public class InterfaceInventoryStateListener
     @Override
     protected void remove(InstanceIdentifier<FlowCapableNodeConnector> key,
                           FlowCapableNodeConnector flowCapableNodeConnectorOld) {
+        if (interfacemgrProvider.isItmDirectTunnelsEnabled()
+                && interfaceManagerCommonUtils.isTunnelInternal(flowCapableNodeConnectorOld.getName())) {
+            LOG.debug("ITM Direct Tunnels is enabled, ignoring node connector removed for internal tunnel {}",
+                    flowCapableNodeConnectorOld.getName());
+            return;
+        }
+
         if (!entityOwnershipUtils.isEntityOwner(IfmConstants.INTERFACE_CONFIG_ENTITY,
                 IfmConstants.INTERFACE_CONFIG_ENTITY)) {
             return;
@@ -153,6 +164,13 @@ public class InterfaceInventoryStateListener
     @Override
     protected void update(InstanceIdentifier<FlowCapableNodeConnector> key, FlowCapableNodeConnector fcNodeConnectorOld,
                           FlowCapableNodeConnector fcNodeConnectorNew) {
+        if (interfacemgrProvider.isItmDirectTunnelsEnabled()
+                && interfaceManagerCommonUtils.isTunnelInternal(fcNodeConnectorNew.getName())) {
+            LOG.debug("ITM Direct Tunnels is enabled, ignoring node connector Update for internal tunnel {}",
+                    fcNodeConnectorNew.getName());
+            return;
+        }
+
         if (!entityOwnershipUtils.isEntityOwner(IfmConstants.INTERFACE_CONFIG_ENTITY,
                 IfmConstants.INTERFACE_CONFIG_ENTITY)) {
             return;
@@ -170,6 +188,13 @@ public class InterfaceInventoryStateListener
 
     @Override
     protected void add(InstanceIdentifier<FlowCapableNodeConnector> key, FlowCapableNodeConnector fcNodeConnectorNew) {
+        if (interfacemgrProvider.isItmDirectTunnelsEnabled()
+                && interfaceManagerCommonUtils.isTunnelInternal(fcNodeConnectorNew.getName())) {
+            LOG.debug("ITM Direct Tunnels is enabled, ignoring node connector add for internal tunnel {}",
+                    fcNodeConnectorNew.getName());
+            return;
+        }
+
         if (!entityOwnershipUtils.isEntityOwner(IfmConstants.INTERFACE_CONFIG_ENTITY,
                 IfmConstants.INTERFACE_CONFIG_ENTITY)) {
             return;
index 953338bf9451945279848e049899fa5cf6c01e8b..cfbb12cacceab4e6c3280c262f205b7d4d4e9792 100644 (file)
@@ -195,8 +195,8 @@ public class InterfaceTopologyStateListener
                 return futures;
             }
             futures.add(writeTransaction.submit());
-            southboundUtils.addAllPortsToBridge(bridgeEntry, interfaceManagerCommonUtils, instanceIdentifier,
-                    bridgeNew);
+            southboundUtils
+                    .addAllPortsToBridge(bridgeEntry, interfaceManagerCommonUtils, instanceIdentifier, bridgeNew);
             return futures;
         }
     }
index 152a1b492459ec48c039ae34886db7995e60abdf..4cc66f2ab58dbc3e99d91b4872d7f146606e7ffd 100644 (file)
@@ -92,6 +92,12 @@ public class TerminationPointStateListener extends
     @Override
     protected void remove(InstanceIdentifier<OvsdbTerminationPointAugmentation> identifier,
                           OvsdbTerminationPointAugmentation tpOld) {
+        if (interfaceMgrProvider.isItmDirectTunnelsEnabled()
+                && interfaceManagerCommonUtils.isTunnelInternal(tpOld.getName())) {
+            LOG.debug("ITM Direct Tunnels is enabled, hence ignoring termination point add for internal tunnel {}",
+                    tpOld.getName());
+            return;
+        }
         LOG.debug("Received remove DataChange Notification for ovsdb termination point {}", tpOld.getName());
 
         String oldInterfaceName = SouthboundUtils.getExternalInterfaceIdValue(tpOld);
@@ -113,13 +119,26 @@ public class TerminationPointStateListener extends
     protected void update(InstanceIdentifier<OvsdbTerminationPointAugmentation> identifier,
                           OvsdbTerminationPointAugmentation tpOld,
                           OvsdbTerminationPointAugmentation tpNew) {
+        if (interfaceMgrProvider.isItmDirectTunnelsEnabled()
+                && interfaceManagerCommonUtils.isTunnelInternal(tpNew.getName())) {
+            LOG.debug("ITM Direct Tunnels is enabled, hence ignoring termination point update - "
+                    + "old {}, new {} internal tunnel", tpOld.getName(), tpNew.getName());
+            return;
+        }
+
         LOG.debug("Received Update DataChange Notification for ovsdb termination point {}", tpNew.getName());
-        if (tpNew.getInterfaceBfdStatus() != null
-                && (tpOld == null || !tpNew.getInterfaceBfdStatus().equals(tpOld.getInterfaceBfdStatus()))) {
-            LOG.info("Bfd Status changed for ovsdb termination point identifier: {},  old: {}, new: {}.", identifier,
-                    tpOld, tpNew);
-            RendererStateUpdateWorker rendererStateAddWorker = new RendererStateUpdateWorker(tpNew);
-            coordinator.enqueueJob(tpNew.getName(), rendererStateAddWorker, IfmConstants.JOB_MAX_RETRIES);
+        if (tpOld != null) {
+            if ((org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.SouthboundUtils
+                    .bfdMonitoringEnabled(tpNew.getInterfaceBfd())
+                    != org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.SouthboundUtils
+                    .bfdMonitoringEnabled(tpOld.getInterfaceBfd()))
+                    || (tpNew.getInterfaceBfdStatus() != null
+                    && !tpNew.getInterfaceBfdStatus().equals(tpOld.getInterfaceBfdStatus()))) {
+                LOG.info("Bfd Status changed for ovsdb termination point identifier: {},  old: {}, new: {}.",
+                        identifier, tpOld, tpNew);
+                RendererStateUpdateWorker rendererStateAddWorker = new RendererStateUpdateWorker(tpNew);
+                coordinator.enqueueJob(tpNew.getName(), rendererStateAddWorker, IfmConstants.JOB_MAX_RETRIES);
+            }
         }
         InstanceIdentifier<Node> nodeIid = identifier.firstIdentifierOf(Node.class);
         String newInterfaceName = SouthboundUtils.getExternalInterfaceIdValue(tpNew);
@@ -155,6 +174,12 @@ public class TerminationPointStateListener extends
     @Override
     protected void add(InstanceIdentifier<OvsdbTerminationPointAugmentation> identifier,
                        OvsdbTerminationPointAugmentation tpNew) {
+        if (interfaceMgrProvider.isItmDirectTunnelsEnabled()
+                && interfaceManagerCommonUtils.isTunnelInternal(tpNew.getName())) {
+            LOG.debug("ITM Direct Tunnels is enabled, hence ignoring termination point add for internal tunnel {}",
+                    tpNew.getName());
+            return;
+        }
         update(identifier, null, tpNew);
     }
 
index 7bd00a090475213ee4ddb772e2e01e4bdef2a4ec..7e43c39c4f6141fc216a5ceff4d21996a4ed745f 100644 (file)
@@ -18,6 +18,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.genius.interfacemanager.IfmConstants;
 import org.opendaylight.genius.interfacemanager.IfmUtil;
+import org.opendaylight.genius.interfacemanager.InterfacemgrProvider;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceMetaUtils;
 import org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.SouthboundUtils;
@@ -42,26 +43,29 @@ public class OvsInterfaceTopologyStateUpdateHelper {
     private final InterfaceManagerCommonUtils interfaceManagerCommonUtils;
     private final InterfaceMetaUtils interfaceMetaUtils;
     private final SouthboundUtils southboundUtils;
+    private final InterfacemgrProvider interfacemgrProvider;
 
     @Inject
     public OvsInterfaceTopologyStateUpdateHelper(DataBroker dataBroker, EntityOwnershipUtils entityOwnershipUtils,
             JobCoordinator coordinator, InterfaceManagerCommonUtils interfaceManagerCommonUtils,
-            InterfaceMetaUtils interfaceMetaUtils, SouthboundUtils southboundUtils) {
+            InterfaceMetaUtils interfaceMetaUtils, SouthboundUtils southboundUtils,
+            InterfacemgrProvider interfacemgrProvider) {
         this.dataBroker = dataBroker;
         this.entityOwnershipUtils = entityOwnershipUtils;
         this.coordinator = coordinator;
         this.interfaceManagerCommonUtils = interfaceManagerCommonUtils;
         this.interfaceMetaUtils = interfaceMetaUtils;
         this.southboundUtils = southboundUtils;
+        this.interfacemgrProvider = interfacemgrProvider;
     }
 
     /*
      * This code is used to handle only a dpnId change scenario for a particular
      * change, which is not expected to happen in usual cases.
      */
-    public List<ListenableFuture<Void>> updateBridgeRefEntry(
-            InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid, OvsdbBridgeAugmentation bridgeNew,
-            OvsdbBridgeAugmentation bridgeOld) {
+    public List<ListenableFuture<Void>> updateBridgeRefEntry(InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid,
+                                                             OvsdbBridgeAugmentation bridgeNew,
+                                                             OvsdbBridgeAugmentation bridgeOld) {
         List<ListenableFuture<Void>> futures = new ArrayList<>();
         WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
 
@@ -90,7 +94,7 @@ public class OvsInterfaceTopologyStateUpdateHelper {
     }
 
     public List<ListenableFuture<Void>> updateTunnelState(OvsdbTerminationPointAugmentation terminationPointNew) {
-        final Interface.OperStatus interfaceBfdStatus = getTunnelOpState(terminationPointNew.getInterfaceBfdStatus());
+        final Interface.OperStatus interfaceBfdStatus = getTunnelOpState(terminationPointNew);
         final String interfaceName = terminationPointNew.getName();
         interfaceManagerCommonUtils.addBfdStateToCache(interfaceName, interfaceBfdStatus);
         if (!entityOwnershipUtils.isEntityOwner(IfmConstants.INTERFACE_CONFIG_ENTITY,
@@ -115,8 +119,12 @@ public class OvsInterfaceTopologyStateUpdateHelper {
         return Collections.emptyList();
     }
 
-    private static Interface.OperStatus getTunnelOpState(List<InterfaceBfdStatus> tunnelBfdStatus) {
+    private static Interface.OperStatus getTunnelOpState(OvsdbTerminationPointAugmentation terminationPoint) {
+        if (!SouthboundUtils.bfdMonitoringEnabled(terminationPoint.getInterfaceBfd())) {
+            return Interface.OperStatus.Up;
+        }
         Interface.OperStatus livenessState = Interface.OperStatus.Down;
+        List<InterfaceBfdStatus> tunnelBfdStatus = terminationPoint.getInterfaceBfdStatus();
         if (tunnelBfdStatus != null && !tunnelBfdStatus.isEmpty()) {
             for (InterfaceBfdStatus bfdState : tunnelBfdStatus) {
                 if (bfdState.getBfdStatusKey().equalsIgnoreCase(SouthboundUtils.BFD_OP_STATE)) {
index a759553a01b288c57d605a15cd55886e59a113ce..91c46525279891f0996236ca312a7ac142701af1 100644 (file)
@@ -20,6 +20,7 @@ import javax.inject.Singleton;
 import org.apache.commons.lang3.BooleanUtils;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.genius.interfacemanager.InterfacemgrProvider;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
 import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
@@ -72,6 +73,8 @@ public class SouthboundUtils {
     private static final String BFD_PARAM_FORWARDING_IF_RX = "forwarding_if_rx";
 
     // BFD parameters
+    public static final String BFD_ENABLE_KEY = "enable";
+    public static final String BFD_ENABLE_VALUE = "true";
     public static final String BFD_OP_STATE = "state";
     public static final String BFD_STATE_UP = "up";
     private static final String BFD_MIN_TX_VAL = "100";
@@ -116,10 +119,12 @@ public class SouthboundUtils {
         };
 
     private final BatchingUtils batchingUtils;
+    private final InterfacemgrProvider interfacemgrProvider;
 
     @Inject
-    public SouthboundUtils(BatchingUtils batchingUtils) {
+    public SouthboundUtils(BatchingUtils batchingUtils, InterfacemgrProvider interfacemgrProvider) {
         this.batchingUtils = batchingUtils;
+        this.interfacemgrProvider = interfacemgrProvider;
     }
 
     public void addPortToBridge(InstanceIdentifier<?> bridgeIid, Interface iface, String portName) {
@@ -133,8 +138,8 @@ public class SouthboundUtils {
      * Add all tunnels ports corresponding to the bridge to the topology config DS.
      */
     public void addAllPortsToBridge(BridgeEntry bridgeEntry, InterfaceManagerCommonUtils interfaceManagerCommonUtils,
-            InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid,
-            OvsdbBridgeAugmentation bridgeNew) {
+                                    InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid,
+                                    OvsdbBridgeAugmentation bridgeNew) {
         String bridgeName = bridgeNew.getBridgeName().getValue();
         LOG.debug("adding all ports to bridge: {}", bridgeName);
         List<BridgeInterfaceEntry> bridgeInterfaceEntries = bridgeEntry.getBridgeInterfaceEntry();
@@ -146,8 +151,9 @@ public class SouthboundUtils {
                 if (iface != null) {
                     IfTunnel ifTunnel = iface.getAugmentation(IfTunnel.class);
                     if (ifTunnel != null) {
-                        addTunnelPortToBridge(ifTunnel, bridgeIid, iface, portName);
-
+                        if (!(interfacemgrProvider.isItmDirectTunnelsEnabled() && ifTunnel.isInternal())) {
+                            addTunnelPortToBridge(ifTunnel, bridgeIid, iface, portName);
+                        }
                         if (isOfTunnel(ifTunnel)) {
                             LOG.debug("Using OFTunnel. Only one tunnel port will be added");
                             return;
@@ -324,6 +330,18 @@ public class SouthboundUtils {
                 && TunnelMonitoringTypeBfd.class.isAssignableFrom(ifTunnel.getMonitorProtocol());
     }
 
+    public static boolean bfdMonitoringEnabled(List<InterfaceBfd> interfaceBfds) {
+        if (interfaceBfds == null) {
+            return false;
+        }
+        for (InterfaceBfd interfaceBfd : interfaceBfds) {
+            if (interfaceBfd.getBfdKey().equalsIgnoreCase(SouthboundUtils.BFD_ENABLE_KEY)) {
+                return SouthboundUtils.BFD_ENABLE_VALUE.equalsIgnoreCase(interfaceBfd.getBfdValue());//checkBfdEnabled
+            }
+        }
+        return false;
+    }
+
     public static boolean isMonitorProtocolBfd(IfTunnel ifTunnel) {
         return TunnelMonitoringTypeBfd.class.isAssignableFrom(ifTunnel.getMonitorProtocol());
     }
index 5ff240feda394660dd1709f9f90c7c51be661fda..93ec4fedfe9f1e3d5c9d39d31008161d79a2974a 100644 (file)
@@ -1,4 +1,5 @@
 <interfacemanager-config xmlns="urn:opendaylight:genius:interfacemanager:config">
     <ifm-stats-poll-enabled>false</ifm-stats-poll-enabled>
     <ifm-stats-def-poll-interval>15</ifm-stats-def-poll-interval>
+    <itm-direct-tunnels>false</itm-direct-tunnels>
 </interfacemanager-config>
index 8344cfc893eb65b12ba27de1b31c25740ee56a5d..51d248bac46e36074e30fad9a93bdcc783498393 100644 (file)
@@ -34,6 +34,8 @@ import org.opendaylight.infrautils.diagstatus.DiagStatusService;
 import org.opendaylight.infrautils.inject.guice.testutils.AbstractGuiceJsr250Module;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.config.rev160406.IfmConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.config.rev160406.IfmConfigBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfigBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
@@ -59,6 +61,8 @@ public class ItmTestModule extends AbstractGuiceJsr250Module {
                 .setGpeExtensionEnabled(false)
                 .build();
         bind(ItmConfig.class).toInstance(itmConfigObj);
+        IfmConfig interfaceConfig = new IfmConfigBuilder().setItmDirectTunnels(false).build();
+        bind(IfmConfig.class).toInstance(interfaceConfig);
         bind(TunnelMonitorIntervalListener.class);
         bind(TransportZoneListener.class);
         bind(OvsdbNodeListener.class);