Bug 8398 - communication between two tenant network failed while
[netvirt.git] / vpnservice / aclservice / impl / src / main / java / org / opendaylight / netvirt / aclservice / utils / AclServiceUtils.java
index ece861ce8672c03aaa469eb2efc4a8363e9009ad..cdd617333806836c277c6295d7444e537309d695 100644 (file)
@@ -977,11 +977,17 @@ public final class AclServiceUtils {
                 AclConstants.PacketHandlingType.DENY));
     }
 
-    public static List<? extends MatchInfoBase> buildIpAndElanSrcMatch(long elanTag, AllowedAddressPairs ip,
-            DataBroker dataBroker) {
+    public static List<? extends MatchInfoBase> buildIpAndSrcServiceMatch(long elanTag, AllowedAddressPairs ip,
+            DataBroker dataBroker, Long vpnId) {
         List<MatchInfoBase> flowMatches = new ArrayList<>();
-        MatchMetadata metadatMatch =
-                new MatchMetadata(MetaDataUtil.getElanTagMetadata(elanTag), MetaDataUtil.METADATA_MASK_SERVICE);
+        MatchMetadata metadatMatch = null;
+        if (vpnId == null) {
+            metadatMatch =
+                    new MatchMetadata(MetaDataUtil.getElanTagMetadata(elanTag), MetaDataUtil.METADATA_MASK_SERVICE);
+        } else {
+            metadatMatch =
+                    new MatchMetadata(MetaDataUtil.getVpnIdMetadata(vpnId), MetaDataUtil.METADATA_MASK_VRFID);
+        }
         flowMatches.add(metadatMatch);
         if (ip.getIpAddress().getIpAddress() != null) {
             if (ip.getIpAddress().getIpAddress().getIpv4Address() != null) {
@@ -1013,11 +1019,17 @@ public final class AclServiceUtils {
         return flowMatches;
     }
 
-    public static List<? extends MatchInfoBase> buildIpAndElanDstMatch(Long elanTag, AllowedAddressPairs ip,
-            DataBroker dataBroker) {
+    public static List<? extends MatchInfoBase> buildIpAndDstServiceMatch(Long elanTag, AllowedAddressPairs ip,
+            DataBroker dataBroker, Long vpnId) {
         List<MatchInfoBase> flowMatches = new ArrayList<>();
-        MatchMetadata metadatMatch =
-                new MatchMetadata(MetaDataUtil.getElanTagMetadata(elanTag), MetaDataUtil.METADATA_MASK_SERVICE);
+        MatchMetadata metadatMatch = null;
+        if (vpnId == null) {
+            metadatMatch =
+                    new MatchMetadata(MetaDataUtil.getElanTagMetadata(elanTag), MetaDataUtil.METADATA_MASK_SERVICE);
+        } else {
+            metadatMatch =
+                    new MatchMetadata(MetaDataUtil.getVpnIdMetadata(vpnId), MetaDataUtil.METADATA_MASK_VRFID);
+        }
         flowMatches.add(metadatMatch);
 
         if (ip.getIpAddress().getIpAddress() != null) {
@@ -1069,4 +1081,13 @@ public final class AclServiceUtils {
         MatchInfoBase lportMatch = buildLPortTagMatch(lportTag, serviceMode);
         InterfaceServiceUtil.mergeMetadataMatchsOrAdd(flowMatches, lportMatch);
     }
+
+    static AclInterface buildAclInterfaceState(String interfaceId, InterfaceAcl aclInPort) {
+        AclInterface aclInterface = new AclInterface();
+        aclInterface.setInterfaceId(interfaceId);
+        aclInterface.setPortSecurityEnabled(aclInPort.isPortSecurityEnabled());
+        aclInterface.setSecurityGroups(aclInPort.getSecurityGroups());
+        aclInterface.setAllowedAddressPairs(aclInPort.getAllowedAddressPairs());
+        return aclInterface;
+    }
 }