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())));
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;
}
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();
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;
}
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;
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();