[libvirt] [PATCH 0/4] Fix issues with guest lifecycle event action settings
by John Ferlan
https://bugzilla.redhat.com/show_bug.cgi?id=916052
Domain lifecycle events "on_reboot" and "on_poweroff" translate into QEMU
command options "no-reboot" and "no-shutdown" at startup time. The existing
code only checked the "on_reboot" setting to determine whether to add the
"no-reboot" option even though "on_poweroff" could have been set to allow
reboot. Changed the logic to only use "no-reboot" if each of the lifecycle
event actions was "destroy". I considered adding "preserve" as well; however,
a future preserve action might be able to cull something from a qemu process
that doesn't just exit immediately. NB, previously it was possible to have
both QEMU command options on the command line, which while not tagged as
an error could be considered "odd".
During the shutdown or reboot domain operations, the calls to qemuAgentShutdown
and qemuDomainSetFakeReboot did not consider the possibility that the event
action for shutdown was reboot or the event action for reboot was destroy.
This patch fixes that. NB, I wasn't sure how I could "convey" that to the
user though. The virsh reboot will still issue the message "Domain is being
rebooted" even though it could be destroyed. Like was virsh shutdown will
still issue the message "Domain is being shutdown" even though it is being
rebooted. The usage of VIR_INFO was an attempt to do that even though one
would have to have the correct debug level set.
Adjusted the documentation in order to describe the possible actions based
on the event lifecycle action settings of the domain.
John Ferlan (4):
Adjust usage of qemu -no-reboot and -no-shutdown options
Adjust comments to describe on_poweroff and on_reboot action
Handle the domain event 'on_reboot' and 'on_poweroff' settings
docs: Update formatdomain for lifecycle events
docs/formatdomain.html.in | 30 ++++++++++++++++++++++--------
src/libvirt.c | 15 +++++++++++----
src/qemu/qemu_command.c | 17 +++++++++++++----
src/qemu/qemu_driver.c | 26 ++++++++++++++++++++++----
4 files changed, 68 insertions(+), 20 deletions(-)
--
1.8.1.4
11 years, 6 months
[libvirt] [PATCH] Update to COPYING.LIB to latest LGPLv2.1 copy
by Christophe Fergeau
The text version
of LGPLv2.1 available at
http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt is slightly
different from COPYING.LIB:
- several paragraphs were rewrapped
- the FSF address has changed, so the license has been changed to
indicate the newer address
I've checked that there are no changes in the license text apart from
the updated address, which is what I want to fix with this commit.
---
COPYING.LIB | 82 ++++++++++++++++++++++++++++---------------------------------
1 file changed, 38 insertions(+), 44 deletions(-)
diff --git a/COPYING.LIB b/COPYING.LIB
index 89d4489..4362b49 100644
--- a/COPYING.LIB
+++ b/COPYING.LIB
@@ -1,9 +1,8 @@
-
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -23,8 +22,7 @@ specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations
-below.
+strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
@@ -57,7 +55,7 @@ modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
-^L
+
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
@@ -89,9 +87,9 @@ libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes a de-facto standard. To achieve this, non-free programs must
-be allowed to use the library. A more frequent case is that a free
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
@@ -113,7 +111,7 @@ modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
-^L
+
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@@ -138,8 +136,8 @@ included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation and installation of the library.
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
@@ -218,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
-^L
+
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
@@ -269,7 +267,7 @@ Library will still fall under Section 6.)
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
-^L
+
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
@@ -305,10 +303,10 @@ of these things:
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
- c) Accompany the work with a written offer, valid for at least
- three years, to give the same user the materials specified in
- Subsection 6a, above, for a charge no more than the cost of
- performing this distribution.
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
@@ -331,7 +329,7 @@ restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
-^L
+
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
@@ -372,7 +370,7 @@ subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
-^L
+
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
@@ -386,10 +384,9 @@ all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply, and the section as a whole is intended to apply in other
-circumstances.
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
@@ -407,11 +404,11 @@ be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License
-may add an explicit geographical distribution limitation excluding those
-countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
@@ -425,7 +422,7 @@ conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
-^L
+
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
@@ -459,21 +456,19 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
-^L
+
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
- To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
@@ -490,17 +485,16 @@ notice is found.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
-You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the library,
-if necessary. Here is a sample; alter the names:
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James
- Random Hacker.
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
--
1.8.1.4
11 years, 6 months
[libvirt] [PATCHv3] Configure native vlan modes on Open vSwitch ports
by james robson
This patch adds functionality to allow libvirt to configure the
'native-tagged' and 'native-untagged' modes on openvswitch networks.
v2 changes:
Fix problems reported by Eric Blake
v3 changes:
Re work patch to address review comments
---
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 888c005..5278534 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3290,6 +3290,13 @@ qemu-kvm -net nic,model=? /dev/null
<parameters
interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
</virtualport>
</interface>
+ <interface type='bridge'>
+ <b><vlan trunk='yes'></b>
+ <b><tag id='42'/></b>
+ <b><tag id='123' nativeMode='untagged'/></b>
+ <b></vlan></b>
+ ...
+ </interface>
<devices>
...</pre>
@@ -3316,6 +3323,15 @@ qemu-kvm -net nic,model=? /dev/null
vlan element.
</p>
+ <p>
+ For network connections using openvswitch it is possible to
+ configure the 'native-tagged' and 'native-untagged' vlan modes
+ <span class="since">(Since 1.0.6).</span> This uses the optional
+ <code>nativeMode</code> attribute on the <code><tag></code>
+ element: <code>nativeMode</code> may be set to 'tagged' or
+ 'untagged'. The id atribute of the element sets the native vlan.
+ </p>
+
<h5><a name="elementLink">Modifying virtual link state</a></h5>
<pre>
...
diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in
index 4dd0415..e065ca4 100644
--- a/docs/formatnetwork.html.in
+++ b/docs/formatnetwork.html.in
@@ -414,6 +414,7 @@
<span class="since">Since 0.9.4</span>
</p>
+
<h5><a name="elementVlanTag">Setting VLAN tag (on supported network
types only)</a></h5>
<pre>
@@ -429,6 +430,13 @@
<parameters
interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
</virtualport>
</interface>
+ <interface type='bridge'>
+ <b><vlan trunk='yes'></b>
+ <b><tag id='42'/></b>
+ <b><tag id='123' nativeMode='untagged'/></b>
+ <b></vlan></b>
+ ...
+ </interface>
<devices>
...</pre>
@@ -452,6 +460,14 @@
be added to the vlan element.
</p>
<p>
+ For network connections using openvswitch it is possible to
+ configure the 'native-tagged' and 'native-untagged' vlan modes
+ <span class="since">(Since 1.0.6).</span> This uses the optional
+ <code>nativeMode</code> attribute on the <code><tag></code>
+ element: <code>nativeMode</code> may be set to 'tagged' or
+ 'untagged'. The id atribute of the element sets the native vlan.
+ </p>
+ <p>
<code><vlan></code> elements can also be specified in
a <code><portgroup></code> element, as well as directly in
a domain's <code><interface></code> element. In the case
diff --git a/docs/schemas/networkcommon.rng
b/docs/schemas/networkcommon.rng
index 51ff759..e60f1fc 100644
--- a/docs/schemas/networkcommon.rng
+++ b/docs/schemas/networkcommon.rng
@@ -204,6 +204,14 @@
<param name="maxInclusive">4095</param>
</data>
</attribute>
+ <optional>
+ <attribute name="nativeMode">
+ <choice>
+ <value>tagged</value>
+ <value>untagged</value>
+ </choice>
+ </attribute>
+ </optional>
<empty/>
</element>
</oneOrMore>
diff --git a/src/conf/netdev_vlan_conf.c b/src/conf/netdev_vlan_conf.c
index 13ba8c6..dd5b64e 100644
--- a/src/conf/netdev_vlan_conf.c
+++ b/src/conf/netdev_vlan_conf.c
@@ -17,6 +17,7 @@
*
* Authors:
* Laine Stump <laine(a)redhat.com>
+ * James Robson <jrobson(a)websense.com>
*/
#include <config.h>
@@ -33,6 +34,7 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr
ctxt, virNetDevVlanPtr de
int ret = -1;
xmlNodePtr save = ctxt->node;
const char *trunk = NULL;
+ const char *nativeMode = NULL;
xmlNodePtr *tagNodes = NULL;
int nTags, ii;
@@ -54,6 +56,8 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr
ctxt, virNetDevVlanPtr de
goto error;
}
+ def->nativeMode = 0;
+ def->nativeTag = 0;
for (ii = 0; ii < nTags; ii++) {
unsigned long id;
@@ -68,6 +72,21 @@ virNetDevVlanParse(xmlNodePtr node,
xmlXPathContextPtr ctxt, virNetDevVlanPtr de
_("vlan tag id %lu too large (maximum
4095)"), id);
goto error;
}
+ if ((nativeMode = virXPathString("string(./@nativeMode)",
ctxt)) != NULL) {
+ if (STRCASENEQ(nativeMode, "tagged") &&
STRCASENEQ(nativeMode, "untagged")) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("invalid \"nativeMode='%s'\" in <tag>
- "
+ "native_mode must be 'tagged' or
'untagged'"), nativeMode);
+ goto error;
+ }
+ if (def->nativeMode != 0) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("duplicate native vlan setting"));
+ goto error;
+ }
+ def->nativeMode = STRCASEEQ(nativeMode, "tagged") ? 1 : 2;
+ def->nativeTag = id;
+ }
def->tag[ii] = id;
}
@@ -89,6 +108,12 @@ virNetDevVlanParse(xmlNodePtr node,
xmlXPathContextPtr ctxt, virNetDevVlanPtr de
"is required for more than one vlan
tag"), trunk);
goto error;
}
+ if (def->nativeMode != 0) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("invalid configuration in <vlan> -
\"trunk='no'\" is "
+ "not allowed with a native vlan id"));
+ goto error;
+ }
/* allow (but discard) "trunk='no' if there is a single tag
*/
if (STRCASENEQ(trunk, "no")) {
virReportError(VIR_ERR_XML_ERROR,
@@ -125,7 +150,11 @@ virNetDevVlanFormat(virNetDevVlanPtr def,
virBufferPtr buf)
virBufferAsprintf(buf, "<vlan%s>\n", def->trunk ? " trunk='yes'" :
"");
for (ii = 0; ii < def->nTags; ii++) {
- virBufferAsprintf(buf, " <tag id='%u'/>\n", def->tag[ii]);
+ if (def->nativeTag == def->tag[ii]) {
+ virBufferAsprintf(buf, " <tag id='%u' nativeMode='%
s'/>\n", def->tag[ii], def->nativeMode == 1 ? "tagged" : "untagged");
+ } else {
+ virBufferAsprintf(buf, " <tag id='%u'/>\n", def->tag[ii]);
+ }
}
virBufferAddLit(buf, "</vlan>\n");
return 0;
diff --git a/src/util/virnetdevopenvswitch.c
b/src/util/virnetdevopenvswitch.c
index 4fe077a..69cc1ac 100644
--- a/src/util/virnetdevopenvswitch.c
+++ b/src/util/virnetdevopenvswitch.c
@@ -19,6 +19,7 @@
* Dan Wendlandt <dan(a)nicira.com>
* Kyle Mestery <kmestery(a)cisco.com>
* Ansis Atteka <aatteka(a)nicira.com>
+ * James Robson <jrobson(a)websense.com>
*/
#include <config.h>
@@ -108,8 +109,13 @@ int virNetDevOpenvswitchAddPort(const char *brname,
const char *ifname,
virCommandAddArgList(cmd, "--timeout=5", "--", "--may-exist",
"add-port",
brname, ifname, NULL);
- if (virBufferUse(&buf) != 0)
+ if (virBufferUse(&buf) != 0) {
+ if (virtVlan->nativeMode > 0) {
+ virCommandAddArgFormat(cmd, "vlan_mode=%s",
virtVlan->nativeMode == 1 ? "native-tagged" : "native-untagged");
+ virCommandAddArgFormat(cmd, "tag=%d", virtVlan->nativeTag);
+ }
virCommandAddArgList(cmd, virBufferCurrentContent(&buf), NULL);
+ }
if (ovsport->profileID[0] == '\0') {
virCommandAddArgList(cmd,
diff --git a/src/util/virnetdevvlan.c b/src/util/virnetdevvlan.c
index 2fe2017..b81c037 100644
--- a/src/util/virnetdevvlan.c
+++ b/src/util/virnetdevvlan.c
@@ -17,6 +17,7 @@
*
* Authors:
* Laine Stump <laine(a)redhat.com>
+ * James Robson <jrobson(a)websense.com>
*/
#include <config.h>
@@ -33,6 +34,8 @@ virNetDevVlanClear(virNetDevVlanPtr vlan)
{
VIR_FREE(vlan->tag);
vlan->nTags = 0;
+ vlan->nativeMode = 0;
+ vlan->nativeTag = 0;
}
void
@@ -54,7 +57,9 @@ virNetDevVlanEqual(const virNetDevVlanPtr a, const
virNetDevVlanPtr b)
return false;
if (a->trunk != b->trunk ||
- a->nTags != b->nTags) {
+ a->nTags != b->nTags ||
+ a->nativeMode != b->nativeMode ||
+ a->nativeTag != b->nativeTag) {
return false;
}
@@ -89,6 +94,8 @@ virNetDevVlanCopy(virNetDevVlanPtr dst, const
virNetDevVlanPtr src)
dst->trunk = src->trunk;
dst->nTags = src->nTags;
+ dst->nativeMode = src->nativeMode;
+ dst->nativeTag = src->nativeTag;
memcpy(dst->tag, src->tag, src->nTags * sizeof(*src->tag));
return 0;
}
diff --git a/src/util/virnetdevvlan.h b/src/util/virnetdevvlan.h
index c6b16ef..93426cc 100644
--- a/src/util/virnetdevvlan.h
+++ b/src/util/virnetdevvlan.h
@@ -17,6 +17,7 @@
*
* Authors:
* Laine Stump <laine(a)redhat.com>
+ * James Robson <jrobson(a)websense.com>
*/
#ifndef __VIR_NETDEV_VLAN_H__
@@ -28,6 +29,8 @@ struct _virNetDevVlan {
bool trunk; /* true if this is a trunk */
int nTags; /* number of tags in array */
unsigned int *tag; /* pointer to array of tags */
+ short int nativeMode; /* 0=off, 1=tagged, 2=untagged */
+ unsigned int nativeTag;
};
void virNetDevVlanClear(virNetDevVlanPtr vlan);
diff --git a/tests/networkxml2xmlin/openvswitch-net.xml
b/tests/networkxml2xmlin/openvswitch-net.xml
index a3d82b1..2f6084d 100644
--- a/tests/networkxml2xmlin/openvswitch-net.xml
+++ b/tests/networkxml2xmlin/openvswitch-net.xml
@@ -21,4 +21,13 @@
<parameters profileid='alice-profile'/>
</virtualport>
</portgroup>
+ <portgroup name='native'>
+ <vlan trunk='yes'>
+ <tag id='123' nativeMode='tagged'/>
+ <tag id='444'/>
+ </vlan>
+ <virtualport>
+ <parameters profileid='native-profile'/>
+ </virtualport>
+ </portgroup>
</network>
diff --git a/tests/networkxml2xmlout/openvswitch-net.xml
b/tests/networkxml2xmlout/openvswitch-net.xml
index a3d82b1..2f6084d 100644
--- a/tests/networkxml2xmlout/openvswitch-net.xml
+++ b/tests/networkxml2xmlout/openvswitch-net.xml
@@ -21,4 +21,13 @@
<parameters profileid='alice-profile'/>
</virtualport>
</portgroup>
+ <portgroup name='native'>
+ <vlan trunk='yes'>
+ <tag id='123' nativeMode='tagged'/>
+ <tag id='444'/>
+ </vlan>
+ <virtualport>
+ <parameters profileid='native-profile'/>
+ </virtualport>
+ </portgroup>
</network>
Protected by Websense Hosted Email Security -- www.websense.com
11 years, 6 months
[libvirt] [libvirt-designer PATCHv2 0/9] Handle more devices in GVirDesignerDomain
by Christophe Fergeau
This goes on top of v2 of the "Improve disk bus type generation" series.
Diff with the previous version is that it's rebased against latest master,
and I've reworked "Implement gvir_designer_domain_add_sound()" patch to
address danpb's comments (gvir_designer_domain_add_sound() is now a public
method that must be called explicitly rather than being implicitly called on
domain creation.
Christophe
11 years, 6 months
[libvirt] [PATCH] build: mark conditionally unused variables
by Eric Blake
These fixes solve a compilation failure on FreeBSD:
util/virnetdevtap.c: In function 'virNetDevTapGetName':
util/virnetdevtap.c:56: warning: unused parameter 'tapfd' [-Wunused-parameter]
util/virnetdevtap.c:56: warning: unused parameter 'ifname' [-Wunused-parameter]
* src/util/virnetdevtap.c (virNetDevTapGetName): Add attributes
when TUNGETIFF is not present.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
Pushing under the build-breaker rule.
src/util/virnetdevtap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
index fac95ec..7d77f81 100644
--- a/src/util/virnetdevtap.c
+++ b/src/util/virnetdevtap.c
@@ -53,7 +53,7 @@
* Returns 0 if the interface name is successfully queried, -1 otherwise
*/
int
-virNetDevTapGetName(int tapfd, char **ifname)
+virNetDevTapGetName(int tapfd ATTRIBUTE_UNUSED, char **ifname ATTRIBUTE_UNUSED)
{
#ifdef TUNGETIFF
struct ifreq ifr;
--
1.8.1.4
11 years, 6 months
[libvirt] [PATCH 0/4] prepare for qemu 1.5 command-line probing via QMP
by Eric Blake
This series sets up the groundwork to make it easy to add a
capability bit in qemu_capabilities based on whether a particular
qemu command-line option has a given parameter. Future patches,
such as Osier's work to use '-machine mem-merge' when it exists,
will benefit from this new probing ability.
Since this missed rc1 freeze, I'm a bit reluctant to include it
in libvirt 1.0.5 without a client that actually needs it.
Hmm, in writing up this cover letter, I think I should work on a
patch 5/4 that enhances qemu_capabilities to make it easy to
search for a given option and capability whether parsing -help
output (hello RHEL qemu) or using QMP (upstream).
Eric Blake (4):
json: support removing a value from an object
qemu: use bool in monitor struct
qemu: simplify string cleanup
qemu: query command line options in QMP
src/libvirt_private.syms | 1 +
src/qemu/qemu_domain.c | 7 +-
src/qemu/qemu_domain.h | 2 +-
src/qemu/qemu_monitor.c | 59 ++++++++++++---
src/qemu/qemu_monitor.h | 13 +++-
src/qemu/qemu_monitor_json.c | 174 +++++++++++++++++++++++++++++++++++--------
src/qemu/qemu_monitor_json.h | 4 +
src/qemu/qemu_process.c | 8 +-
src/util/virjson.c | 34 ++++++++-
src/util/virjson.h | 9 ++-
tests/jsontest.c | 83 ++++++++++++++++++++-
tests/qemumonitorjsontest.c | 103 +++++++++++++++++++++++++
tests/qemumonitortestutils.c | 2 +-
13 files changed, 437 insertions(+), 62 deletions(-)
--
1.8.1.4
11 years, 6 months
[libvirt] [PATCH 0/4] Extra validation for the <sysinfo> section
by John Ferlan
Not necessary for 1.0.5, but figured I'd put it out there now.
https://bugzilla.redhat.com/show_bug.cgi?id=890494
The <sysinfo> section needs an extra uuid validation check. The current
check compares the numerical sysinfo/system_uuid with the domain uuid;
however, it's possible that someone added extra hyphens into the sysinfo
uuid which results in the inability to start the domain (at least qemu).
The bug report indicates the 'date' field should at least be syntax checked
based on what's desribed in the SMBIOS spec. From the spec:
"String number of the BIOS release date. The date string, if supplied, is
in either mm/dd/yy or mm/dd/yyyy format. If the year portion of the string
is two digits, the year is assumed to be 19yy.
NOTE: The mm/dd/yyyy format is required for SMBIOS version 2.3 and later"
John Ferlan (4):
docs: Fix syntax in sysinfo description
docs: Update description of SMBIOS fields
Validate the bios_date format for <sysinfo>
Need better validation of <sysinfo> uuid
docs/formatdomain.html.in | 51 ++++++++++++++++++++++++++++++++++++++---------
src/conf/domain_conf.c | 47 +++++++++++++++++++++++++++++++++++++++----
2 files changed, 85 insertions(+), 13 deletions(-)
--
1.8.1.4
11 years, 6 months
[libvirt] [PATCH v2 0/2] Support for VNC WebSocket
by Martin Kletzander
This series, which is meant to be applied _after_ 1.0.5 release, is
adding support for the VNC WebSocket to be configured for QEMU.
Documentation from qemu_options.hx:
qemu -vnc ...,websocket[=<port>]
Opens an additional TCP listening port dedicated to VNC Websocket connections.
By definition the Websocket port is 5700+@var{display}. If @var{host} is
specified connections will only be allowed from this host.
As an alternative the Websocket port could be specified by using
@code{websocket}=@var{port}.
v2:
- Incorporated recommendations from RFC [1]
[1] http://www.redhat.com/archives/libvir-list/2013-April/msg02056.html
Martin Kletzander (2):
Add VNC WebSocket support
qemu: Add VNC WebSocket support
docs/formatdomain.html.in | 5 ++++
docs/schemas/domaincommon.rng | 5 ++++
src/conf/domain_conf.c | 16 ++++++++++
src/conf/domain_conf.h | 1 +
src/qemu/libvirtd_qemu.aug | 2 ++
src/qemu/qemu.conf | 7 +++++
src/qemu/qemu_capabilities.c | 11 +++++--
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 60 ++++++++++++++++++++++++++++++++++++--
src/qemu/qemu_command.h | 5 +++-
src/qemu/qemu_conf.c | 32 ++++++++++++++++++++
src/qemu/qemu_conf.h | 6 ++++
src/qemu/qemu_driver.c | 5 ++++
src/qemu/qemu_process.c | 31 ++++++++++++++++----
src/qemu/test_libvirtd_qemu.aug.in | 2 ++
tests/qemuargv2xmltest.c | 1 +
tests/qemuxml2argvtest.c | 1 +
tests/qemuxml2xmltest.c | 1 +
18 files changed, 180 insertions(+), 12 deletions(-)
--
1.8.2.1
11 years, 6 months
[libvirt] LXC: user namespaces
by Richard RW. Weinberger
Hi!
We'd like to use libvirt for managing our lxc machines.
Currently libvirt lacks of user namespace support.
Is anyone working on that? Otherwise David and I will implement it
and send patches very soon.
Thanks,
//richard
11 years, 6 months
[libvirt] [libvirt-java] [PATCH] Fix wrapping of native size_t data type
by Claudio Bley
Libvirt function parameters having type (pointer to) size_t were
wrapped via JNA using int, long or even NativeLong. Alas, none of
these is actually correct as the size of size_t may be the same as the
size of either (unsigned) int, long or even long long on different
platforms.
JNA provides the size of a native size_t to us, so using this
information we define and use class SizeT and class SizeTByReference for
wrapping a native size_t and size_t*, respectively.
Signed-off-by: Claudio Bley <cbley(a)av-test.de>
---
src/main/java/org/libvirt/Domain.java | 5 ++--
src/main/java/org/libvirt/Secret.java | 10 ++++----
src/main/java/org/libvirt/Stream.java | 7 +++--
src/main/java/org/libvirt/jna/Libvirt.java | 14 +++++-----
src/main/java/org/libvirt/jna/SizeT.java | 25 ++++++++++++++++++
.../java/org/libvirt/jna/SizeTByReference.java | 27 ++++++++++++++++++++
6 files changed, 70 insertions(+), 18 deletions(-)
create mode 100644 src/main/java/org/libvirt/jna/SizeT.java
create mode 100644 src/main/java/org/libvirt/jna/SizeTByReference.java
diff --git a/src/main/java/org/libvirt/Domain.java b/src/main/java/org/libvirt/Domain.java
index a72e8c6..efac9b9 100644
--- a/src/main/java/org/libvirt/Domain.java
+++ b/src/main/java/org/libvirt/Domain.java
@@ -3,6 +3,7 @@ package org.libvirt;
import org.libvirt.jna.DomainPointer;
import org.libvirt.jna.DomainSnapshotPointer;
import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.SizeT;
import org.libvirt.jna.virDomainBlockInfo;
import org.libvirt.jna.virDomainBlockStats;
import org.libvirt.jna.virDomainInfo;
@@ -234,7 +235,7 @@ public class Domain {
*/
public DomainBlockStats blockStats(String path) throws LibvirtException {
virDomainBlockStats stats = new virDomainBlockStats();
- int success = libvirt.virDomainBlockStats(VDP, path, stats, stats.size());
+ int success = libvirt.virDomainBlockStats(VDP, path, stats, new SizeT(stats.size()));
processError();
return success == 0 ? new DomainBlockStats(stats) : null;
}
@@ -695,7 +696,7 @@ public class Domain {
*/
public DomainInterfaceStats interfaceStats(String path) throws LibvirtException {
virDomainInterfaceStats stats = new virDomainInterfaceStats();
- libvirt.virDomainInterfaceStats(VDP, path, stats, stats.size());
+ libvirt.virDomainInterfaceStats(VDP, path, stats, new SizeT(stats.size()));
processError();
return new DomainInterfaceStats(stats);
}
diff --git a/src/main/java/org/libvirt/Secret.java b/src/main/java/org/libvirt/Secret.java
index 5332e02..4edb515 100644
--- a/src/main/java/org/libvirt/Secret.java
+++ b/src/main/java/org/libvirt/Secret.java
@@ -2,11 +2,11 @@ package org.libvirt;
import org.libvirt.jna.Libvirt;
import org.libvirt.jna.SecretPointer;
+import org.libvirt.jna.SizeT;
+import org.libvirt.jna.SizeTByReference;
import static org.libvirt.Library.libvirt;
import com.sun.jna.Native;
-import com.sun.jna.NativeLong;
-import com.sun.jna.ptr.LongByReference;
import com.sun.jna.Pointer;
import java.nio.ByteBuffer;
@@ -120,7 +120,7 @@ public class Secret {
* @return the value of the secret, or null on failure.
*/
public byte[] getByteValue() throws LibvirtException {
- LongByReference value_size = new LongByReference();
+ SizeTByReference value_size = new SizeTByReference();
Pointer value = libvirt.virSecretGetValue(VSP, value_size, 0);
processError();
ByteBuffer bb = value.getByteBuffer(0, value_size.getValue());
@@ -154,7 +154,7 @@ public class Secret {
* @return 0 on success, -1 on failure.
*/
public int setValue(String value) throws LibvirtException {
- int returnValue = libvirt.virSecretSetValue(VSP, value, new NativeLong(value.length()), 0);
+ int returnValue = libvirt.virSecretSetValue(VSP, value, new SizeT(value.length()), 0);
processError();
return returnValue;
}
@@ -165,7 +165,7 @@ public class Secret {
* @return 0 on success, -1 on failure.
*/
public int setValue(byte[] value) throws LibvirtException {
- int returnValue = libvirt.virSecretSetValue(VSP, value, new NativeLong(value.length), 0);
+ int returnValue = libvirt.virSecretSetValue(VSP, value, new SizeT(value.length), 0);
processError();
return returnValue;
}
diff --git a/src/main/java/org/libvirt/Stream.java b/src/main/java/org/libvirt/Stream.java
index 84e300c..d852d0d 100644
--- a/src/main/java/org/libvirt/Stream.java
+++ b/src/main/java/org/libvirt/Stream.java
@@ -1,11 +1,10 @@
package org.libvirt;
import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.SizeT;
import org.libvirt.jna.StreamPointer;
import static org.libvirt.Library.libvirt;
-import com.sun.jna.NativeLong;
-
public class Stream {
public static int VIR_STREAM_NONBLOCK = (1 << 0);
@@ -108,7 +107,7 @@ public class Stream {
* @throws LibvirtException
*/
public int receive(byte[] data) throws LibvirtException {
- int returnValue = libvirt.virStreamRecv(VSP, data, new NativeLong(data.length));
+ int returnValue = libvirt.virStreamRecv(VSP, data, new SizeT(data.length));
processError();
return returnValue;
}
@@ -151,7 +150,7 @@ public class Stream {
* @throws LibvirtException
*/
public int send(String data) throws LibvirtException {
- int returnValue = libvirt.virStreamSend(VSP, data, new NativeLong(data.length()));
+ int returnValue = libvirt.virStreamSend(VSP, data, new SizeT(data.length()));
processError();
return returnValue;
}
diff --git a/src/main/java/org/libvirt/jna/Libvirt.java b/src/main/java/org/libvirt/jna/Libvirt.java
index 8c7d6ef..34ef966 100644
--- a/src/main/java/org/libvirt/jna/Libvirt.java
+++ b/src/main/java/org/libvirt/jna/Libvirt.java
@@ -180,7 +180,7 @@ public interface Libvirt extends Library {
int virDomainAbortJob(DomainPointer virDomainPtr);
int virDomainAttachDevice(DomainPointer virDomainPtr, String deviceXML);
int virDomainAttachDeviceFlags(DomainPointer virDomainPtr, String deviceXML, int flags);
- int virDomainBlockStats(DomainPointer virDomainPtr, String path, virDomainBlockStats stats, int size);
+ int virDomainBlockStats(DomainPointer virDomainPtr, String path, virDomainBlockStats stats, SizeT size);
int virDomainBlockResize(DomainPointer virDomainPtr, String disk, long size, int flags);
int virDomainCoreDump(DomainPointer virDomainPtr, String to, int flags);
int virDomainCreate(DomainPointer virDomainPtr);
@@ -210,7 +210,7 @@ public interface Libvirt extends Library {
Pointer virDomainGetXMLDesc(DomainPointer virDomainPtr, int flags);
int virDomainHasCurrentSnapshot(DomainPointer virDomainPtr, int flags);
int virDomainHasManagedSaveImage(DomainPointer virDomainPtr, int flags);
- int virDomainInterfaceStats(DomainPointer virDomainPtr, String path, virDomainInterfaceStats stats, int size);
+ int virDomainInterfaceStats(DomainPointer virDomainPtr, String path, virDomainInterfaceStats stats, SizeT size);
int virDomainIsActive(DomainPointer virDomainPtr);
int virDomainIsPersistent(DomainPointer virDomainPtr);
DomainPointer virDomainLookupByID(ConnectionPointer virConnectPtr, int id);
@@ -351,13 +351,13 @@ public interface Libvirt extends Library {
int virSecretGetUUID(SecretPointer virSecretPtr, byte[] uuidString);
int virSecretGetUUIDString(SecretPointer virSecretPtr, byte[] uuidString);
String virSecretGetUsageID(SecretPointer virSecretPtr);
- Pointer virSecretGetValue(SecretPointer virSecretPtr, LongByReference value_size, int flags);
+ Pointer virSecretGetValue(SecretPointer virSecretPtr, SizeTByReference value_size, int flags);
String virSecretGetXMLDesc(SecretPointer virSecretPtr, int flags);
SecretPointer virSecretLookupByUsage(ConnectionPointer virConnectPtr, int usageType, String usageID);
SecretPointer virSecretLookupByUUID(ConnectionPointer virConnectPtr, byte[] uuidBytes);
SecretPointer virSecretLookupByUUIDString(ConnectionPointer virConnectPtr, String uuidstr);
- int virSecretSetValue(SecretPointer virSecretPtr, String value, NativeLong value_size, int flags);
- int virSecretSetValue(SecretPointer virSecretPtr, byte[] value, NativeLong value_size, int flags);
+ int virSecretSetValue(SecretPointer virSecretPtr, String value, SizeT value_size, int flags);
+ int virSecretSetValue(SecretPointer virSecretPtr, byte[] value, SizeT value_size, int flags);
int virSecretUndefine(SecretPointer virSecretPtr);
//Stream Methods
@@ -369,9 +369,9 @@ public interface Libvirt extends Library {
int virStreamFinish(StreamPointer virStreamPtr) ;
int virStreamFree(StreamPointer virStreamPtr) ;
StreamPointer virStreamNew(ConnectionPointer virConnectPtr, int flags) ;
- int virStreamSend(StreamPointer virStreamPtr, String data, NativeLong size);
+ int virStreamSend(StreamPointer virStreamPtr, String data, SizeT size);
int virStreamSendAll(StreamPointer virStreamPtr, Libvirt.VirStreamSourceFunc handler, Pointer opaque);
- int virStreamRecv(StreamPointer virStreamPtr, byte[] data, NativeLong length);
+ int virStreamRecv(StreamPointer virStreamPtr, byte[] data, SizeT length);
int virStreamRecvAll(StreamPointer virStreamPtr, Libvirt.VirStreamSinkFunc handler, Pointer opaque);
//DomainSnapshot Methods
diff --git a/src/main/java/org/libvirt/jna/SizeT.java b/src/main/java/org/libvirt/jna/SizeT.java
new file mode 100644
index 0000000..298fe73
--- /dev/null
+++ b/src/main/java/org/libvirt/jna/SizeT.java
@@ -0,0 +1,25 @@
+package org.libvirt.jna;
+
+import com.sun.jna.Native;
+import com.sun.jna.IntegerType;
+
+/**
+ * Represents the native {@code size_t} data type.
+ */
+public final class SizeT extends IntegerType {
+ public SizeT() { this(0); }
+ public SizeT(long value) {
+ /* N.B. A three argument constructor is supported starting with
+ * JNA version 3.4.1.
+ *
+ * The third argument determines whether this class represents
+ * an unsigned integer type. When extracting a value into a
+ * larger-sized container (e.g. 4 byte native type into Java
+ * long), the value is properly converted as unsigned.
+ *
+ * TODO: Use this constructor once we require JNA >= 3.4.1
+ */
+ // super(Native.SIZE_T_SIZE, value, true);
+ super(Native.SIZE_T_SIZE, value);
+ }
+}
diff --git a/src/main/java/org/libvirt/jna/SizeTByReference.java b/src/main/java/org/libvirt/jna/SizeTByReference.java
new file mode 100644
index 0000000..63fe453
--- /dev/null
+++ b/src/main/java/org/libvirt/jna/SizeTByReference.java
@@ -0,0 +1,27 @@
+package org.libvirt.jna;
+
+import com.sun.jna.Native;
+import com.sun.jna.ptr.ByReference;
+
+/**
+ * Represents a native (call-by-reference) pointer to {@code size_t} data type.
+ */
+public final class SizeTByReference extends ByReference {
+ public SizeTByReference() {
+ this(0);
+ }
+
+ public SizeTByReference(long value) {
+ super(Native.SIZE_T_SIZE);
+ setValue(value);
+ }
+
+ public void setValue(long value) {
+ getPointer().setLong(0, value);
+ }
+
+ public long getValue() {
+ return getPointer().getLong(0);
+ }
+
+}
--
1.7.9.5
11 years, 6 months