diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 47c5af39786..ce13c6ec4a1 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -881,6 +881,15 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe try { VM.Record vmr = vm.getRecord(conn); + List networks = new ArrayList(); + for (VIF vif : vmr.VIFs) { + try { + VIF.Record rec = vif.getRecord(conn); + networks.add(rec.network); + } catch (Exception e) { + s_logger.warn("Unable to cleanup VIF", e); + } + } if (vmr.powerState == VmPowerState.RUNNING) { try { vm.hardShutdown(conn); @@ -911,6 +920,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn("Unable to cleanup VIF", e); } } + for (Network network : networks) { + if (network.getNameLabel(conn).startsWith("VLAN")) { + disableVlanNetwork(conn, network); + } + } } catch (Exception e) { s_logger.warn("VM getRecord failed due to ", e); } @@ -6368,7 +6382,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe * XsNic represents a network and the host's specific PIF. */ protected class XsLocalNetwork { - private Network _n; + private final Network _n; private Network.Record _nr; private PIF _p; private PIF.Record _pr;