From 3261337a8dfa6352bd43de49972f70d2007ee546 Mon Sep 17 00:00:00 2001 From: Amitesh Soni Date: Thu, 2 Jan 2020 15:01:15 +0530 Subject: [PATCH] Porting activity for ELAN Description: Adding 270000 to elan tag for group actions and table 36 to avoid collision between lport and elan tag Signed-off-by: Amitesh Soni Change-Id: Iea64d20802c0242ac891d95294323a87a5a4cdf2 --- .../elan/l2gw/utils/ElanL2GatewayMulticastUtils.java | 6 +++++- .../org/opendaylight/netvirt/elan/utils/ElanConstants.java | 1 + .../java/org/opendaylight/netvirt/elan/utils/ElanUtils.java | 5 +++-- .../netvirt/elanmanager/tests/Verifications.java | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayMulticastUtils.java b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayMulticastUtils.java index 5a561880ae..d43253e508 100644 --- a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayMulticastUtils.java +++ b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayMulticastUtils.java @@ -366,9 +366,11 @@ public class ElanL2GatewayMulticastUtils { ElanDpnInterfacesList elanDpns = elanUtils.getElanDpnInterfacesList(elanInfo.getElanInstanceName()); if (isVxlanNetworkOrVxlanSegment(elanInfo)) { + // Adding 270000 to avoid collision between LPort and elan for broadcast group actions listBucketInfo.addAll(getRemoteBCGroupTunnelBuckets(elanDpns, dpnId, bucketId, elanUtils.isOpenstackVniSemanticsEnforced() - ? ElanUtils.getVxlanSegmentationId(elanInfo).longValue() : elanTag)); + ? ElanUtils.getVxlanSegmentationId(elanInfo).longValue() : elanTag + + ElanConstants.ELAN_TAG_ADDEND)); } listBucketInfo.addAll(getRemoteBCGroupExternalPortBuckets(elanDpns, dpnInterfaces, dpnId, getNextAvailableBucketId(listBucketInfo.size()))); @@ -447,6 +449,8 @@ public class ElanL2GatewayMulticastUtils { try { List listActionInfo = elanItmUtils.getInternalTunnelItmEgressAction(dpnId, dpnInterface.getDpId(), elanTagOrVni); + LOG.trace("configuring broadcast group for elan {} for source DPN {} and destination DPN {} " + + "with actions {}", elanTagOrVni, dpnId, dpnInterface.getDpId(), listActionInfo); if (listActionInfo.isEmpty()) { continue; } diff --git a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanConstants.java b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanConstants.java index 5738112a1b..d05b8af618 100755 --- a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanConstants.java +++ b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanConstants.java @@ -27,6 +27,7 @@ public interface ElanConstants { int STATIC_MAC_TIMEOUT = 0; int ELAN_TAG_LENGTH = 16; int INTERFACE_TAG_LENGTH = 20; + int ELAN_TAG_ADDEND = 270000; Uint64 INVALID_DPN = Uint64.valueOf(0L); Uint64 COOKIE_ELAN_BASE_SMAC = Uint64.valueOf("8500000", 16).intern(); Uint64 COOKIE_ELAN_LEARNED_SMAC = Uint64.valueOf("8600000", 16).intern(); 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 f518d7ff36..6ca73236fa 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 @@ -1249,8 +1249,9 @@ public class ElanUtils { public static List getTunnelMatchesForServiceId(Uint32 elanTag) { List mkMatches = new ArrayList<>(); - // Matching metadata - mkMatches.add(new MatchTunnelId(Uint64.valueOf(elanTag.longValue()))); + + // Adding 270000 to avoid collision between LPort and elan tag for broadcast + mkMatches.add(new MatchTunnelId(Uint64.valueOf(elanTag.longValue() + ElanConstants.ELAN_TAG_ADDEND))); return mkMatches; } diff --git a/elanmanager/impl/src/test/java/org/opendaylight/netvirt/elanmanager/tests/Verifications.java b/elanmanager/impl/src/test/java/org/opendaylight/netvirt/elanmanager/tests/Verifications.java index f7f79cf70b..432a29d774 100644 --- a/elanmanager/impl/src/test/java/org/opendaylight/netvirt/elanmanager/tests/Verifications.java +++ b/elanmanager/impl/src/test/java/org/opendaylight/netvirt/elanmanager/tests/Verifications.java @@ -29,6 +29,7 @@ import org.opendaylight.genius.mdsalutil.NwConstants; import org.opendaylight.genius.mdsalutil.actions.ActionGroup; import org.opendaylight.genius.testutils.interfacemanager.TunnelInterfaceDetails; import org.opendaylight.mdsal.binding.testutils.AssertDataObjects; +import org.opendaylight.netvirt.elan.utils.ElanConstants; import org.opendaylight.netvirt.elan.utils.ElanUtils; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; @@ -198,7 +199,7 @@ public class Verifications { for (Uint64 otherDpn : otherDpns) { GetEgressActionsForInterfaceInput getEgressActInput = new GetEgressActionsForInterfaceInputBuilder() .setIntfName(extnIntfs.get(dpnId + ":" + otherDpn).getInterfaceInfo().getInterfaceName()) - .setTunnelKey(elanInfo.getElanTag()).build(); + .setTunnelKey(elanInfo.getElanTag().longValue() + ElanConstants.ELAN_TAG_ADDEND).build(); List actionsList = odlInterfaceRpcService.getEgressActionsForInterface(getEgressActInput).get().getResult() .getAction(); -- 2.36.6