[libvirt] [PATCH] Fix bogus reporting of KVM support for non-native emulators
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
A logic bug meant we reported KVM was possible for every
architecture, merely based on whether the query-kvm command
exists. We should instead have been doing it based on whether
the query-kvm command returns 'present: 1'
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
src/qemu/qemu_capabilities.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index f86c28f..29693c3 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2117,11 +2117,16 @@ qemuCapsProbeQMPKVMState(qemuCapsPtr caps,
return -1;
/* The QEMU_CAPS_KVM flag was initially set according to the QEMU
- * reporting the recognition of 'query-kvm' QMP command, but the
- * flag means whether the KVM is enabled by default and should be
- * disabled in case we want SW emulated machine, so let's fix that
- * if it's true. */
- if (!enabled) {
+ * reporting the recognition of 'query-kvm' QMP command. That merely
+ * indicates existance of the command though, not whether KVM support
+ * is actually available, nor whether it is enabled by default.
+ *
+ * If it is not present we need to clear the flag, and if it is
+ * not enabled by default we need to change the flag.
+ */
+ if (!present) {
+ qemuCapsClear(caps, QEMU_CAPS_KVM);
+ } else if (!enabled) {
qemuCapsClear(caps, QEMU_CAPS_KVM);
qemuCapsSet(caps, QEMU_CAPS_ENABLE_KVM);
}
--
1.8.0.2
11 years, 10 months
[libvirt] [PATCH] qemu: don't share kerberos caches between domains
by Eric Blake
https://bugzilla.redhat.com/show_bug.cgi?id=718377
complains that there were some SELinux AVCs when using vnc console
over Kerberos. The root problem was that Kerberos tries to set up
a cache file, and if we don't tell it where, then all domains use
the same cache file, which violates sVirt protections. Setting the
environment variable unconditionally should be safe, even for setups
where Kerboros won't actually create a cache file.
* src/qemu/qemu_process.c (qemuProcessStart): Set KRB5CACHEDIR for
each domain.
---
src/qemu/qemu_process.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 55d00e3..986e8ee 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -1,7 +1,7 @@
/*
* qemu_process.h: QEMU process management
*
- * Copyright (C) 2006-2012 Red Hat, Inc.
+ * Copyright (C) 2006-2013 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -3857,6 +3857,8 @@ int qemuProcessStart(virConnectPtr conn,
virCommandSetPidFile(cmd, priv->pidfile);
virCommandDaemonize(cmd);
virCommandRequireHandshake(cmd);
+ virCommandAddEnvFormat(cmd, "KRB5CACHEDIR=%s/%s.krb",
+ driver->cacheDir, vm->def->name);
ret = virCommandRun(cmd, NULL);
--
1.8.1
11 years, 10 months
[libvirt] [PATCH] qemuDomainSendKey: Relax the qemu driver locking
by Michal Privoznik
Currently, there is no reason to hold qemu driver locked
throughout whole API execution. Moreover, we can use the
new qemuDomObjFromDomain() internal API to lookup domain then.
---
src/qemu/qemu_driver.c | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 6d4c1e9..100f10b 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2407,19 +2407,12 @@ static int qemuDomainSendKey(virDomainPtr domain,
}
}
- qemuDriverLock(driver);
- vm = virDomainFindByUUID(&driver->domains, domain->uuid);
- if (!vm) {
- char uuidstr[VIR_UUID_STRING_BUFLEN];
- virUUIDFormat(domain->uuid, uuidstr);
- virReportError(VIR_ERR_NO_DOMAIN,
- _("no domain with matching uuid '%s'"), uuidstr);
+ if (!(vm = qemuDomObjFromDomain(domain)))
goto cleanup;
- }
priv = vm->privateData;
- if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0)
+ if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
if (!virDomainObjIsActive(vm)) {
@@ -2428,9 +2421,9 @@ static int qemuDomainSendKey(virDomainPtr domain,
goto endjob;
}
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
+ qemuDomainObjEnterMonitor(driver, vm);
ret = qemuMonitorSendKey(priv->mon, holdtime, keycodes, nkeycodes);
- qemuDomainObjExitMonitorWithDriver(driver, vm);
+ qemuDomainObjExitMonitor(driver, vm);
endjob:
if (qemuDomainObjEndJob(driver, vm) == 0)
@@ -2439,7 +2432,6 @@ endjob:
cleanup:
if (vm)
virObjectUnlock(vm);
- qemuDriverUnlock(driver);
return ret;
}
--
1.8.0.2
11 years, 10 months
[libvirt] [PATCH] node_memory: Add '\n' to help message
by Satoru Moriya
Linefeed is missed in the help of node-memory-tune.
This patch just adds '\n' to get a correct help message.
Signed-off-by: Satoru Moriya <satoru.moriya(a)hds.com>
---
tools/virsh-host.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/virsh-host.c b/tools/virsh-host.c index d05e435..b83c893 100644
--- a/tools/virsh-host.c
+++ b/tools/virsh-host.c
@@ -764,7 +764,7 @@ cmdVersion(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
static const vshCmdInfo info_node_memory_tune[] = {
{"help", N_("Get or set node memory parameters")},
- {"desc", N_("Get or set node memory parameters"
+ {"desc", N_("Get or set node memory parameters\n"
" To get the memory parameters, use following command: \n\n"
" virsh # node-memory-tune")},
{NULL, NULL}
--
1.7.11.7
11 years, 10 months
[libvirt] [PATCH] qemu: escape ipv6 for rbd network disk hosts
by Josh Durgin
Hosts for rbd are ceph monitor daemons. These have fixed IP addresses,
so they are often referenced by IP rather than hostname for
convenience, or to avoid relying on DNS. Using IPv4 addresses as the
host name works already, but IPv6 addresses require rbd-specific
escaping because the colon is used as an option separator in the
string passed to qemu.
Escape these colons, and enclose the IPv6 address in square brackets
if a port is specified.
Signed-off-by: Josh Durgin <josh.durgin(a)inktank.com>
---
docs/schemas/domaincommon.rng | 5 ++-
src/qemu/qemu_command.c | 34 +++++++++++++++----
tests/qemuargv2xmltest.c | 1 +
.../qemuxml2argv-disk-drive-network-rbd-ipv6.args | 9 +++++
.../qemuxml2argv-disk-drive-network-rbd-ipv6.xml | 36 ++++++++++++++++++++
tests/qemuxml2argvtest.c | 2 +
6 files changed, 79 insertions(+), 8 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.xml
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 7f3320e..273e54c 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1099,7 +1099,10 @@
</attribute>
</optional>
<attribute name="name">
- <ref name="dnsName"/>
+ <choice>
+ <ref name="dnsName"/>
+ <ref name="ipAddr"/>
+ </choice>
</attribute>
<attribute name="port">
<ref name="unsignedInt"/>
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 02fe015..dfc042b 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -34,6 +34,7 @@
#include "virerror.h"
#include "virutil.h"
#include "virfile.h"
+#include "virstring.h"
#include "viruuid.h"
#include "c-ctype.h"
#include "domain_nwfilter.h"
@@ -1937,13 +1938,16 @@ qemuBuildRBDString(virConnectPtr conn,
if (i) {
virBufferAddLit(opt, "\\;");
}
- if (disk->hosts[i].port) {
- virBufferAsprintf(opt, "%s\\:%s",
- disk->hosts[i].name,
- disk->hosts[i].port);
+
+ /* assume host containing : is ipv6 */
+ if (strchr(disk->hosts[i].name, ':')) {
+ virBufferEscape(opt, '\\', ":", "[%s]", disk->hosts[i].name);
} else {
virBufferAsprintf(opt, "%s", disk->hosts[i].name);
}
+ if (disk->hosts[i].port) {
+ virBufferAsprintf(opt, "\\:%s", disk->hosts[i].port);
+ }
}
}
@@ -1961,15 +1965,26 @@ error:
static int qemuAddRBDHost(virDomainDiskDefPtr disk, char *hostport)
{
char *port;
+ size_t skip;
+ char **parts;
disk->nhosts++;
if (VIR_REALLOC_N(disk->hosts, disk->nhosts) < 0)
goto no_memory;
- port = strstr(hostport, "\\:");
+ if (strchr(hostport, ']')) {
+ /* ipv6, strip brackets */
+ hostport += 1;
+ port = strstr(hostport, "]\\:");
+ skip = 3;
+ } else {
+ port = strstr(hostport, "\\:");
+ skip = 2;
+ }
+
if (port) {
*port = '\0';
- port += 2;
+ port += skip;
disk->hosts[disk->nhosts-1].port = strdup(port);
if (!disk->hosts[disk->nhosts-1].port)
goto no_memory;
@@ -1978,7 +1993,12 @@ static int qemuAddRBDHost(virDomainDiskDefPtr disk, char *hostport)
if (!disk->hosts[disk->nhosts-1].port)
goto no_memory;
}
- disk->hosts[disk->nhosts-1].name = strdup(hostport);
+
+ parts = virStringSplit(hostport, "\\:", 0);
+ if (!parts)
+ goto no_memory;
+ disk->hosts[disk->nhosts-1].name = virStringJoin((const char **)parts, ":");
+ virStringFreeList(parts);
if (!disk->hosts[disk->nhosts-1].name)
goto no_memory;
diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c
index 2923324..e465f3d 100644
--- a/tests/qemuargv2xmltest.c
+++ b/tests/qemuargv2xmltest.c
@@ -185,6 +185,7 @@ mymain(void)
DO_TEST("disk-drive-network-nbd");
DO_TEST("disk-drive-network-gluster");
DO_TEST("disk-drive-network-rbd");
+ DO_TEST("disk-drive-network-rbd-ipv6");
/* older format using CEPH_ARGS env var */
DO_TEST("disk-drive-network-rbd-ceph-env");
DO_TEST("disk-drive-network-sheepdog");
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args
new file mode 100644
index 0000000..0c67229
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args
@@ -0,0 +1,9 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
+/usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \
+unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -drive \
+file=/dev/HostVG/QEMUGuest1,if=ide,bus=0,unit=0 -drive \
+'file=rbd:pool/image:auth_supported=none:\
+mon_host=[\:\:1]\:6321\;example.org\:6789\;\
+[ffff\:1234\:567\:abc\:\:0f]\:6322\;\
+[2001\:db8\:\:ff00\:42\:8329]\:6322,\
+if=virtio,format=raw' -net none -serial none -parallel none
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.xml
new file mode 100644
index 0000000..a2ca2d2
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.xml
@@ -0,0 +1,36 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+ <disk type='network' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source protocol='rbd' name='pool/image'>
+ <host name='::1' port='6321'/>
+ <host name='example.org' port='6789'/>
+ <host name='ffff:1234:567:abc::0f' port='6322'/>
+ <host name='2001:db8::ff00:42:8329' port='6322'/>
+ </source>
+ <target dev='vda' bus='virtio'/>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='ide' index='0'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 31ed116..88e1c36 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -478,6 +478,8 @@ mymain(void)
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
DO_TEST("disk-drive-network-rbd-auth",
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
+ DO_TEST("disk-drive-network-rbd-ipv6",
+ QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
DO_TEST("disk-drive-no-boot",
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_BOOTINDEX);
DO_TEST("disk-usb", NONE);
--
1.7.2.5
11 years, 10 months
[libvirt] [PATCH] snapshot: fix state after external snapshot of S3 domain
by Eric Blake
https://bugzilla.redhat.com/show_bug.cgi?id=876829 complains that
if a guest is put into S3 state (such as via virsh dompmsuspend)
and then an external snapshot is taken, qemu forcefully transitions
the domain to paused, but libvirt doesn't reflect that change
internally. Thus, a user has to use 'virsh suspend' to get libvirt
back in sync with qemu state, and if the user doesn't know this
trick, then the guest appears hung.
* src/qemu/qemu_driver.c (qemuDomainSnapshotCreateActiveExternal):
Track fact that qemu wakes up a suspended domain on migration.
---
src/qemu/qemu_driver.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 6d4c1e9..da30dcb 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1,7 +1,7 @@
/*
* qemu_driver.c: core driver methods for managing qemu guests
*
- * Copyright (C) 2006-2012 Red Hat, Inc.
+ * Copyright (C) 2006-2013 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@@ -11124,6 +11124,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
bool atomic = !!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC);
bool transaction = qemuCapsGet(priv->caps, QEMU_CAPS_TRANSACTION);
int thaw = 0; /* 1 if freeze succeeded, -1 if freeze failed */
+ bool pmsuspended = false;
if (qemuDomainObjBeginAsyncJobWithDriver(driver, vm,
QEMU_ASYNC_JOB_SNAPSHOT) < 0)
@@ -11144,7 +11145,9 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
}
/* we need to resume the guest only if it was previously running */
- if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
+ if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PMSUSPENDED) {
+ pmsuspended = true;
+ } else if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
resume = true;
/* For external checkpoints (those with memory), the guest
@@ -11226,6 +11229,18 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
vm = NULL;
if (event)
qemuDomainEventQueue(driver, event);
+ } else if (memory && pmsuspended) {
+ /* qemu 1.3 is unable to save a domain in pm-suspended (S3)
+ * state; so we must emit an event stating that it was
+ * converted to paused. */
+ virDomainEventPtr event;
+
+ virDomainObjSetState(vm, VIR_DOMAIN_PAUSED,
+ VIR_DOMAIN_PAUSED_FROM_SNAPSHOT);
+ event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_SUSPENDED,
+ VIR_DOMAIN_EVENT_SUSPENDED_FROM_SNAPSHOT);
+ if (event)
+ qemuDomainEventQueue(driver, event);
}
ret = 0;
--
1.8.1
11 years, 10 months
[libvirt] [PATCH 00/10] Patches for various coverity issues
by John Ferlan
locking:
Fixes Coverity OVERRUN warning due to the size of the source string being
19 bytes and the memcpy size of 48 bytes
security:
Fixes Coverity warning STRING_OVERFLOW about due to the copy being from a
variable sized string to a fixed length string. Even though on read other
checks ensure the source buffer is no longer than the number of bytes in
the destination, Coverity doesn't know that.
rpc:
Fixes Coverity warning DEADCODE due to removal of code as specified in
the commit message
parallels:
Fixes Coverity warning NULL_RETURNS from not checking result of
virJSONValueObjectGetString() call as part of commit id: 8ce9e2ab
util:
Fixes Coverity warning NULL_RETURNS due to not checking the return
value 'child' from a virJSONValueNewObject() call.
qemu:
Fixes Coverity warning NULL_RETURNS from not checking the return
value 'activeDev' from a pciDeviceListFind() call.
selinux:
Fixes Coverity warning RESOURCE_LEAK as a result of code specified in
the commit message
esx:
Fixes Coverity warning REVERSE_INULL as a result of needlessly checking
if objectSpec != NULL. At the point in the code, objectSpec must be valid.
virobject:
Fixes Coverity warning CONSTANT_EXPRESSION_RESULT and DEADCODE as a
result of commit id b545f65 using "if (!virObjectInitialize() < 0)"
network:
Fixes Coverity warning UNUSED_VALUE as specific in the commit message
John Ferlan (10):
locking: use virStrcpy instead of memcpy
security: Use virStrcpy to move the label
rpc: Remove call to virKeepAliveStop at init
parallels: Need to handle virJSONValueObjectGetString error
util: Need to check child JSON allocation before use
qemu: Check valid activeDev before calling pciDeviceSetUsedBy
selinux: Resolve resource leak using the default disk label
esx: No need to check for objectSpec
virobject: Remove the bogus ! from call to virObjectInitialize()
network: Remove dead code getting, but not using ipdef
src/conf/domain_conf.c | 29 +++++++++++++++++++++++++++++
src/conf/domain_conf.h | 3 +++
src/esx/esx_vi.c | 7 +++----
src/locking/lock_driver_sanlock.c | 9 ++++++++-
src/network/bridge_driver.c | 3 ---
src/parallels/parallels_driver.c | 5 ++++-
src/qemu/qemu_hostdev.c | 3 ++-
src/rpc/virnetserverclient.c | 2 --
src/security/security_dac.c | 8 +++++++-
src/security/security_selinux.c | 6 +++---
src/util/virlockspace.c | 3 +++
src/util/virobject.c | 4 ++--
12 files changed, 64 insertions(+), 18 deletions(-)
--
1.7.11.7
11 years, 10 months
[libvirt] [PATCH] Move QEMU capabilities initialization later in QEMU startup
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
Currently QEMU capabilities are initialized before the QEMU driver
sets ownership on its various directories. The upshot is that if
you change the user/group in the qemu.conf file, libvirtd will fail
to probe QEMU the first time it is run after the config change.
Moving QEMU capabilities initialization to after the chown() calls
fixes this
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
src/qemu/qemu_driver.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 1f43d54..9ff920e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -825,13 +825,6 @@ qemuStartup(bool privileged,
if (qemuSecurityInit(qemu_driver) < 0)
goto error;
- qemu_driver->capsCache = qemuCapsCacheNew(qemu_driver->libDir,
- qemu_driver->stateDir,
- qemu_driver->user,
- qemu_driver->group);
- if (!qemu_driver->capsCache)
- goto error;
-
if ((qemu_driver->activePciHostdevs = pciDeviceListNew()) == NULL)
goto error;
@@ -871,6 +864,12 @@ qemuStartup(bool privileged,
}
}
+ qemu_driver->capsCache = qemuCapsCacheNew(qemu_driver->libDir,
+ qemu_driver->user,
+ qemu_driver->group);
+ if (!qemu_driver->capsCache)
+ goto error;
+
if ((qemu_driver->caps = qemuCreateCapabilities(qemu_driver)) == NULL)
goto error;
--
1.8.0.2
11 years, 10 months
[libvirt] [PATCH v3 0/2] selinux: Only create the selabel_handle once.
by Richard W.M. Jones
Version 3 of this patch. Because I now have to pass the 'mgr' pointer
around, the patch is considerably more complicated than before.
Patch 1/2 is required so that I can use virReportSystemError when I
don't need to have any optional arguments, ie. the equivalent of:
printf ("foo\n");
I have tested these two patches against the libguestfs test suite, and
it works for me and removes the memory leak.
Rich.
11 years, 10 months
[libvirt] not able to stop vmware player node through libvirt API
by varun bhatnagar
Hi,
I have started one node through libvirt API using its start method. I am
trying to stop that node using the *destroy *method provided by the API but
I am not able to do so. Instead, I am getting one message saying:
*libvir: error: internal error Child process (vmrun -T player stop
/root/test_folder/myImage.vmx soft) unexpected exit status 255*
Can anybody tell me why I am not able to stop the node.
Thanks in advance. :)
11 years, 10 months