Bug 7881 - Traffic drops when not matching UL SC starting 49/52549/1
authorMarcos López Samaniego <marcos.lopez.samaniego@ericsson.com>
Tue, 28 Feb 2017 16:23:51 +0000 (17:23 +0100)
committerMarcos López Samaniego <marcos.lopez.samaniego@ericsson.com>
Wed, 1 Mar 2017 19:01:07 +0000 (20:01 +0100)
in a VPNPseudoPort

When programming the L3VPN to SCF pipeline, a new flow is needed in
table 17

Change-Id: I31cf7817eb38b47e5c665c4f0362d0baa9554af4
Signed-off-by: Marcos López Samaniego <marcos.lopez.samaniego@ericsson.com>
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/VPNServiceChainHandler.java

index efd0070b0157de45cecd6c73b7ce829f8238b6d9..2264549b376a00e05d1856161c65665bfd58639b 100755 (executable)
@@ -134,16 +134,30 @@ public class VPNServiceChainHandler implements AutoCloseable {
         Collection<VpnToDpnList> vpnToDpnList = vpnInstance.getVpnToDpnList();
         List<VrfEntry> vrfEntries = VpnServiceChainUtils.getAllVrfEntries(dataBroker, rd);
         if (vrfEntries != null) {
-            AddVpnPseudoPortDataJob updateVpnToPseudoPortTask =
-                new AddVpnPseudoPortDataJob(dataBroker, rd, lportTag, tableId, (int) scfTag);
-            DataStoreJobCoordinator.getInstance().enqueueJob(updateVpnToPseudoPortTask.getDsJobCoordinatorKey(),
-                                                             updateVpnToPseudoPortTask);
+            if (addOrRemove == NwConstants.ADD_FLOW) {
+                AddVpnPseudoPortDataJob updateVpnToPseudoPortTask =
+                        new AddVpnPseudoPortDataJob(dataBroker, rd, lportTag, tableId, (int) scfTag);
+                DataStoreJobCoordinator.getInstance().enqueueJob(updateVpnToPseudoPortTask.getDsJobCoordinatorKey(),
+                                                                 updateVpnToPseudoPortTask);
+            } else {
+                RemoveVpnPseudoPortDataJob removeVpnPseudoPortDataTask = new RemoveVpnPseudoPortDataJob(dataBroker, rd);
+                DataStoreJobCoordinator.getInstance().enqueueJob(removeVpnPseudoPortDataTask.getDsJobCoordinatorKey(),
+                                                                 removeVpnPseudoPortDataTask);
+            }
 
             for (VpnToDpnList dpnInVpn : vpnToDpnList) {
                 BigInteger dpnId = dpnInVpn.getDpnId();
                 programVpnToScfPipelineOnDpn(dpnId, vrfEntries, tableId, (int) scfTag, lportTag, addOrRemove);
 
                 if (dpnInVpn.getVpnInterfaces() != null) {
+                    long vpnId = vpnInstance.getVpnId();
+                    Flow flow = VpnServiceChainUtils.buildLPortDispFromScfToL3VpnFlow(vpnId, dpnId, lportTag,
+                            NwConstants.ADD_FLOW);
+                    if (addOrRemove == NwConstants.ADD_FLOW) {
+                        mdsalManager.installFlow(dpnId, flow);
+                    } else {
+                        mdsalManager.removeFlow(dpnId, flow);
+                    }
                     dpnInVpn.getVpnInterfaces().stream().forEach(vpnIf -> {
                         if ( addOrRemove == NwConstants.ADD_FLOW ) {
                             bindScfOnVpnInterface(vpnIf.getInterfaceName(), (int) scfTag);