X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=elanmanager%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Felan%2Futils%2FElanUtils.java;h=4f9312209c525da8489570e532b5604fcf18b085;hb=d89255aeb692679c01e6b1001c4499f4293c32b8;hp=a2aaacfb8de024fcd06861c19104b86e020c7b00;hpb=fea8c7a446c415d68a5a31882a7161f115e840ea;p=netvirt.git diff --git a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java index a2aaacfb8d..4f9312209c 100755 --- a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java +++ b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java @@ -7,6 +7,7 @@ */ package org.opendaylight.netvirt.elan.utils; +import static org.opendaylight.controller.md.sal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; import com.google.common.base.Optional; @@ -20,7 +21,6 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collection; @@ -38,15 +38,17 @@ import javax.inject.Singleton; import org.apache.commons.lang3.StringUtils; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.ReadTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.genius.infra.Datastore.Configuration; +import org.opendaylight.genius.infra.Datastore.Operational; import org.opendaylight.genius.infra.ManagedNewTransactionRunner; import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl; +import org.opendaylight.genius.infra.TypedReadTransaction; import org.opendaylight.genius.infra.TypedReadWriteTransaction; +import org.opendaylight.genius.infra.TypedWriteTransaction; import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo; import org.opendaylight.genius.interfacemanager.globals.InterfaceServiceUtil; import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager; @@ -334,9 +336,9 @@ public class ElanUtils { } @Nullable - public static Elan getElanByName(ReadTransaction tx, String elanInstanceName) throws ReadFailedException { - return tx.read(LogicalDatastoreType.OPERATIONAL, - getElanInstanceOperationalDataPath(elanInstanceName)).checkedGet().orNull(); + public static Elan getElanByName(TypedReadTransaction tx, String elanInstanceName) + throws ExecutionException, InterruptedException { + return tx.read(getElanInstanceOperationalDataPath(elanInstanceName)).get().orNull(); } public static InstanceIdentifier getElanInstanceOperationalDataPath(String elanInstanceName) { @@ -356,6 +358,11 @@ public class ElanUtils { return existingInterfaceMacEntry.orNull(); } + public MacEntry getInterfaceMacEntriesOperationalDataPathFromId(TypedReadTransaction tx, + InstanceIdentifier identifier) throws ExecutionException, InterruptedException { + return tx.read(identifier).get().orNull(); + } + public static InstanceIdentifier getInterfaceMacEntriesIdentifierOperationalDataPath(String interfaceName, PhysAddress physAddress) { return InstanceIdentifier.builder(ElanInterfaceForwardingEntries.class) @@ -370,10 +377,10 @@ public class ElanUtils { return read(broker, LogicalDatastoreType.OPERATIONAL, macId); } - public Optional getMacEntryForElanInstance(ReadTransaction tx, String elanName, PhysAddress physAddress) - throws ReadFailedException { + public Optional getMacEntryForElanInstance(TypedReadTransaction tx, String elanName, + PhysAddress physAddress) throws ExecutionException, InterruptedException { InstanceIdentifier macId = getMacEntryOperationalDataPath(elanName, physAddress); - return tx.read(LogicalDatastoreType.OPERATIONAL, macId).checkedGet(); + return tx.read(macId).get(); } public MacEntry getMacEntryFromElanMacId(InstanceIdentifier identifier) { @@ -382,6 +389,11 @@ public class ElanUtils { return existingInterfaceMacEntry.orNull(); } + public MacEntry getMacEntryFromElanMacId(TypedReadTransaction tx, + InstanceIdentifier identifier) throws ExecutionException, InterruptedException { + return tx.read(identifier).get().orNull(); + } + public static InstanceIdentifier getMacEntryOperationalDataPath(String elanName, PhysAddress physAddress) { return InstanceIdentifier.builder(ElanForwardingTables.class).child(MacTable.class, new MacTableKey(elanName)) @@ -622,7 +634,7 @@ public class ElanUtils { */ public void setupMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout, String macAddress, boolean configureRemoteFlows, - WriteTransaction writeFlowGroupTx) { + TypedWriteTransaction writeFlowGroupTx) { synchronized (getElanMacDPNKey(elanInfo.getElanTag(), macAddress, interfaceInfo.getDpId())) { setupKnownSmacFlow(elanInfo, interfaceInfo, macTimeout, macAddress, mdsalManager, writeFlowGroupTx); @@ -632,7 +644,7 @@ public class ElanUtils { } public void setupDMacFlowOnRemoteDpn(ElanInstance elanInfo, InterfaceInfo interfaceInfo, BigInteger dstDpId, - String macAddress, WriteTransaction writeFlowTx) { + String macAddress, TypedWriteTransaction writeFlowTx) { String elanInstanceName = elanInfo.getElanInstanceName(); setupRemoteDmacFlow(dstDpId, interfaceInfo.getDpId(), interfaceInfo.getInterfaceTag(), elanInfo.getElanTag(), macAddress, elanInstanceName, writeFlowTx, interfaceInfo.getInterfaceName(), elanInfo); @@ -646,9 +658,10 @@ public class ElanUtils { * learnt. */ private void setupKnownSmacFlow(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout, - String macAddress, IMdsalApiManager mdsalApiManager, WriteTransaction writeFlowGroupTx) { + String macAddress, IMdsalApiManager mdsalApiManager, + TypedWriteTransaction writeFlowGroupTx) { FlowEntity flowEntity = buildKnownSmacFlow(elanInfo, interfaceInfo, macTimeout, macAddress); - mdsalApiManager.addFlowToTx(flowEntity, writeFlowGroupTx); + mdsalApiManager.addFlow(writeFlowGroupTx, flowEntity); LOG.debug("Known Smac flow entry created for elan Name:{}, logical Interface port:{} and mac address:{}", elanInfo.getElanInstanceName(), elanInfo.getDescription(), macAddress); } @@ -711,7 +724,7 @@ public class ElanUtils { * the writeFLowGroup tx */ public void setupTermDmacFlows(InterfaceInfo interfaceInfo, IMdsalApiManager mdsalApiManager, - WriteTransaction writeFlowGroupTx) { + TypedWriteTransaction writeFlowGroupTx) { BigInteger dpId = interfaceInfo.getDpId(); int lportTag = interfaceInfo.getInterfaceTag(); Flow flow = MDSALUtil.buildFlowNew(NwConstants.INTERNAL_TUNNEL_TABLE, @@ -720,7 +733,7 @@ public class ElanUtils { ITMConstants.COOKIE_ITM.add(BigInteger.valueOf(lportTag)), getTunnelIdMatchForFilterEqualsLPortTag(lportTag), getInstructionsInPortForOutGroup(interfaceInfo.getInterfaceName())); - mdsalApiManager.addFlowToTx(dpId, flow, writeFlowGroupTx); + mdsalApiManager.addFlow(writeFlowGroupTx, dpId, flow); LOG.debug("Terminating service table flow entry created on dpn:{} for logical Interface port:{}", dpId, interfaceInfo.getPortName()); } @@ -809,7 +822,7 @@ public class ElanUtils { private void setupOrigDmacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, boolean configureRemoteFlows, IMdsalApiManager mdsalApiManager, - WriteTransaction writeFlowGroupTx) { + TypedWriteTransaction writeFlowGroupTx) { BigInteger dpId = interfaceInfo.getDpId(); String ifName = interfaceInfo.getInterfaceName(); long ifTag = interfaceInfo.getInterfaceTag(); @@ -867,15 +880,15 @@ public class ElanUtils { } private void setupLocalDmacFlow(long elanTag, BigInteger dpId, String ifName, String macAddress, - ElanInstance elanInfo, IMdsalApiManager mdsalApiManager, long ifTag, WriteTransaction writeFlowGroupTx) { + ElanInstance elanInfo, IMdsalApiManager mdsalApiManager, long ifTag, + TypedWriteTransaction writeFlowGroupTx) { Flow flowEntity = buildLocalDmacFlowEntry(elanTag, dpId, ifName, macAddress, elanInfo, ifTag); - mdsalApiManager.addFlowToTx(dpId, flowEntity, writeFlowGroupTx); - installEtreeLocalDmacFlow(elanTag, dpId, ifName, macAddress, elanInfo, - ifTag, writeFlowGroupTx); + mdsalApiManager.addFlow(writeFlowGroupTx, dpId, flowEntity); + installEtreeLocalDmacFlow(elanTag, dpId, ifName, macAddress, elanInfo, ifTag, writeFlowGroupTx); } private void installEtreeLocalDmacFlow(long elanTag, BigInteger dpId, String ifName, String macAddress, - ElanInstance elanInfo, long ifTag, WriteTransaction writeFlowGroupTx) { + ElanInstance elanInfo, long ifTag, TypedWriteTransaction writeFlowGroupTx) { EtreeInterface etreeInterface = elanInterfaceCache.getEtreeInterface(ifName).orNull(); if (etreeInterface != null && etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) { EtreeLeafTagName etreeTagName = elanEtreeUtils.getEtreeLeafTagByElanTag(elanTag); @@ -885,7 +898,7 @@ public class ElanUtils { } else { Flow flowEntity = buildLocalDmacFlowEntry(etreeTagName.getEtreeLeafTag().getValue(), dpId, ifName, macAddress, elanInfo, ifTag); - mdsalManager.addFlowToTx(dpId, flowEntity, writeFlowGroupTx); + mdsalManager.addFlow(writeFlowGroupTx, dpId, flowEntity); } } } @@ -949,9 +962,9 @@ public class ElanUtils { return flow; } - public void setupRemoteDmacFlow(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag, String - macAddress, String displayName, WriteTransaction writeFlowGroupTx, String interfaceName, ElanInstance - elanInstance) { + public void setupRemoteDmacFlow(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag, + String macAddress, String displayName, TypedWriteTransaction writeFlowGroupTx, + String interfaceName, ElanInstance elanInstance) { if (interfaceManager.isExternalInterface(interfaceName)) { LOG.debug("Ignoring install remote DMAC {} flow on provider interface {} elan {}", macAddress, interfaceName, elanInstance.getElanInstanceName()); @@ -964,14 +977,15 @@ public class ElanUtils { ? getVxlanSegmentationId(elanInstance) : 0; flowEntity = buildRemoteDmacFlowEntry(srcDpId, destDpId, lportTagOrVni, elanTag, macAddress, displayName, elanInstance); - mdsalManager.addFlowToTx(srcDpId, flowEntity, writeFlowGroupTx); + mdsalManager.addFlow(writeFlowGroupTx, srcDpId, flowEntity); setupEtreeRemoteDmacFlow(srcDpId, destDpId, lportTagOrVni, elanTag, macAddress, displayName, interfaceName, writeFlowGroupTx, elanInstance); } private void setupEtreeRemoteDmacFlow(BigInteger srcDpId, BigInteger destDpId, long lportTagOrVni, long elanTag, String macAddress, String displayName, String interfaceName, - WriteTransaction writeFlowGroupTx, ElanInstance elanInstance) { + TypedWriteTransaction writeFlowGroupTx, + ElanInstance elanInstance) { Flow flowEntity; EtreeInterface etreeInterface = elanInterfaceCache.getEtreeInterface(interfaceName).orNull(); if (etreeInterface != null && etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) { @@ -982,7 +996,7 @@ public class ElanUtils { } else { flowEntity = buildRemoteDmacFlowEntry(srcDpId, destDpId, lportTagOrVni, etreeTagName.getEtreeLeafTag().getValue(), macAddress, displayName, elanInstance); - mdsalManager.addFlowToTx(srcDpId, flowEntity, writeFlowGroupTx); + mdsalManager.addFlow(writeFlowGroupTx, srcDpId, flowEntity); } } } @@ -1049,7 +1063,8 @@ public class ElanUtils { } public void deleteMacFlows(@Nullable ElanInstance elanInfo, @Nullable InterfaceInfo interfaceInfo, - MacEntry macEntry, TypedReadWriteTransaction flowTx) { + MacEntry macEntry, TypedReadWriteTransaction flowTx) + throws ExecutionException, InterruptedException { if (elanInfo == null || interfaceInfo == null) { return; } @@ -1060,7 +1075,8 @@ public class ElanUtils { } public void deleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, - boolean deleteSmac, TypedReadWriteTransaction flowTx) { + boolean deleteSmac, TypedReadWriteTransaction flowTx) + throws ExecutionException, InterruptedException { String elanInstanceName = elanInfo.getElanInstanceName(); List remoteFEs = getInvolvedDpnsInElan(elanInstanceName); BigInteger srcdpId = interfaceInfo.getDpId(); @@ -1082,7 +1098,7 @@ public class ElanUtils { private void executeEtreeDeleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, boolean deleteSmac, String elanInstanceName, BigInteger srcdpId, Long elanTag, BigInteger dstDpId, - TypedReadWriteTransaction flowTx) { + TypedReadWriteTransaction flowTx) throws ExecutionException, InterruptedException { EtreeLeafTagName etreeLeafTag = elanEtreeUtils.getEtreeLeafTagByElanTag(elanTag); if (etreeLeafTag != null) { executeDeleteMacFlows(elanInfo, interfaceInfo, macAddress, deleteSmac, elanInstanceName, srcdpId, @@ -1090,55 +1106,40 @@ public class ElanUtils { } } - // TODO skitt Fix the exception handling here - @SuppressWarnings("checkstyle:IllegalCatch") - @SuppressFBWarnings("REC_CATCH_EXCEPTION") private boolean executeDeleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, boolean deleteSmac, String elanInstanceName, BigInteger srcdpId, Long elanTag, BigInteger dstDpId, - TypedReadWriteTransaction flowTx) { + TypedReadWriteTransaction flowTx) throws ExecutionException, InterruptedException { boolean isFlowsRemovedInSrcDpn = false; if (dstDpId.equals(srcdpId)) { isFlowsRemovedInSrcDpn = true; deleteSmacAndDmacFlows(elanInfo, interfaceInfo, macAddress, deleteSmac, flowTx); } else if (isDpnPresent(dstDpId)) { - try { - mdsalManager - .removeFlow(flowTx, dstDpId, - MDSALUtil.buildFlow(NwConstants.ELAN_DMAC_TABLE, getKnownDynamicmacFlowRef( - NwConstants.ELAN_DMAC_TABLE, dstDpId, srcdpId, macAddress, elanTag))); - } catch (Exception e) { - LOG.error("Error removing flow", e); - throw new RuntimeException("Error removing flow", e); - } + mdsalManager + .removeFlow(flowTx, dstDpId, + MDSALUtil.buildFlow(NwConstants.ELAN_DMAC_TABLE, getKnownDynamicmacFlowRef( + NwConstants.ELAN_DMAC_TABLE, dstDpId, srcdpId, macAddress, elanTag))); LOG.debug("Dmac flow entry deleted for elan:{}, logical interface port:{} and mac address:{} on dpn:{}", elanInstanceName, interfaceInfo.getPortName(), macAddress, dstDpId); } return isFlowsRemovedInSrcDpn; } - // TODO skitt Fix the exception handling here - @SuppressWarnings("checkstyle:IllegalCatch") - @SuppressFBWarnings("REC_CATCH_EXCEPTION") private void deleteSmacAndDmacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, - boolean deleteSmac, TypedReadWriteTransaction flowTx) { + boolean deleteSmac, TypedReadWriteTransaction flowTx) + throws ExecutionException, InterruptedException { String elanInstanceName = elanInfo.getElanInstanceName(); long ifTag = interfaceInfo.getInterfaceTag(); BigInteger srcdpId = interfaceInfo.getDpId(); Long elanTag = elanInfo.getElanTag(); - try { - if (deleteSmac) { - mdsalManager - .removeFlow(flowTx, srcdpId, - MDSALUtil.buildFlow(NwConstants.ELAN_SMAC_TABLE, getKnownDynamicmacFlowRef( - NwConstants.ELAN_SMAC_TABLE, srcdpId, ifTag, macAddress, elanTag))); - } - mdsalManager.removeFlow(flowTx, srcdpId, - MDSALUtil.buildFlow(NwConstants.ELAN_DMAC_TABLE, - getKnownDynamicmacFlowRef(NwConstants.ELAN_DMAC_TABLE, srcdpId, ifTag, macAddress, elanTag))); - } catch (Exception e) { - LOG.error("Error removing flow", e); - throw new RuntimeException("Error removing flow", e); + if (deleteSmac) { + mdsalManager + .removeFlow(flowTx, srcdpId, + MDSALUtil.buildFlow(NwConstants.ELAN_SMAC_TABLE, getKnownDynamicmacFlowRef( + NwConstants.ELAN_SMAC_TABLE, srcdpId, ifTag, macAddress, elanTag))); } + mdsalManager.removeFlow(flowTx, srcdpId, + MDSALUtil.buildFlow(NwConstants.ELAN_DMAC_TABLE, + getKnownDynamicmacFlowRef(NwConstants.ELAN_DMAC_TABLE, srcdpId, ifTag, macAddress, elanTag))); LOG.debug("All the required flows deleted for elan:{}, logical Interface port:{} and MAC address:{} on dpn:{}", elanInstanceName, interfaceInfo.getPortName(), macAddress, srcdpId); } @@ -1153,13 +1154,14 @@ public class ElanUtils { * the elan instance added * @param elanInterfaces * the elan interfaces - * @param tx + * @param operTx * transaction * * @return the updated ELAN instance. */ public static ElanInstance updateOperationalDataStore(IdManagerService idManager, - ElanInstance elanInstanceAdded, List elanInterfaces, WriteTransaction tx) { + ElanInstance elanInstanceAdded, List elanInterfaces, TypedWriteTransaction confTx, + TypedWriteTransaction operTx) { String elanInstanceName = elanInstanceAdded.getElanInstanceName(); Long elanTag = elanInstanceAdded.getElanTag(); if (elanTag == null || elanTag == 0L) { @@ -1169,13 +1171,11 @@ public class ElanUtils { .withKey(new ElanKey(elanInstanceName)).build(); // Add the ElanState in the elan-state operational data-store - tx.put(LogicalDatastoreType.OPERATIONAL, getElanInstanceOperationalDataPath(elanInstanceName), - elanInfo, WriteTransaction.CREATE_MISSING_PARENTS); + operTx.put(getElanInstanceOperationalDataPath(elanInstanceName), elanInfo, CREATE_MISSING_PARENTS); // Add the ElanMacTable in the elan-mac-table operational data-store MacTable elanMacTable = new MacTableBuilder().withKey(new MacTableKey(elanInstanceName)).build(); - tx.put(LogicalDatastoreType.OPERATIONAL, getElanMacTableOperationalDataPath(elanInstanceName), - elanMacTable, WriteTransaction.CREATE_MISSING_PARENTS); + operTx.put(getElanMacTableOperationalDataPath(elanInstanceName), elanMacTable, CREATE_MISSING_PARENTS); ElanTagNameBuilder elanTagNameBuilder = new ElanTagNameBuilder().setElanTag(elanTag) .withKey(new ElanTagNameKey(elanTag)).setName(elanInstanceName); @@ -1186,14 +1186,13 @@ public class ElanUtils { EtreeLeafTagName etreeLeafTagName = new EtreeLeafTagNameBuilder() .setEtreeLeafTag(new EtreeLeafTag(etreeLeafTag)).build(); elanTagNameBuilder.addAugmentation(EtreeLeafTagName.class, etreeLeafTagName); - addTheLeafTagAsElanTag(elanInstanceName, etreeLeafTag, tx); + addTheLeafTagAsElanTag(elanInstanceName, etreeLeafTag, operTx); } ElanTagName elanTagName = elanTagNameBuilder.build(); // Add the ElanTag to ElanName in the elan-tag-name Operational // data-store - tx.put(LogicalDatastoreType.OPERATIONAL, - getElanInfoEntriesOperationalDataPath(elanTag), elanTagName); + operTx.put(getElanInfoEntriesOperationalDataPath(elanTag), elanTagName); // Updates the ElanInstance Config DS by setting the just acquired // elanTag @@ -1208,16 +1207,16 @@ public class ElanUtils { elanInstanceBuilder.addAugmentation(EtreeInstance.class, etreeInstance); } ElanInstance elanInstanceWithTag = elanInstanceBuilder.build(); - tx.merge(LogicalDatastoreType.CONFIGURATION, ElanHelper.getElanInstanceConfigurationDataPath(elanInstanceName), - elanInstanceWithTag, WriteTransaction.CREATE_MISSING_PARENTS); + confTx.merge(ElanHelper.getElanInstanceConfigurationDataPath(elanInstanceName), elanInstanceWithTag, + CREATE_MISSING_PARENTS); return elanInstanceWithTag; } - private static void addTheLeafTagAsElanTag(String elanInstanceName, long etreeLeafTag, WriteTransaction tx) { + private static void addTheLeafTagAsElanTag(String elanInstanceName, long etreeLeafTag, + TypedWriteTransaction tx) { ElanTagName etreeTagAsElanTag = new ElanTagNameBuilder().setElanTag(etreeLeafTag) .withKey(new ElanTagNameKey(etreeLeafTag)).setName(elanInstanceName).build(); - tx.put(LogicalDatastoreType.OPERATIONAL, - getElanInfoEntriesOperationalDataPath(etreeLeafTag), etreeTagAsElanTag); + tx.put(getElanInfoEntriesOperationalDataPath(etreeLeafTag), etreeTagAsElanTag); } private static boolean isEtreeInstance(ElanInstance elanInstanceAdded) { @@ -1418,6 +1417,17 @@ public class ElanUtils { return futures; } + @CheckReturnValue + public static ListenableFuture waitForTransactionToComplete(ListenableFuture future) { + try { + future.get(); + } catch (InterruptedException | ExecutionException e) { + // NETVIRT-1215: Do not log.error() here, only debug(); but callers *MUST* @CheckReturnValue + LOG.debug("Error writing to datastore", e); + } + return future; + } + public static boolean isVxlan(@Nullable ElanInstance elanInstance) { return elanInstance != null && elanInstance.getSegmentType() != null && elanInstance.getSegmentType().isAssignableFrom(SegmentTypeVxlan.class) @@ -1660,9 +1670,7 @@ public class ElanUtils { IfTunnel ifTunnel = configIface.augmentation(IfTunnel.class); if (ifTunnel != null && ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeVxlan.class)) { ParentRefs refs = configIface.augmentation(ParentRefs.class); - if (refs != null && !Strings.isNullOrEmpty(refs.getParentInterface())) { - return true; //multiple VxLAN tunnels enabled, i.e. only logical tunnel should be treated - } + return refs != null && !Strings.isNullOrEmpty(refs.getParentInterface()); } return false; }