Re: [libvirt] virsh + ssh
by Daniel Huhardeaux
Eric sorry for private mail, I tought libvirt-list was the "To".
Le 04/01/2011 18:13, Daniel Huhardeaux a écrit :
> Hi all
>
> Le 03/01/2011 22:32, Eric Blake a écrit :
>> On 01/01/2011 03:38 AM, Daniel Huhardeaux wrote:
>>> Hi,
>>>
>>> connecting to a remote server using qemu+ssh is always done with root
>>> user. The problem we face is that we don't allow root connection for
>>> ssh.
>>
>> I haven't tried, but it seems to me like you should be able to do
>> qemu+ssh://user@remote/system in order to connect as user instead of
>> root.
>
> Following Justins link -which says the same that you- it works.
>
> My problem was that I wanted to do it with virt-manager which only
> connect using URI qemu+ssh://root@remote/system :-(
>
> I face a strange behavior: I added my user in libvirt group and modify
> libvirtd.conf to start with group libvirt. I restart libvirt-bin and:
>
> virsh -c qemu+ssh:///system
> dh@localhost's password:
> Welcome to virsh, the virtualization interactive terminal.
>
> Type: 'help' for help with commands
> 'quit' to quit
>
> virsh # list
> Id Name State
> ----------------------------------
> 1 XPHome running
>
> virsh #
>
> Now without connecting through ssh:
>
> virsh
> Welcome to virsh, the virtualization interactive terminal.
>
> Type: 'help' for help with commands
> 'quit' to quit
>
> virsh # list
> Id Name State
> ----------------------------------
>
> virsh #
>
> So using virsh I don't see VM's! If I do 'sudo virsh' it's OK. What is
> wrong in my setup?
>
> Thanks for your help
I got it: when you connect as an user with virsh it does't automatically
connect to local system as it does as root user: virsh -c qemu:///system
is the right command.
Thanks for your time.
PS: if someone knows how to connect virt-manager with ssh as a normal
user, would appreciate to share :-)
--
Daniel
13 years, 10 months
Re: [libvirt] virsh + ssh
by Eric Blake
[forwarding back to the list, in case this helps anyone else]
On 01/04/2011 10:24 AM, Eric Blake wrote:
> On 01/04/2011 10:13 AM, Daniel Huhardeaux wrote:
>> My problem was that I wanted to do it with virt-manager which only
>> connect using URI qemu+ssh://root@remote/system :-(
>
> virt-manager lets you add a new connection and specify the username. On
> virt-manager-0.8.5-1.fc14 (fedora 14 box), I just tried File->add
> connection; hypervisor qemu/kvm, check the box for remote host, method
> ssh, and then you can specify both username and host, at which point it
> displays a generated URI of qemu+ssh://user@remote/system.
>
>>
>> I face a strange behavior: I added my user in libvirt group and modify
>> libvirtd.conf to start with group libvirt. I restart libvirt-bin and:
>>
>> virsh -c qemu+ssh:///system
>> dh@localhost's password:
>
> so you are authenticating as yourself and not as root.
>
>> virsh
>> Welcome to virsh, the virtualization interactive terminal.
>
> And here, no authentication was even attempted (which means you really
> connected to qemu:///session). Try instead to use:
>
> virsh -c qemu:///system
>
> to see the difference (system and session maintain independent lists of
> running domains, which is why your use of virsh without -c saw no
> domains because it connected to session instead of system).
>
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
13 years, 10 months
[libvirt] [PATCH 00/13] IPv6 support for virtual networks using bridge driver
by Laine Stump
Finally!
Most of this patchset is setup for patch 09/13, which updates the
network XML parser to support IPv6, and 12/13, which turns on IPv6 in
the bridge driver.
In order to have each patch individually pass make check and
(otherwise function properly in case someone is doing a bisect), there
is a bit of extra code churn (lines that are changed in one patch,
only to be changed again in a later patch); I tried to minimize this
as much as possible.
For for IPv6 to work correctly, target *and build* systems will
now need to have ip6tables and radvd available. The way I added
ip6tables into autoconfigure.ac is identical to existing iptables, and
the way I added radvd is identical to dnsmasq. Unfortunately this
doesn't communicate the requirement downstream in a programmatic
fashion, so I guess we need to make sure that this is adequately
reported in the next set of release notes.
There is a remaining problem, outlined in PATCH 13/13, which I would
like some input on - there is a race between radvd writing its pidfile
and libvirtd reading it, and a couple possible ways to fix it, neither
of which is optimal. If anyone has a different idea, I'd like to hear
it (I'm leaning towards option 2 right now - it creates an extra file,
but behavior is 100% correct).
13 years, 10 months
[libvirt] [PATCH v2] Support for qemu aio drive option
by Matthias Dahl
Revised patch against libvirt 0.7.6 to support qemu's aio option.
qemu allows the user to choose what io storage api should be used, either the
default (threads) or native (linux aio) which in the latter case can result in
better performance.
This patch exposes this functionality through libvirt.
Thanks a lot to Eric Blake and Matthias Bolte for their comments.
---
docs/formatdomain.html.in | 4 +++-
docs/schemas/domain.rng | 13 +++++++++++--
src/conf/domain_conf.c | 23 +++++++++++++++++++++++
src/conf/domain_conf.h | 10 ++++++++++
src/qemu/qemu_conf.c | 14 ++++++++++++++
src/qemu/qemu_conf.h | 2 ++
6 files changed, 63 insertions(+), 3 deletions(-)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index ce49f7d..ec85ef3 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -478,7 +478,9 @@
attribute is the primary backend driver name, while the optional <code>type</code>
attribute provides the sub-type. The optional <code>cache</code> attribute
controls the cache mechanism, possible values are "default", "none",
- "writethrough" and "writeback". <span class="since">Since 0.1.8</span>
+ "writethrough" and "writeback". Specific to KVM guests is the optional <code>aio</code>
+ attribute which controls what storage api is used for io operations, its possible
+ values are "threads" and "native". <span class="since">Since 0.1.8; "aio" attribute since 0.7.7</span>
</dd>
<dt><code>encryption</code></dt>
<dd>If present, specifies how the volume is encrypted. See
diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
index bb6d00d..5d2dafe 100644
--- a/docs/schemas/domain.rng
+++ b/docs/schemas/domain.rng
@@ -499,8 +499,9 @@
<ref name="driverCache"/>
</group>
</choice>
- <empty/>
- </element>
+ <optional>
+ <ref name="driverAIO"/>
+ </optional>
</define>
<define name="driverFormat">
<attribute name="name">
@@ -521,6 +522,14 @@
</choice>
</attribute>
</define>
+ <define name="driverAIO">
+ <attribute name="aio">
+ <choice>
+ <value>threads</value>
+ <value>native</value>
+ </choice>
+ </attribute>
+ </define>
<define name="controller">
<element name="controller">
<optional>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 766993c..8bee7b8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -120,6 +120,11 @@ VIR_ENUM_IMPL(virDomainDiskCache, VIR_DOMAIN_DISK_CACHE_LAST,
"writethrough",
"writeback")
+VIR_ENUM_IMPL(virDomainDiskAIO, VIR_DOMAIN_DISK_AIO_LAST,
+ "default",
+ "native",
+ "threads")
+
VIR_ENUM_IMPL(virDomainController, VIR_DOMAIN_CONTROLLER_TYPE_LAST,
"ide",
"fdc",
@@ -1228,6 +1233,7 @@ virDomainDiskDefParseXML(virConnectPtr conn,
char *target = NULL;
char *bus = NULL;
char *cachetag = NULL;
+ char *aiotag = NULL;
char *devaddr = NULL;
virStorageEncryptionPtr encryption = NULL;
char *serial = NULL;
@@ -1293,6 +1299,7 @@ virDomainDiskDefParseXML(virConnectPtr conn,
driverName = virXMLPropString(cur, "name");
driverType = virXMLPropString(cur, "type");
cachetag = virXMLPropString(cur, "cache");
+ aiotag = virXMLPropString(cur, "aio");
} else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) {
def->readonly = 1;
} else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
@@ -1409,6 +1416,13 @@ virDomainDiskDefParseXML(virConnectPtr conn,
goto error;
}
+ if (aiotag &&
+ (def->aiomode = virDomainDiskAIOTypeFromString(aiotag)) < 0) {
+ virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("unknown disk aio mode '%s'"), aiotag);
+ goto error;
+ }
+
if (devaddr) {
if (sscanf(devaddr, "%x:%x:%x",
&def->info.addr.pci.domain,
@@ -1450,6 +1464,7 @@ cleanup:
VIR_FREE(driverType);
VIR_FREE(driverName);
VIR_FREE(cachetag);
+ VIR_FREE(aiotag);
VIR_FREE(devaddr);
VIR_FREE(serial);
virStorageEncryptionFree(encryption);
@@ -4565,6 +4580,7 @@ virDomainDiskDefFormat(virConnectPtr conn,
const char *device = virDomainDiskDeviceTypeToString(def->device);
const char *bus = virDomainDiskBusTypeToString(def->bus);
const char *cachemode = virDomainDiskCacheTypeToString(def->cachemode);
+ const char *aiomode = virDomainDiskAIOTypeToString(def->aiomode);
if (!type) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
@@ -4586,6 +4602,11 @@ virDomainDiskDefFormat(virConnectPtr conn,
_("unexpected disk cache mode %d"), def->cachemode);
return -1;
}
+ if (!aiomode) {
+ virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("unexpected disk aio mode %d"), def->aiomode);
+ return -1;
+ }
virBufferVSprintf(buf,
" <disk type='%s' device='%s'>\n",
@@ -4597,6 +4618,8 @@ virDomainDiskDefFormat(virConnectPtr conn,
virBufferVSprintf(buf, " type='%s'", def->driverType);
if (def->cachemode)
virBufferVSprintf(buf, " cache='%s'", cachemode);
+ if (def->aiomode)
+ virBufferVSprintf(buf, " aio='%s'", aiomode);
virBufferVSprintf(buf, "/>\n");
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 0b79e88..07805a6 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -141,6 +141,14 @@ enum virDomainDiskCache {
VIR_DOMAIN_DISK_CACHE_LAST
};
+enum virDomainDiskAIO {
+ VIR_DOMAIN_DISK_AIO_DEFAULT,
+ VIR_DOMAIN_DISK_AIO_NATIVE,
+ VIR_DOMAIN_DISK_AIO_THREADS,
+
+ VIR_DOMAIN_DISK_AIO_LAST
+};
+
/* Stores the virtual disk configuration */
typedef struct _virDomainDiskDef virDomainDiskDef;
typedef virDomainDiskDef *virDomainDiskDefPtr;
@@ -154,6 +162,7 @@ struct _virDomainDiskDef {
char *driverType;
char *serial;
int cachemode;
+ int aiomode;
unsigned int readonly : 1;
unsigned int shared : 1;
virDomainDeviceInfo info;
@@ -897,6 +906,7 @@ VIR_ENUM_DECL(virDomainDisk)
VIR_ENUM_DECL(virDomainDiskDevice)
VIR_ENUM_DECL(virDomainDiskBus)
VIR_ENUM_DECL(virDomainDiskCache)
+VIR_ENUM_DECL(virDomainDiskAIO)
VIR_ENUM_DECL(virDomainController)
VIR_ENUM_DECL(virDomainFS)
VIR_ENUM_DECL(virDomainNet)
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 3d83a8f..fd3a670 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -83,6 +83,12 @@ VIR_ENUM_IMPL(qemuDiskCacheV2, VIR_DOMAIN_DISK_CACHE_LAST,
"writethrough",
"writeback");
+VIR_ENUM_DECL(qemuDiskAIO)
+VIR_ENUM_IMPL(qemuDiskAIO, VIR_DOMAIN_DISK_AIO_LAST,
+ "default",
+ "native",
+ "threads");
+
VIR_ENUM_DECL(qemuVideo)
VIR_ENUM_IMPL(qemuVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
@@ -1137,6 +1143,8 @@ static unsigned int qemudComputeCmdFlags(const char *help,
flags |= QEMUD_CMD_FLAG_DRIVE_CACHE_V2;
if (strstr(help, "format="))
flags |= QEMUD_CMD_FLAG_DRIVE_FORMAT;
+ if (strstr(help, "aio=threads|native"))
+ flags |= QEMUD_CMD_FLAG_DRIVE_AIO;
}
if (strstr(help, "-vga") && !strstr(help, "-std-vga"))
flags |= QEMUD_CMD_FLAG_VGA;
@@ -2340,6 +2348,12 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
virBufferAddLit(&opt, ",cache=off");
}
+ if (disk->aiomode && (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_AIO)) {
+ const char * mode = qemuDiskAIOTypeToString(disk->aiomode);
+
+ virBufferVSprintf(&opt, ",aio=%s", mode);
+ }
+
if (virBufferError(&opt)) {
virReportOOMError(NULL);
goto error;
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 101f187..780ae6e 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -82,6 +82,8 @@ enum qemud_cmd_flags {
QEMUD_CMD_FLAG_SDL = (1 << 27), /* Is the new -sdl arg available */
QEMUD_CMD_FLAG_SMP_TOPOLOGY = (1 << 28), /* Is sockets=s,cores=c,threads=t available for -smp? */
QEMUD_CMD_FLAG_NETDEV = (1 << 29), /* The -netdev flag & netdev_add/remove monitor commands */
+
+ QEMUD_CMD_FLAG_DRIVE_AIO = (1 << 30), /* Is -drive aio= avail */
};
/* Main driver state */
--
1.7.0.4
13 years, 10 months
[libvirt] [PATCH] Support <ipv[46]routing> network parameters
by Paweł Krześniak
Support for optional parameters <ipv[46]routing> in XML network definition.
These parameters allows to set up alternative binary or script to be run
during network start. Such customization allows to run additional services
for started network (besides default DHCP/DNS/NDP) or modify/pass additional
options to dnsmasq and/or radvd.
If <ipv[46]routing> parameters point to default /usr/sbin/dnsmasq or
/usr/sbin/radvd
they are removed from XML network definition.
---
docs/schemas/network.rng | 28 +++++++++++++++
src/conf/network_conf.c | 37 ++++++++++++++++++++
src/conf/network_conf.h | 5 +++
src/network/bridge_driver.c | 8 ++--
.../networkxml2xmlin/with-ipv4routing-network.xml | 11 ++++++
.../networkxml2xmlout/with-ipv4routing-network.xml | 11 ++++++
tests/networkxml2xmltest.c | 1 +
7 files changed, 97 insertions(+), 4 deletions(-)
diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng
index 4252f30..71234a3 100644
--- a/docs/schemas/network.rng
+++ b/docs/schemas/network.rng
@@ -21,6 +21,16 @@
<element name="uuid"><text/></element>
</optional>
+ <!-- <ipv4routing> element -->
+ <optional>
+ <ref name="ipv4routing"/>
+ </optional>
+
+ <!-- <ipv6routing> element -->
+ <optional>
+ <ref name="ipv6routing"/>
+ </optional>
+
<!-- <bridge> element -->
<optional>
<!-- The name of the network to be set up; this will back
@@ -175,4 +185,22 @@
</data>
</define>
+ <!-- ipv4routing and ipv6routing description is a path to the binary -->
+ <define name="ipv4routing">
+ <element name="ipv4routing">
+ <ref name="absFilePath"/>
+ </element>
+ </define>
+
+ <define name="ipv6routing">
+ <element name="ipv6routing">
+ <ref name="absFilePath"/>
+ </element>
+ </define>
+
+ <define name="absFilePath">
+ <data type="string">
+ <param name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]+</param>
+ </data>
+ </define>
</grammar>
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 420b94a..b70397f 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -115,6 +115,8 @@ void virNetworkDefFree(virNetworkDefPtr def)
VIR_FREE(def->bridge);
VIR_FREE(def->forwardDev);
VIR_FREE(def->domain);
+ VIR_FREE(def->ipv4routing);
+ VIR_FREE(def->ipv6routing);
for (ii = 0 ; ii < def->nips && def->ips ; ii++) {
virNetworkIpDefClear(&def->ips[ii]);
@@ -612,6 +614,36 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
VIR_FREE(tmp);
}
+ /* Extract path to ipv4routing binary */
+ def->ipv4routing = virXPathString("string(./ipv4routing[1])", ctxt);
+ if (def->ipv4routing) {
+ if (access(def->ipv4routing, X_OK) < 0) {
+ virNetworkReportError(VIR_ERR_INTERNAL_ERROR, _("Cannot
find IPv4Routing binary %s"), def->ipv4routing);
+ goto error;
+ }
+ } else {
+ def->ipv4routing = strdup(DNSMASQ);
+ if (!def->ipv4routing) {
+ virReportOOMError();
+ goto error;
+ }
+ }
+
+ /* Extract path to ipv6routing binary */
+ def->ipv6routing = virXPathString("string(./ipv6routing[1])", ctxt);
+ if (def->ipv6routing) {
+ if (access(def->ipv6routing, X_OK) < 0) {
+ virNetworkReportError(VIR_ERR_INTERNAL_ERROR, _("Cannot
find IPv6Routing binary %s"), def->ipv6routing);
+ goto error;
+ }
+ } else {
+ def->ipv6routing = strdup(RADVD);
+ if (!def->ipv6routing) {
+ virReportOOMError();
+ goto error;
+ }
+ }
+
/* Parse network domain information */
def->domain = virXPathString("string(./domain[1]/@name)", ctxt);
@@ -831,6 +863,11 @@ char *virNetworkDefFormat(const virNetworkDefPtr def)
virUUIDFormat(uuid, uuidstr);
virBufferVSprintf(&buf, " <uuid>%s</uuid>\n", uuidstr);
+ if (def->ipv4routing && STRNEQ(def->ipv4routing, DNSMASQ))
+ virBufferEscapeString(&buf, "
<ipv4routing>%s</ipv4routing>\n", def->ipv4routing);
+ if (def->ipv6routing && STRNEQ(def->ipv6routing, RADVD))
+ virBufferEscapeString(&buf, "
<ipv6routing>%s</ipv6routing>\n", def->ipv6routing);
+
if (def->forwardType != VIR_NETWORK_FORWARD_NONE) {
const char *mode = virNetworkForwardTypeToString(def->forwardType);
if (mode) {
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index fd96c36..8df600c 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -98,6 +98,11 @@ struct _virNetworkDef {
size_t nips;
virNetworkIpDefPtr ips; /* ptr to array of IP addresses on this network */
+
+ char *ipv4routing; /* path to binary for configuring IPv4
network (DNS/DHCP).
+ Defaults to DNSMASQ */
+ char *ipv6routing; /* path to binary for configuring IPv6 network.
+ Defaults to RADVD */
};
typedef struct _virNetworkObj virNetworkObj;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 7d43ef5..444cbdc 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -177,7 +177,7 @@ networkFindActiveConfigs(struct network_driver *driver) {
virReportOOMError();
goto cleanup;
}
- if (virFileLinkPointsTo(pidpath, DNSMASQ) == 0)
+ if (virFileLinkPointsTo(pidpath,
obj->def->ipv4routing) == 0)
obj->dnsmasqPid = -1;
VIR_FREE(pidpath);
}
@@ -196,7 +196,7 @@ networkFindActiveConfigs(struct network_driver *driver) {
VIR_FREE(radvdpidbase);
goto cleanup;
}
- if (virFileLinkPointsTo(pidpath, RADVD) == 0)
+ if (virFileLinkPointsTo(pidpath,
obj->def->ipv6routing) == 0)
obj->radvdPid = -1;
VIR_FREE(pidpath);
}
@@ -596,7 +596,7 @@ networkStartDhcpDaemon(virNetworkObjPtr network)
goto cleanup;
}
- cmd = virCommandNew(DNSMASQ);
+ cmd = virCommandNew(network->def->ipv4routing);
if (networkBuildDnsmasqArgv(network, ipdef, pidfile, cmd) < 0) {
goto cleanup;
}
@@ -727,7 +727,7 @@ networkStartRadvd(virNetworkObjPtr network)
* its own pidfile, so we just let it do so, with a slightly
* different name. Unused, but harmless.
*/
- cmd = virCommandNewArgList(RADVD, "--debug", "1",
+ cmd = virCommandNewArgList(network->def->ipv6routing, "--debug", "1",
"--config", configfile,
"--pidfile", NULL);
virCommandAddArgFormat(cmd, "%s-bin", pidfile);
diff --git a/tests/networkxml2xmlin/with-ipv4routing-network.xml
b/tests/networkxml2xmlin/with-ipv4routing-network.xml
new file mode 100644
index 0000000..1cf3aa4
--- /dev/null
+++ b/tests/networkxml2xmlin/with-ipv4routing-network.xml
@@ -0,0 +1,11 @@
+<network>
+ <name>private</name>
+ <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
+ <ipv4routing>/usr/local/bin/my-dnsmasq</ipv4routing>
+ <bridge name="virbr2" />
+ <ip address="192.168.152.1" netmask="255.255.255.0">
+ <dhcp>
+ <range start="192.168.152.2" end="192.168.152.254" />
+ </dhcp>
+ </ip>
+</network>
diff --git a/tests/networkxml2xmlout/with-ipv4routing-network.xml
b/tests/networkxml2xmlout/with-ipv4routing-network.xml
new file mode 100644
index 0000000..d649d78
--- /dev/null
+++ b/tests/networkxml2xmlout/with-ipv4routing-network.xml
@@ -0,0 +1,11 @@
+<network>
+ <name>private</name>
+ <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
+ <ipv4routing>/usr/local/bin/my-dnsmasq</ipv4routing>
+ <bridge name='virbr2' stp='on' delay='0' />
+ <ip address='192.168.152.1' netmask='255.255.255.0'>
+ <dhcp>
+ <range start='192.168.152.2' end='192.168.152.254' />
+ </dhcp>
+ </ip>
+</network>
diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c
index 7805548..86e3c81 100644
--- a/tests/networkxml2xmltest.c
+++ b/tests/networkxml2xmltest.c
@@ -90,6 +90,7 @@ mymain(int argc, char **argv)
DO_TEST("nat-network");
DO_TEST("netboot-network");
DO_TEST("netboot-proxy-network");
+ DO_TEST("with-ipv4routing-network");
return (ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
13 years, 10 months
[libvirt] [PATCH] bridge: Fix uninitialized variable
by Jiri Denemark
---
Pushed under the build-breaker rule.
src/util/bridge.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/util/bridge.c b/src/util/bridge.c
index dcd3f39..81a043c 100644
--- a/src/util/bridge.c
+++ b/src/util/bridge.c
@@ -676,7 +676,7 @@ brAddInetAddress(brControl *ctl ATTRIBUTE_UNUSED,
virSocketAddr *addr,
unsigned int prefix)
{
- virCommandPtr cmd;
+ virCommandPtr cmd = NULL;
char *addrstr;
int ret = -1;
@@ -715,7 +715,7 @@ brDelInetAddress(brControl *ctl ATTRIBUTE_UNUSED,
virSocketAddr *addr,
unsigned int prefix)
{
- virCommandPtr cmd;
+ virCommandPtr cmd = NULL;
char *addrstr;
int ret = -1;
--
1.7.3.4
13 years, 10 months
[libvirt] [PATCH] docs: Add additional indentation to level 3 menu items
by Matthias Bolte
formatnetwork.html has a menu item at level 3. libvirt.css
doesn't have a explicit rule for level 3 and level 3 and
level 2 items end up at the same indentation level.
Add an additional 1em indentation to level 3 menu items.
---
docs/libvirt.css | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/docs/libvirt.css b/docs/libvirt.css
index dfc93c6..049e332 100644
--- a/docs/libvirt.css
+++ b/docs/libvirt.css
@@ -106,6 +106,11 @@ h2, h3, h4, h5, h6 {
border-left: 8px solid #c5dbd8;
}
+#menu ul.l3 li .inactive,
+#menu ul.l3 li .active {
+ padding-left: 3em;
+}
+
#headerLogo {
position: absolute;
--
1.7.0.4
13 years, 10 months
[libvirt] virsh help keywords vs. command prefixes
by Paul Jenner
Hi all.
>From a quick play with virsh from the 0.8.7 pre-release, as an end user
I wonder if it may be more intuitive for the new help keywords to match
the virsh command prefixes where they exist. For example "help nwfilter"
would tell me about nwfilter- commands. Some keywords follow the prefix
convention (nodedev, secret, snapshot, pool) but some do not (interface
vs. iface-, filter vs nwfilter-, network vs. net-, volume vs. vol-).
Minor observation and close to release but I thought I would send on
feedback to see what people thought.
Paul
13 years, 10 months
[libvirt] virsh + ssh
by Daniel Huhardeaux
Hi,
connecting to a remote server using qemu+ssh is always done with root
user. The problem we face is that we don't allow root connection for ssh.
Would it be possible to launch sudo on the remote server so we could
connect with the console user?
Regards
--
Daniel
13 years, 10 months