Porting activity for ELAN 87/83387/8
authorAmitesh Soni <amitesh.soni@ericsson.com>
Thu, 2 Jan 2020 09:31:15 +0000 (15:01 +0530)
committerKarthikeyan Krishnan <karthikeyangceb007@gmail.com>
Mon, 17 Feb 2020 15:29:37 +0000 (15:29 +0000)
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 <amitesh.soni@ericsson.com>
Change-Id: Iea64d20802c0242ac891d95294323a87a5a4cdf2

elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayMulticastUtils.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanConstants.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java
elanmanager/impl/src/test/java/org/opendaylight/netvirt/elanmanager/tests/Verifications.java

index 5a561880ae6b4a5d422777bbe2334bfab7700e40..d43253e50814377eecd5f0ba339f38a3bf0843b0 100644 (file)
@@ -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<Action> 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;
                         }
index 5738112a1b488e2c9e01686b7b6fe44a08b86fc7..d05b8af618b9acfad2f1ac40f098cf0a3f1d45e0 100755 (executable)
@@ -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();
index f518d7ff361d06a0cfbf863905dccbb48563ecf1..6ca73236fa17d96e6c670b633b26606ac4e4268f 100755 (executable)
@@ -1249,8 +1249,9 @@ public class ElanUtils {
 
     public static List<MatchInfo> getTunnelMatchesForServiceId(Uint32 elanTag) {
         List<MatchInfo> 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;
     }
index f7f79cf70b075cd407eb1804b0a783c7d1d97f13..432a29d774ee2b22abf7e18b7d66855592a07bed 100644 (file)
@@ -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<Action> actionsList =
                         odlInterfaceRpcService.getEgressActionsForInterface(getEgressActInput).get().getResult()
                                 .getAction();