[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;
}