Bug 8398 - communication between two tenant network failed while
[netvirt.git] / vpnservice / aclservice / impl / src / main / java / org / opendaylight / netvirt / aclservice / utils / AclServiceUtilFacade.java
index 7e7be30d12652e16aab6665059a8ed125a5f72c4..87f170652715901125fca32ae199f81d8a4eb568 100644 (file)
@@ -8,21 +8,32 @@
 
 package org.opendaylight.netvirt.aclservice.utils;
 
+import com.google.common.base.Optional;
+import java.math.BigInteger;
 import java.util.List;
 import java.util.Map;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.genius.mdsalutil.MatchInfoBase;
+import org.opendaylight.netvirt.aclservice.api.AclServiceManager;
+import org.opendaylight.netvirt.aclservice.api.utils.AclInterface;
 import org.opendaylight.netvirt.aclservice.api.utils.IAclServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.Matches;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.aclservice.rev160608.InterfaceAcl;
 
 @Singleton
 public class AclServiceUtilFacade implements IAclServiceUtil {
+    private final AclServiceManager aclServiceManager;
+    private final DataBroker broker;
 
     @Inject
-    public AclServiceUtilFacade() {
+    public AclServiceUtilFacade(DataBroker broker, AclServiceManager aclServiceManager) {
+        this.broker = broker;
+        this.aclServiceManager = aclServiceManager;
     }
 
     @Override
@@ -30,4 +41,25 @@ public class AclServiceUtilFacade implements IAclServiceUtil {
         return AclServiceOFFlowBuilder.programIpFlow(matches);
     }
 
+    @Override
+    public void updateBoundServicesFlow(String interfaceName, Long vpnId) {
+        Optional<Interface> intfc = AclServiceUtils.getInterface(broker, interfaceName);
+        InterfaceAcl aclInPort = intfc.get().getAugmentation(InterfaceAcl.class);
+        if (aclInPort != null && aclInPort.isPortSecurityEnabled()) {
+            aclServiceManager.bindAclTableForVpn(AclServiceUtils.buildAclInterfaceState(interfaceName, aclInPort),
+                    vpnId);
+        }
+    }
+
+    @Override
+    public void updateRemoteAclFilterTable(String interfaceName, Long vpnId, BigInteger dpnId, int addOrDelete) {
+        Optional<Interface> intfc = AclServiceUtils.getInterface(broker, interfaceName);
+        InterfaceAcl aclInPort = intfc.get().getAugmentation(InterfaceAcl.class);
+        if (aclInPort != null && aclInPort.isPortSecurityEnabled()) {
+            AclInterface aclInterface = AclServiceUtils.buildAclInterfaceState(interfaceName, aclInPort);
+            aclInterface.setDpId(dpnId);
+            aclServiceManager.updateRemoteAclFilterTable(aclInterface, addOrDelete, vpnId);
+        }
+    }
+
 }