[libvirt] [PATCH] Fix initialization of virIdentityPtr thread locals
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
Some code mistakenly called virIdentityOnceInit directly
instead of virIdentityInitialize(). This meant that one-time
initializer was run many times with predictably bad results.
Pushed under trivial rule
---
src/util/viridentity.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/util/viridentity.c b/src/util/viridentity.c
index 1d40972..c9efd3f 100644
--- a/src/util/viridentity.c
+++ b/src/util/viridentity.c
@@ -83,7 +83,7 @@ virIdentityPtr virIdentityGetCurrent(void)
{
virIdentityPtr ident;
- if (virIdentityOnceInit() < 0)
+ if (virIdentityInitialize() < 0)
return NULL;
ident = virThreadLocalGet(&virIdentityCurrent);
@@ -104,7 +104,7 @@ int virIdentitySetCurrent(virIdentityPtr ident)
{
virIdentityPtr old;
- if (virIdentityOnceInit() < 0)
+ if (virIdentityInitialize() < 0)
return -1;
old = virThreadLocalGet(&virIdentityCurrent);
--
1.8.1.4
12 years, 1 month
[libvirt] [PATCHv4 0/2] allow migration over IPv6
by Ján Tomko
Diff to v3:
Use VIR_MIGRATE_IPV6 flag instead of trying to automagically guess
if we should use IPv6 or IPv4.
v3:
https://www.redhat.com/archives/libvir-list/2013-February/msg01379.html
Ján Tomko (2):
rpc: add virNetSocketNewConnectTCPHints
qemu: allow migration over IPv6
include/libvirt/libvirt.h.in | 1 +
src/libvirt.c | 8 +++++
src/libvirt_private.syms | 1 +
src/qemu/qemu_migration.c | 82 ++++++++++++++++++++++++++++++++------------
src/qemu/qemu_migration.h | 3 +-
src/rpc/virnetsocket.c | 9 +++++
src/rpc/virnetsocket.h | 4 +++
tools/virsh-domain.c | 7 ++++
tools/virsh.pod | 5 +--
9 files changed, 95 insertions(+), 25 deletions(-)
--
1.8.1.5
12 years, 1 month
[libvirt] [PATCH RFC 0/5] add support for scsi-generic for virtio-scsi
by Han Cheng
This patch series tried to implement the fifth part of Paolo's proposal:
http://permalink.gmane.org/gmane.comp.emulators.libvirt/50428
It is not completed. But it may for use.
Needs some more works on:
src/qemu/qemu_hostdev.c
src/qemu/qemu_hotplug.c
We may also need create src/util/virscsi.[hc] like
src/util/vir(pci|usb).[hc], add sg* to nodedev tree and some others.
As scsi hostdev needs -drive and -device like disk. There are two
approaches:
a) build a disk then use the disk related functions,
b) create new function for it.
I chose the last one as it is clearer and easier. But this may create
some redundant codes.
Any ideas?
Han Cheng (5):
conf: Introduce readonly to hostdev and change helper function
conf: Introduce scsi hostdev
qemu: New cap flag for scsi-generic
qemu: Build qemu command line for scsi-generic
tests: tests for scsi hostdev
docs/formatdomain.html.in | 36 +-
docs/schemas/domaincommon.rng | 38 ++
src/conf/domain_audit.c | 10
src/conf/domain_conf.c | 167 +++++++++-
src/conf/domain_conf.h | 13
src/libvirt_private.syms | 2
src/qemu/qemu_capabilities.c | 15
src/qemu/qemu_capabilities.h | 2
src/qemu/qemu_command.c | 160 +++++++++
tests/qemuhelpdata/qemu-1.0-device | 10
tests/qemuhelpdata/qemu-1.1.0-device | 10
tests/qemuhelpdata/qemu-1.2.0-device | 5
tests/qemuhelpdata/qemu-kvm-1.2.0-device | 5
tests/qemuhelptest.c | 19 -
tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-address-boot.args | 9
tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-address-boot.xml | 34 ++
tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-address-readonly.args | 9
tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-address-readonly.xml | 35 ++
tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-address.args | 9
tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-address.xml | 34 ++
tests/qemuxml2argvtest.c | 12
tests/qemuxml2xmltest.c | 4
22 files changed, 607 insertions(+), 31 deletions(-)
12 years, 1 month
[libvirt] [PATCH 0/8] Simplify mutually exclusive argument handling in virsh
by Peter Krempa
This patchset introduces a new macro that allows simple checking for mutually
exclusive arguments in virsh and uses it in many occasions in virs.
Peter Krempa (8):
virsh: Introduce macros to reject mutually exclusive arguments
virsh-snapshot: Refactor virsh snapshot-list
virsh-host: Refactor cmdFreecell
virsh-domain: Fix flag name in error message to match the check
virsh-snapshot: Refactor cmdSnapshotCurrent
virsh-snapshot: Use the mutually exclusive params macro in
cmdSnapshotEdit
virsh-snapshot: Simplify cleanup path in cmdSnapshotEdit
virsh-domain: Simplify usage of --current, --live and --config flags
po/POTFILES.in | 1 +
tools/virsh-domain.c | 262 +++++++++++++++++++++----------------------------
tools/virsh-host.c | 55 +++++------
tools/virsh-snapshot.c | 181 +++++++++++++---------------------
tools/virsh.h | 42 ++++++++
5 files changed, 248 insertions(+), 293 deletions(-)
--
1.8.1.1
12 years, 1 month
[libvirt] [PATCH] Fix linkage of virt-aa-helper with numa library
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
The recent commit moved some of the use of libnuma out of the
driver code, and into src/util/. It did not, however, update
libvirt_util.la to link against libnuma. This caused linkage
failure with virt-aa-helper, since nothing else caused libnuma
to be pulled onto the linker command line.
The fix removes all reference to NUMACTL_LIBS/CFLAGS from the
various modules in src/Makefile.am and just adds them to the
libvirt_util.la module, which everything else depends on.
Technically a build-breaker fix, but wanted to wait for feedback
on this
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
src/Makefile.am | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 21f8882..3f69d39 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -768,11 +768,11 @@ libvirt_util_la_SOURCES = \
$(UTIL_SOURCES)
libvirt_util_la_CFLAGS = $(CAPNG_CFLAGS) $(YAJL_CFLAGS) $(LIBNL_CFLAGS) \
$(AM_CFLAGS) $(AUDIT_CFLAGS) $(DEVMAPPER_CFLAGS) \
- $(DBUS_CFLAGS) $(LDEXP_LIBM)
+ $(DBUS_CFLAGS) $(LDEXP_LIBM) $(NUMACTL_CFLAGS)
libvirt_util_la_LIBADD = $(CAPNG_LIBS) $(YAJL_LIBS) $(LIBNL_LIBS) \
$(THREAD_LIBS) $(AUDIT_LIBS) $(DEVMAPPER_LIBS) \
$(LIB_CLOCK_GETTIME) $(DBUS_LIBS) $(MSCOM_LIBS) $(LIBXML_LIBS) \
- $(SECDRIVER_LIBS)
+ $(SECDRIVER_LIBS) $(NUMACTL_LIBS)
noinst_LTLIBRARIES += libvirt_conf.la
@@ -809,10 +809,10 @@ libvirt_la_BUILT_LIBADD += libvirt_driver.la
libvirt_driver_la_SOURCES = $(DRIVER_SOURCES)
libvirt_driver_la_CFLAGS = \
- $(NUMACTL_CFLAGS) $(GNUTLS_CFLAGS) $(CURL_CFLAGS) \
+ $(GNUTLS_CFLAGS) $(CURL_CFLAGS) \
-I$(top_srcdir)/src/conf $(AM_CFLAGS)
libvirt_driver_la_LIBADD = \
- $(NUMACTL_LIBS) $(GNUTLS_LIBS) $(CURL_LIBS) $(DLOPEN_LIBS)
+ $(GNUTLS_LIBS) $(CURL_LIBS) $(DLOPEN_LIBS)
SYM_FILES = $(USED_SYM_FILES)
USED_SYM_FILES = $(srcdir)/libvirt_private.syms
@@ -958,13 +958,11 @@ noinst_LTLIBRARIES += libvirt_driver_qemu.la
#libvirt_la_BUILT_LIBADD += libvirt_driver_qemu.la
endif
-libvirt_driver_qemu_impl_la_CFLAGS = $(NUMACTL_CFLAGS) \
- $(GNUTLS_CFLAGS) \
+libvirt_driver_qemu_impl_la_CFLAGS = $(GNUTLS_CFLAGS) \
$(LIBNL_CFLAGS) \
-I$(top_srcdir)/src/conf $(AM_CFLAGS)
libvirt_driver_qemu_impl_la_LDFLAGS = $(AM_LDFLAGS)
-libvirt_driver_qemu_impl_la_LIBADD = $(NUMACTL_LIBS) \
- $(CAPNG_LIBS) \
+libvirt_driver_qemu_impl_la_LIBADD = $(CAPNG_LIBS) \
$(GNUTLS_LIBS) \
$(LIBNL_LIBS)
libvirt_driver_qemu_impl_la_SOURCES = $(QEMU_DRIVER_SOURCES)
@@ -1029,10 +1027,10 @@ noinst_LTLIBRARIES += libvirt_driver_uml.la
#libvirt_la_BUILT_LIBADD += libvirt_driver_uml.la
endif
-libvirt_driver_uml_impl_la_CFLAGS = $(NUMACTL_CFLAGS) \
+libvirt_driver_uml_impl_la_CFLAGS = \
-I$(top_srcdir)/src/conf $(AM_CFLAGS)
libvirt_driver_uml_impl_la_LDFLAGS = $(AM_LDFLAGS)
-libvirt_driver_uml_impl_la_LIBADD = $(NUMACTL_LIBS)
+# libvirt_driver_uml_impl_la_LIBADD =
libvirt_driver_uml_impl_la_SOURCES = $(UML_DRIVER_SOURCES)
endif
@@ -1969,7 +1967,6 @@ libvirt_lxc_SOURCES = \
$(DATATYPES_SOURCES)
libvirt_lxc_LDFLAGS = $(WARN_CFLAGS) $(AM_LDFLAGS)
libvirt_lxc_LDADD = \
- $(NUMACTL_LIBS) \
$(FUSE_LIBS) \
libvirt-net-rpc-server.la \
libvirt-net-rpc.la \
--
1.8.1.4
12 years, 1 month
[libvirt] [test-API][PATCH] Add nwfilter test cases and conf
by hongming
The patch covers all nwfilter api provided by libvirt.py. It includes
define/undefine/list nwfilters and check them via checking ebtables rule.
The following new files are added.
cases/nwfilter.conf
repos/nwfilter/__init__.py
repos/nwfilter/nwfilter_check.py
* Check the nwfilter via checking ebtales
repos/nwfilter/nwfilter_define.py
* Define the nwfilter using specified value
repos/nwfilter/nwfilter_list.py
* List all of the available network filters
repos/nwfilter/nwfilter_undefine.py
* Undefine the specified nwfilter
repos/nwfilter/xmls/nwfilter.xml
---
cases/nwfilter.conf | 59 +++++++++++++++++
repos/nwfilter/nwfilter_check.py | 120 +++++++++++++++++++++++++++++++++++
repos/nwfilter/nwfilter_define.py | 54 ++++++++++++++++
repos/nwfilter/nwfilter_list.py | 76 ++++++++++++++++++++++
repos/nwfilter/nwfilter_undefine.py | 43 +++++++++++++
repos/nwfilter/xmls/nwfilter.xml | 3 +
6 files changed, 355 insertions(+), 0 deletions(-)
create mode 100644 cases/nwfilter.conf
create mode 100644 repos/nwfilter/__init__.py
create mode 100644 repos/nwfilter/nwfilter_check.py
create mode 100644 repos/nwfilter/nwfilter_define.py
create mode 100644 repos/nwfilter/nwfilter_list.py
create mode 100644 repos/nwfilter/nwfilter_undefine.py
create mode 100644 repos/nwfilter/xmls/nwfilter.xml
diff --git a/cases/nwfilter.conf b/cases/nwfilter.conf
new file mode 100644
index 0000000..b394ee5
--- /dev/null
+++ b/cases/nwfilter.conf
@@ -0,0 +1,59 @@
+domain:install_linux_cdrom
+ guestname
+ $defaultname
+ guestos
+ $defaultos
+ guestarch
+ $defaultarch
+ vcpu
+ $defaultvcpu
+ memory
+ $defaultmem
+ hddriver
+ $defaulthd
+ nicdriver
+ $defaultnic
+ imageformat
+ qcow2
+ macaddr
+ 54:52:00:4a:16:30
+
+nwfilter:nwfilter_list
+
+# chain -- ipv4, ipv6, arp .etc
+# action -- mandatory; drop, accept, return
+# direction -- mandatory; must either be in, out or inout
+nwfilter:nwfilter_define
+ nwfiltername
+ disallow-arp
+ chain
+ arp
+ action
+ drop
+ direction
+ inout
+
+nwfilter:nwfilter_list
+
+nwfilter:nwfilter_check
+ nwfiltername
+ disallow-arp
+ guestname
+ $defaultname
+
+nwfilter:nwfilter_define
+ nwfiltername
+ disallow-ipv6
+ chain
+ ipv6
+ action
+ drop
+ direction
+ in
+
+nwfilter:nwfilter_undefine
+ nwfiltername
+ disallow-ipv6
+
+nwfilter:nwfilter_list
+
diff --git a/repos/nwfilter/__init__.py b/repos/nwfilter/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/repos/nwfilter/nwfilter_check.py b/repos/nwfilter/nwfilter_check.py
new file mode 100644
index 0000000..b2c7ece
--- /dev/null
+++ b/repos/nwfilter/nwfilter_check.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+import time
+import xml.dom.minidom
+
+from libvirt import libvirtError
+from utils import utils
+from xml.dom import minidom
+
+from src import sharedmod
+
+required_params = ('nwfiltername','guestname',)
+optional_params = {}
+
+EBTABLES = "ebtables -t nat -L"
+
+def get_ebtables():
+ """ Get the output of ebtables """
+ (status, output) = utils.exec_cmd(EBTABLES,shell=True)
+ logger.info("Execute command:" + EBTABLES)
+ ebtables_list = []
+
+ if status:
+ logger.error("Executing " + EBTABLES + " failed")
+ logger.error(output)
+ return False
+ else:
+ for i in range(len(output)):
+ ebtables_list.append(output[i])
+ logger.info("Get the output of ebtables list: %s" \
+ % ebtables_list)
+
+ return ebtables_list
+
+def check_ebtables(*args):
+ """ Check the ebtables """
+ (nwfiltername,conn)= args
+ ebtables_list = get_ebtables()
+
+ #Get the filter' attribute value
+ nwfilter_xml = conn.nwfilterLookupByName(nwfiltername).XMLDesc(0)
+ nwfilter_parsedxml = minidom.parseString(nwfilter_xml)
+ chain = nwfilter_parsedxml.getElementsByTagName("filter")[0].\
+ getAttribute("chain")
+ rule = nwfilter_parsedxml.getElementsByTagName("rule")[0]
+ action = rule.getAttribute("action").upper()
+ direction = rule.getAttribute("direction")
+ logger.info("The nwfilter chain:%s ,action:%s ,direction:%s " %\
+ (chain,action,direction) )
+ in_vnet_chain = "I-vnet0-" + chain
+ out_vnet_chain = "O-vnet0-" + chain
+
+ if cmp(direction,"inout") == 0 :
+ if len(ebtables_list) == 21 and in_vnet_chain in ebtables_list[-5]\
+ and out_vnet_chain in ebtables_list[-2] \
+ and action in ebtables_list[-1] \
+ and action in ebtables_list[-4]:
+ return True
+ else:
+ return False
+ elif cmp(direction,"in") == 0:
+ if len(ebtables_list) == 14 and out_vnet_chain in ebtables_list[-2]\
+ and action in ebtables_list[-1]:
+ return True
+ else:
+ return False
+
+ elif cmp(direction,"out") == 0:
+ if len(ebtables_list) == 14 and in_vnet_chain in ebtables_list[-2] \
+ and action in ebtables_list[-1]:
+ return True
+ else:
+ return False
+
+def nwfilter_check(params):
+ """Check the nwfilter via checking ebtales"""
+ global logger
+ logger = params['logger']
+ nwfiltername = params['nwfiltername']
+ guestname = params['guestname']
+ domain_nwfilter_xml = ""
+
+ conn = sharedmod.libvirtobj['conn']
+ domobj = conn.lookupByName(guestname)
+
+ try:
+
+ #Create the nwfilter's element and append it to domain xml
+ domxml = domobj.XMLDesc(0)
+ domain_parsedxml = minidom.parseString(domxml)
+ domain_ifxml = domain_parsedxml.getElementsByTagName("interface")
+ filterxml = domain_parsedxml.createElement("filterref")
+ filterxml.setAttribute("filter", nwfiltername)
+ domain_ifxml[0].appendChild(filterxml)
+
+ #Destroy the domain and redefine it with nwfilter
+ domobj.destroy()
+ time.sleep(5)
+ domobj.undefine()
+
+ #Define the new domain with the nwfilter
+ dom_nwfilter = conn.defineXML(domain_parsedxml.toxml())
+ logger.debug("The xml of new defined domain with nwfilter %s" % \
+ dom_nwfilter.XMLDesc(0))
+
+ #Start the new defined domain
+ dom_nwfilter.create()
+ time.sleep(5)
+
+ if check_ebtables(nwfiltername,conn):
+ logger.info("Successfully create nwfilter")
+ return 0
+ else:
+ logger.error("Failed to create nwfilter")
+ return 1
+
+ except libvirtError, e:
+ logger.error("API error message: %s" % e.message)
+ return 1
+
+ return 0
\ No newline at end of file
diff --git a/repos/nwfilter/nwfilter_define.py b/repos/nwfilter/nwfilter_define.py
new file mode 100644
index 0000000..e20fd2d
--- /dev/null
+++ b/repos/nwfilter/nwfilter_define.py
@@ -0,0 +1,54 @@
+#! /usr/bin/env python
+
+
+
+from libvirt import libvirtError
+from src import sharedmod
+
+
+required_params = ('nwfiltername','chain','action','direction')
+optional_params = {'xml' : 'xmls/nwfilter.xml',}
+
+def nwfilter_define(params):
+ """ Define network filters."""
+ logger = params['logger']
+ conn = sharedmod.libvirtobj['conn']
+ xmlstr = params['xml']
+ nwfiltername = params['nwfiltername']
+ chain = params['chain']
+ action = params['action']
+ direction = params['direction']
+
+
+ xmlstr = xmlstr.replace('NWFILTERNAME', nwfiltername)
+ xmlstr = xmlstr.replace('CHAIN', chain)
+ xmlstr = xmlstr.replace('ACTION', action)
+ xmlstr = xmlstr.replace('DIRECTION', direction)
+ try:
+ logger.info("nwfiltername:%s chain:%s action:%s direction:%s" % \
+ (nwfiltername,chain,action,direction))
+ logger.info("The nwfilter's xml is %s" % xmlstr)
+
+ #Define the nwfilter with given attribute value from nwfilter.conf"""
+ conn.nwfilterDefineXML(xmlstr)
+ nwfilterxml = conn.nwfilterLookupByName(nwfiltername).XMLDesc(0)
+
+ if nwfiltername in conn.listNWFilters():
+ logger.info("The nwfilter list includes the defined nwfilter")
+ if cmp(xmlstr,nwfilterxml):
+ logger.info("Successfully define the nwfilter %s" % \
+ nwfiltername)
+ return 0
+ else:
+ logger.error("Fail to define the nwfilter %s" % nwfiltername)
+ return 1
+ else:
+ logger.error("Failed,nwfilter list doesn't include the defined \
+ nwfilter")
+ return 1
+
+ except libvirtError, e:
+ logger.error("API error message: %s" % e.message)
+ return 1
+
+ return 0
\ No newline at end of file
diff --git a/repos/nwfilter/nwfilter_list.py b/repos/nwfilter/nwfilter_list.py
new file mode 100644
index 0000000..056ee1f
--- /dev/null
+++ b/repos/nwfilter/nwfilter_list.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+from libvirt import libvirtError
+from utils import utils
+
+from src import sharedmod
+
+required_params = ()
+optional_params = {}
+
+NWFILTER_LIST_API_DIR = "ls /etc/libvirt/nwfilter"
+
+def get_nwfilterlist_dir():
+ """ Get the nwfilter list from dir """
+
+ (status, output) = utils.exec_cmd(NWFILTER_LIST_API_DIR,shell=True)
+ logger.info("Execute command:" + NWFILTER_LIST_API_DIR)
+ nwfilter_list_api_dir = []
+ if status:
+ logger.error("Executing " + NWFILTER_LIST_API_DIR + " failed")
+ logger.error(output)
+ return False
+ else:
+ for i in range(len(output)):
+ nwfilter_list_api_dir.append(output[i][:-4])
+ logger.info("Get nwfilters name list under dir: %s" \
+ % nwfilter_list_api_dir)
+ return nwfilter_list_api_dir
+
+def nwfilter_list(params):
+ """ List all of the available network filters."""
+ global logger
+ logger = params['logger']
+ conn = sharedmod.libvirtobj['conn']
+
+ try:
+ #Get the nwfilter name list from API """
+ nwfilter_namelist_api = conn.listNWFilters()
+
+ #Get the nwfilter object list
+ nwfilter_list_api = conn.listAllNWFilters(0)
+ logger.info("The connection URI %s" % \
+ nwfilter_list_api[0].connect().getURI())
+
+ #Get the number of nwfilters from API
+ nwfilter_num = conn.numOfNWFilters()
+
+ nwfilter_list_dir = get_nwfilterlist_dir()
+ if nwfilter_num == len(nwfilter_list_api) and \
+ len(nwfilter_list_api) == len(nwfilter_list_dir) and \
+ cmp(nwfilter_namelist_api,nwfilter_list_dir):
+ logger.info("The number of available network filters is %s" % \
+ nwfilter_num)
+ else:
+ logger.error("Failed to get the nwfilters list")
+ return 1
+
+ for nwfilter_item in nwfilter_list_api:
+ if nwfilter_item.name()in nwfilter_list_dir and \
+ nwfilter_item.name()in nwfilter_namelist_api:
+ logger.info("The name is %s" % nwfilter_item.name())
+ else:
+ logger.error("Failed to get nwfilter's name.")
+ return 1
+ if cmp(str(nwfilter_item.UUID()),nwfilter_item.UUIDString()):
+ logger.info("The UUID is %s" % nwfilter_item.UUIDString())
+ else:
+ logger.error("Failed to get nwfilter's uuid.")
+ return 1
+
+
+ except libvirtError, e:
+ logger.error("API error message: %s" % e.message)
+ return 1
+
+ return 0
\ No newline at end of file
diff --git a/repos/nwfilter/nwfilter_undefine.py b/repos/nwfilter/nwfilter_undefine.py
new file mode 100644
index 0000000..b9ea332
--- /dev/null
+++ b/repos/nwfilter/nwfilter_undefine.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+from libvirt import libvirtError
+
+from src import sharedmod
+
+required_params = ('nwfiltername',)
+optional_params = {}
+
+def nwfilter_undefine(params):
+ """Undefine the specified nwfilter"""
+ logger = params['logger']
+ nwfiltername = params['nwfiltername']
+ conn = sharedmod.libvirtobj['conn']
+
+ try:
+ nwfilter = conn.nwfilterLookupByName(nwfiltername)
+ uuidstr = nwfilter.UUIDString()
+ uuid = nwfilter.UUID()
+ # Lookup by nwfilter's uuid string
+ nwfilter_uuidstr = conn.nwfilterLookupByUUIDString(uuidstr)
+ # Lookup by nwfilter's uuid
+ nwfilter_uuid = conn.nwfilterLookupByUUID(uuid)
+
+ # Check if the nwfilter lookup by name/uuid/uuidstr is the same one
+ if cmp(nwfilter,nwfilter_uuidstr) and cmp(nwfilter_uuidstr,\
+ nwfilter_uuid):
+ # Undefine the nwfilter
+ nwfilter.undefine()
+ # Check if the nwfiler list includes the undefined nwfilter
+ if nwfiltername not in conn.listNWFilters():
+ logger.info("Successfully undefine the nwfilter %s" % \
+ nwfiltername)
+ return 0
+ else:
+ logger.error("Failed to undefine the nwfilter %s" % nwfiltername)
+ return 1
+
+ except libvirtError, e:
+ logger.error("API error message: %s" % e.message)
+ return 1
+
+ return 0
diff --git a/repos/nwfilter/xmls/nwfilter.xml b/repos/nwfilter/xmls/nwfilter.xml
new file mode 100644
index 0000000..6d52d5d
--- /dev/null
+++ b/repos/nwfilter/xmls/nwfilter.xml
@@ -0,0 +1,3 @@
+<filter name='NWFILTERNAME' chain='CHAIN'>
+ <rule action='ACTION' direction='DIRECTION' priority='500'/>
+</filter>
--
1.7.7.6
12 years, 1 month
[libvirt] [PATCH] qemu: s/VIR_ERR_NO_SUPPORT/VIR_ERR_OPERATION_UNSUPPORTED
by Michal Privoznik
The VIR_ERR_NO_SUPPORT error code is reserved for cases where an
API is not implemented in a driver. It definitely should not be
used when an API execution fails due to unsupported operation.
---
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_hotplug.c | 30 +++++++++++++++---------------
src/qemu/qemu_monitor.c | 2 +-
src/qemu/qemu_monitor_text.c | 2 +-
src/qemu/qemu_process.c | 2 +-
5 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 9cd9e44..c6e579f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3141,7 +3141,7 @@ static int qemuDumpToFd(virQEMUDriverPtr driver, virDomainObjPtr vm,
int ret = -1;
if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DUMP_GUEST_MEMORY)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("dump-guest-memory is not supported"));
return -1;
}
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 044f8cd..de9edd4 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1468,7 +1468,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
int ret = -1;
if (!devslot || !(olddev = *devslot)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("cannot find existing network device to modify"));
goto cleanup;
}
@@ -1476,7 +1476,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
oldType = virDomainNetGetActualType(olddev);
if (oldType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
/* no changes are possible to a type='hostdev' interface */
- virReportError(VIR_ERR_NO_SUPPORT,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("cannot change config of '%s' network type"),
virDomainNetTypeToString(oldType));
goto cleanup;
@@ -1499,7 +1499,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
if (virMacAddrCmp(&olddev->mac, &newdev->mac)) {
char oldmac[VIR_MAC_STRING_BUFLEN], newmac[VIR_MAC_STRING_BUFLEN];
- virReportError(VIR_ERR_NO_SUPPORT,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("cannot change network interface mac address "
"from %s to %s"),
virMacAddrFormat(&olddev->mac, oldmac),
@@ -1508,7 +1508,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
}
if (STRNEQ_NULLABLE(olddev->model, newdev->model)) {
- virReportError(VIR_ERR_NO_SUPPORT,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("cannot modify network device model from %s to %s"),
olddev->model ? olddev->model : "(default)",
newdev->model ? newdev->model : "(default)");
@@ -1520,7 +1520,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
olddev->driver.virtio.txmode != newdev->driver.virtio.txmode ||
olddev->driver.virtio.ioeventfd != newdev->driver.virtio.ioeventfd ||
olddev->driver.virtio.event_idx != newdev->driver.virtio.event_idx)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify virtio network device driver attributes"));
goto cleanup;
}
@@ -1534,7 +1534,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
}
if (STRNEQ_NULLABLE(olddev->script, newdev->script)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify network device script attribute"));
goto cleanup;
}
@@ -1546,7 +1546,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
goto cleanup;
}
if (STRNEQ_NULLABLE(olddev->ifname, newdev->ifname)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify network device tap name"));
goto cleanup;
}
@@ -1564,7 +1564,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
}
if (!virDevicePCIAddressEqual(&olddev->info.addr.pci,
&newdev->info.addr.pci)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify network device guest PCI address"));
goto cleanup;
}
@@ -1575,22 +1575,22 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
goto cleanup;
}
if (STRNEQ_NULLABLE(olddev->info.alias, newdev->info.alias)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify network device alias"));
goto cleanup;
}
if (olddev->info.rombar != newdev->info.rombar) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify network device rom bar setting"));
goto cleanup;
}
if (STRNEQ_NULLABLE(olddev->info.romfile, newdev->info.romfile)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify network rom file"));
goto cleanup;
}
if (olddev->info.bootIndex != newdev->info.bootIndex) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("cannot modify network device boot index setting"));
goto cleanup;
}
@@ -1617,7 +1617,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
if (newType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
/* can't turn it into a type='hostdev' interface */
- virReportError(VIR_ERR_NO_SUPPORT,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("cannot change network interface type to '%s'"),
virDomainNetTypeToString(newType));
goto cleanup;
@@ -1675,7 +1675,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
break;
default:
- virReportError(VIR_ERR_NO_SUPPORT,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("unable to change config on '%s' network type"),
virDomainNetTypeToString(newdev->type));
break;
@@ -1746,7 +1746,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
/* FINALLY - actually perform the required actions */
if (needReconnect) {
- virReportError(VIR_ERR_NO_SUPPORT,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("unable to change config on '%s' network type"),
virDomainNetTypeToString(newdev->type));
goto cleanup;
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 175aa57..30f7820 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -2121,7 +2121,7 @@ qemuMonitorDumpToFd(qemuMonitorPtr mon, int fd)
/* We don't have qemuMonitorTextDump(), so we should check mon->json
* here.
*/
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("dump-guest-memory is not supported in text mode"));
return -1;
}
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index 1b6efba..68df49d 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -470,7 +470,7 @@ int qemuMonitorTextSetLink(qemuMonitorPtr mon, const char *name, enum virDomainN
/* check if set_link command is supported */
if (strstr(info, "\nunknown ")) {
- virReportError(VIR_ERR_NO_SUPPORT,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
"%s",
_("\'set_link\' not supported by this qemu"));
goto error;
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 2465938..0e1c286 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -2021,7 +2021,7 @@ qemuProcessSetLinkStates(virDomainObjPtr vm)
VIR_DEBUG("Setting link state: %s", def->nets[i]->info.alias);
if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("Setting of link state is not supported by this qemu"));
return -1;
}
--
1.8.1.5
12 years, 1 month
[libvirt] [PATCH 0/4] Various virsh cleanups and enhancements
by Martin Kletzander
Wanting to resolve rhbz#919372 (fixed in [3/4]) I came accross few
things that could've used some polishing, so here's the series.
Martin Kletzander (4):
Make vshDebug work when parsing parameters
Fix snapshot-create-as syntax in help output
Allow multiple parameters for schedinfo
Cleanup useless flags specifications
tools/virsh-domain-monitor.c | 26 ----
tools/virsh-domain.c | 274 ++++---------------------------------------
tools/virsh-host.c | 10 --
tools/virsh-interface.c | 7 --
tools/virsh-network.c | 12 --
tools/virsh-nodedev.c | 3 -
tools/virsh-pool.c | 23 ----
tools/virsh-secret.c | 4 -
tools/virsh-snapshot.c | 61 +---------
tools/virsh-volume.c | 29 -----
tools/virsh.c | 13 +-
11 files changed, 29 insertions(+), 433 deletions(-)
--
1.8.1.5
12 years, 1 month
[libvirt] [PATCH] qemu: Add the new disk src into shared disk table when updating disk
by Osier Yang
We should record the new disk src in the shared disk table for
updating disk (CD-ROM or Floppy) API. Fortunately, we only allow
to update the disk source now, otherwise we might also want to
set the unpriv_sgio setting.
---
src/qemu/qemu_driver.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 9cd9e44..d0d2b9e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6067,6 +6067,10 @@ qemuDomainChangeDiskMediaLive(virDomainObjPtr vm,
}
dev->data.disk = tmp;
+ /* Add the new disk src into shared disk hash table */
+ if (qemuAddSharedDisk(driver, dev->data.disk, vm->def->name) < 0)
+ goto end;
+
ret = qemuDomainChangeEjectableMedia(driver, vm, disk, orig_disk, force);
if (ret == 0) {
dev->data.disk = NULL;
--
1.7.7.6
12 years, 1 month
[libvirt] libvirtd(0.9.10) crashed with Segmentation fault, Is someone ever come up against this problem , thanks
by Caizhifeng
HI all,
Libvirtd of version 0.9.10, when several VMs migrate intercurrently, there comes up with the follow problem.
Has anyone come up against this problem? How can I fix it, Any suggestions appreciated.
thank you very much.
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x00007fce7b332fde in ?? () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0 0x00007fce7b332fde in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fce7b335a45 in malloc () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007fce7b330314 in _IO_str_overflow () from /lib/x86_64-linux-gnu/libc.so.6
#3 0x00007fce7b32ebcd in _IO_default_xsputn () from /lib/x86_64-linux-gnu/libc.so.6
#4 0x00007fce7b2fcbee in vfprintf () from /lib/x86_64-linux-gnu/libc.so.6
#5 0x00007fce7b325b64 in vasprintf () from /lib/x86_64-linux-gnu/libc.so.6
#6 0x0000000000504abc in virVasprintf (strp=0x7fce780b3bc0, fmt=0x7fce7ccbf8d1 "%d: %s : %s:%lld : %s\n", list=0x7fce780b3a20)
at util/util.c:1809
#7 0x0000000000504ba1 in virAsprintf (strp=0x7fce780b3bc0, fmt=0x7fce7ccbf8d1 "%d: %s : %s:%lld : %s\n") at util/util.c:1827
#8 0x00007fce7cba52a7 in virLogFormatString (msg=0x7fce780b3bc0, funcname=0x7fce7cce7320 "virNetServerHandleJob", linenr=138,
priority=1, str=0x7fce60011440 "server=0x252acf0 client=0x252f020 message=0x25363c0 prog=0x25361b0") at util/logging.c:640
#9 0x00007fce7cba5505 in virLogMessage (category=0x7fce7cce6f17 "file.rpc/virnetserver.c", priority=1,
funcname=0x7fce7cce7320 "virNetServerHandleJob", linenr=138, flags=0,
fmt=0x7fce7cce6ef0 "server=%p client=%p message=%p prog=%p") at util/logging.c:725
#10 0x00007fce7cc8ca7e in virNetServerHandleJob (jobOpaque=0x2531ca0, opaque=0x252acf0) at rpc/virnetserver.c:137
#11 0x00007fce7cbb52c6 in virThreadPoolWorker (opaque=0x25107b0) at util/threadpool.c:144
#12 0x00007fce7cbb4ccf in virThreadHelper (data=0x2510720) at util/threads-pthread.c:165
#13 0x00007fce7b87ae9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#14 0x00007fce7b3a54bd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#15 0x0000000000000000 in ?? ()
(gdb) c
Continuing.
[Thread 0x7fce790b6700 (LWP 37763) exited]
-------------------------------------------------------------------------------------------------------------------------------------
????????????????????????????????????????
????????????????????????????????????????
????????????????????????????????????????
???
This e-mail and its attachments contain confidential information from H3C, which is
intended only for the person or entity whose address is listed above. Any use of the
information contained herein in any way (including, but not limited to, total or partial
disclosure, reproduction, or dissemination) by persons other than the intended
recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender
by phone or email immediately and delete it!
12 years, 1 month