[ONOS-7684] Support VM Live Migration (VxLAN + VLAN)

Change-Id: I4717f0af6731b41eaf3114994f2087af74c3e3f5
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
index 4869101..aab3780 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
@@ -161,6 +161,27 @@
         }
     }
 
+    /**
+     * Removes virtual port.
+     *
+     * @param instPort instance port
+     */
+    private void removeVportRules(InstancePort instPort) {
+        NetworkType type = osNetworkService.network(instPort.networkId()).getNetworkType();
+
+        switch (type) {
+            case VXLAN:
+                setTunnelTagFlowRules(instPort, false);
+                break;
+            case VLAN:
+                setVlanTagFlowRules(instPort, false);
+                break;
+            default:
+                log.warn("Unsupported network tunnel type {}", type.name());
+                break;
+        }
+    }
+
     private void setFlatJumpRules(InstancePort port, boolean install) {
         TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
         selector.matchInPort(port.portNumber());
@@ -597,6 +618,14 @@
                         instPortRemoved(event.subject());
                     });
                     break;
+                case OPENSTACK_INSTANCE_MIGRATION_ENDED:
+                    eventExecutor.execute(() -> {
+                        log.info("Instance port vanished MAC:{} IP:{}, due to VM migration",
+                                instPort.macAddress(),
+                                instPort.ipAddress());
+                        removeVportRules(event.subject());
+                    });
+                    break;
                 default:
                     break;
             }