Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0831c388ec | |||
| b59373e03c | |||
| d617f580c5 | |||
| 7415198273 | |||
| 0ceadbef50 | |||
| 82f2674fae |
@@ -1,31 +0,0 @@
|
||||
[suppress_function]
|
||||
symbol_version_regexp = LIBVIRT_PRIVATE.*
|
||||
soname_regexp = libvirt\\.so.*
|
||||
|
||||
[suppress_function]
|
||||
symbol_version_regexp = LIBVIRT_ADMIN_PRIVATE.*
|
||||
soname_regexp = libvirt-admin\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = LIBVIRT_PRIVATE.*
|
||||
soname_regexp = libvirt\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = LIBVIRT_ADMIN_PRIVATE.*
|
||||
soname_regexp = libvirt-admin\\.so.*
|
||||
|
||||
[suppress_function]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_storage_.*\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_storage_.*\\.so.*
|
||||
|
||||
[suppress_function]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_driver_.*\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_driver_.*\\.so.*
|
||||
+1
-1
@@ -2,4 +2,4 @@
|
||||
*.rpm
|
||||
i686
|
||||
x86_64
|
||||
libvirt-*.tar.xz
|
||||
libvirt-*.tar.gz
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Date: Tue, 4 Nov 2014 22:51:26 +0530
|
||||
Subject: [PATCH] Cpu: Add support for Power LE Architecture.
|
||||
|
||||
This adds support for PowerPC Little Endian architecture.,
|
||||
and allows libvirt to spawn VMs based on 'ppc64le' architecture.
|
||||
|
||||
Signed-off-by: Pradipta Kr. Banerjee <bpradip@in.ibm.com>
|
||||
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit da636d83dc6b1d070a705786b4daef8644eaca13)
|
||||
---
|
||||
src/conf/domain_conf.c | 2 +-
|
||||
src/cpu/cpu_powerpc.c | 2 +-
|
||||
src/qemu/qemu_capabilities.c | 6 +++---
|
||||
src/qemu/qemu_command.c | 22 +++++++++++-----------
|
||||
src/qemu/qemu_domain.c | 1 +
|
||||
src/util/virarch.h | 3 +++
|
||||
6 files changed, 20 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index cfdf66c..8aca289 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9867,7 +9867,7 @@ virDomainVideoDefaultType(const virDomainDef *def)
|
||||
(STREQ(def->os.type, "xen") ||
|
||||
STREQ(def->os.type, "linux")))
|
||||
return VIR_DOMAIN_VIDEO_TYPE_XEN;
|
||||
- else if (def->os.arch == VIR_ARCH_PPC64)
|
||||
+ else if ARCH_IS_PPC64(def->os.arch)
|
||||
return VIR_DOMAIN_VIDEO_TYPE_VGA;
|
||||
else
|
||||
return VIR_DOMAIN_VIDEO_TYPE_CIRRUS;
|
||||
diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
|
||||
index 67cb9ff..d591c18 100644
|
||||
--- a/src/cpu/cpu_powerpc.c
|
||||
+++ b/src/cpu/cpu_powerpc.c
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
VIR_LOG_INIT("cpu.cpu_powerpc");
|
||||
|
||||
-static const virArch archs[] = { VIR_ARCH_PPC64 };
|
||||
+static const virArch archs[] = { VIR_ARCH_PPC64, VIR_ARCH_PPC64LE };
|
||||
|
||||
struct ppc_vendor {
|
||||
char *name;
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index be4d01f..34d753c 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -632,7 +632,7 @@ virQEMUCapsProbeCPUModels(virQEMUCapsPtr qemuCaps, uid_t runUid, gid_t runGid)
|
||||
if (qemuCaps->arch == VIR_ARCH_I686 ||
|
||||
qemuCaps->arch == VIR_ARCH_X86_64) {
|
||||
parse = virQEMUCapsParseX86Models;
|
||||
- } else if (qemuCaps->arch == VIR_ARCH_PPC64) {
|
||||
+ } else if ARCH_IS_PPC64(qemuCaps->arch) {
|
||||
parse = virQEMUCapsParsePPCModels;
|
||||
} else {
|
||||
VIR_DEBUG("don't know how to parse %s CPU models",
|
||||
@@ -2018,7 +2018,7 @@ bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps,
|
||||
return true;
|
||||
|
||||
if (def->os.arch == VIR_ARCH_PPC ||
|
||||
- def->os.arch == VIR_ARCH_PPC64) {
|
||||
+ ARCH_IS_PPC64(def->os.arch)) {
|
||||
/*
|
||||
* Usage of pci.0 naming:
|
||||
*
|
||||
@@ -3600,7 +3600,7 @@ virQEMUCapsSupportsChardev(virDomainDefPtr def,
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
|
||||
return false;
|
||||
|
||||
- if ((def->os.arch == VIR_ARCH_PPC) || (def->os.arch == VIR_ARCH_PPC64)) {
|
||||
+ if ((def->os.arch == VIR_ARCH_PPC) || ARCH_IS_PPC64(def->os.arch)) {
|
||||
/* only pseries need -device spapr-vty with -chardev */
|
||||
return (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
|
||||
chr->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO);
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index aeb4eec..c5c48bf 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -713,7 +713,7 @@ qemuSetSCSIControllerModel(virDomainDefPtr def,
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
- if ((def->os.arch == VIR_ARCH_PPC64) &&
|
||||
+ if (ARCH_IS_PPC64(def->os.arch) &&
|
||||
STRPREFIX(def->os.machine, "pseries")) {
|
||||
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
|
||||
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
|
||||
@@ -1260,7 +1260,7 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
|
||||
|
||||
for (i = 0; i < def->nserials; i++) {
|
||||
if (def->serials[i]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
|
||||
- (def->os.arch == VIR_ARCH_PPC64) &&
|
||||
+ ARCH_IS_PPC64(def->os.arch) &&
|
||||
STRPREFIX(def->os.machine, "pseries"))
|
||||
def->serials[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
|
||||
if (qemuAssignSpaprVIOAddress(def, &def->serials[i]->info,
|
||||
@@ -1269,7 +1269,7 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
|
||||
}
|
||||
|
||||
if (def->nvram) {
|
||||
- if (def->os.arch == VIR_ARCH_PPC64 &&
|
||||
+ if (ARCH_IS_PPC64(def->os.arch) &&
|
||||
STRPREFIX(def->os.machine, "pseries"))
|
||||
def->nvram->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
|
||||
if (qemuAssignSpaprVIOAddress(def, &def->nvram->info,
|
||||
@@ -4191,7 +4191,7 @@ qemuBuildUSBControllerDevStr(virDomainDefPtr domainDef,
|
||||
model = def->model;
|
||||
|
||||
if (model == -1) {
|
||||
- if (domainDef->os.arch == VIR_ARCH_PPC64)
|
||||
+ if ARCH_IS_PPC64(domainDef->os.arch)
|
||||
model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI;
|
||||
else
|
||||
model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI;
|
||||
@@ -8445,7 +8445,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||
!qemuDomainMachineIsQ35(def) &&
|
||||
(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI) ||
|
||||
(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI) &&
|
||||
- def->os.arch == VIR_ARCH_PPC64))) {
|
||||
+ ARCH_IS_PPC64(def->os.arch)))) {
|
||||
if (usblegacy) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("Multiple legacy USB controllers are "
|
||||
@@ -9643,7 +9643,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||
}
|
||||
|
||||
if (def->nvram) {
|
||||
- if (def->os.arch == VIR_ARCH_PPC64 &&
|
||||
+ if (ARCH_IS_PPC64(def->os.arch) &&
|
||||
STRPREFIX(def->os.machine, "pseries")) {
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
@@ -9761,7 +9761,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr,
|
||||
{
|
||||
virBuffer cmd = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
- if ((arch == VIR_ARCH_PPC64) && STRPREFIX(machine, "pseries")) {
|
||||
+ if (ARCH_IS_PPC64(arch) && STRPREFIX(machine, "pseries")) {
|
||||
if (serial->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
|
||||
serial->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
|
||||
virBufferAsprintf(&cmd, "spapr-vty,chardev=char%s",
|
||||
@@ -10183,7 +10183,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
|
||||
if (VIR_ALLOC(def->src) < 0)
|
||||
goto error;
|
||||
|
||||
- if (((dom->os.arch == VIR_ARCH_PPC64) &&
|
||||
+ if ((ARCH_IS_PPC64(dom->os.arch) &&
|
||||
dom->os.machine && STRPREFIX(dom->os.machine, "pseries")))
|
||||
def->bus = VIR_DOMAIN_DISK_BUS_SCSI;
|
||||
else
|
||||
@@ -10276,7 +10276,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
|
||||
} else if (STREQ(keywords[i], "if")) {
|
||||
if (STREQ(values[i], "ide")) {
|
||||
def->bus = VIR_DOMAIN_DISK_BUS_IDE;
|
||||
- if (((dom->os.arch == VIR_ARCH_PPC64) &&
|
||||
+ if ((ARCH_IS_PPC64(dom->os.arch) &&
|
||||
dom->os.machine && STRPREFIX(dom->os.machine, "pseries"))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("pseries systems do not support ide devices '%s'"), val);
|
||||
@@ -11521,7 +11521,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
|
||||
}
|
||||
if (STREQ(arg, "-cdrom")) {
|
||||
disk->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
|
||||
- if (((def->os.arch == VIR_ARCH_PPC64) &&
|
||||
+ if ((ARCH_IS_PPC64(def->os.arch) &&
|
||||
def->os.machine && STRPREFIX(def->os.machine, "pseries")))
|
||||
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
|
||||
if (VIR_STRDUP(disk->dst, "hdc") < 0)
|
||||
@@ -11537,7 +11537,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
|
||||
disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
|
||||
else
|
||||
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
|
||||
- if (((def->os.arch == VIR_ARCH_PPC64) &&
|
||||
+ if ((ARCH_IS_PPC64(def->os.arch) &&
|
||||
def->os.machine && STRPREFIX(def->os.machine, "pseries")))
|
||||
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
|
||||
}
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index bec7cf2..48e8acf 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -980,6 +980,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
|
||||
break;
|
||||
|
||||
case VIR_ARCH_PPC64:
|
||||
+ case VIR_ARCH_PPC64LE:
|
||||
addPCIRoot = true;
|
||||
addDefaultUSBKBD = true;
|
||||
addDefaultUSBMouse = true;
|
||||
diff --git a/src/util/virarch.h b/src/util/virarch.h
|
||||
index d395e58..3206ce2 100644
|
||||
--- a/src/util/virarch.h
|
||||
+++ b/src/util/virarch.h
|
||||
@@ -79,6 +79,9 @@ typedef enum {
|
||||
(arch) == VIR_ARCH_PPC64LE ||\
|
||||
(arch) == VIR_ARCH_PPCEMB)
|
||||
|
||||
+# define ARCH_IS_PPC64(arch) ((arch) == VIR_ARCH_PPC64 ||\
|
||||
+ (arch) == VIR_ARCH_PPC64LE)
|
||||
+
|
||||
# define ARCH_IS_ARM(arch) ((arch) == VIR_ARCH_ARMV6L ||\
|
||||
(arch) == VIR_ARCH_ARMV7L ||\
|
||||
(arch) == VIR_ARCH_ARMV7B ||\
|
||||
@@ -1,36 +0,0 @@
|
||||
From b825bb556bd3967bf5422c243b77bd4038e317e2 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 13 Oct 2025 10:34:51 +0200
|
||||
Subject: [PATCH 1/8] wireshark: Drop needless declaration of
|
||||
proto_register_libvirt() and proto_reg_handoff_libvirt()
|
||||
Content-type: text/plain
|
||||
|
||||
Both proto_register_libvirt() and proto_reg_handoff_libvirt() are
|
||||
declared in packet-libvirt.h which is included from plugin.c.
|
||||
There's no need to provide another declaration in plugin.c.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
tools/wireshark/src/plugin.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/tools/wireshark/src/plugin.c b/tools/wireshark/src/plugin.c
|
||||
index 9a83f2ca07..19b25e7b1a 100644
|
||||
--- a/tools/wireshark/src/plugin.c
|
||||
+++ b/tools/wireshark/src/plugin.c
|
||||
@@ -72,9 +72,6 @@ void plugin_register(void)
|
||||
|
||||
#else /* WIRESHARK_VERSION >= 2009000 */
|
||||
|
||||
-void proto_register_libvirt(void);
|
||||
-void proto_reg_handoff_libvirt(void);
|
||||
-
|
||||
WS_DLL_PUBLIC_DEF const gchar plugin_version[] = PLUGIN_VERSION;
|
||||
WS_DLL_PUBLIC_DEF const int plugin_want_major = WIRESHARK_VERSION_MAJOR;
|
||||
WS_DLL_PUBLIC_DEF const int plugin_want_minor = WIRESHARK_VERSION_MINOR;
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Date: Tue, 4 Nov 2014 22:52:44 +0530
|
||||
Subject: [PATCH] PowerPC : Add support for launching VM in 'compat' mode.
|
||||
|
||||
PowerISA allows processors to run VMs in binary compatibility ("compat")
|
||||
mode supporting an older version of ISA. QEMU has recently added support to
|
||||
explicitly denote a VM running in compatibility mode through commit 6d9412ea
|
||||
& 8dfa3a5e85. Now, a "compat" mode VM can be run by invoking this qemu
|
||||
commandline on a POWER8 host: -cpu host,compat=power7.
|
||||
|
||||
This patch allows libvirt to exploit cpu mode 'host-model' to describe this
|
||||
new mode for PowerKVM guests. For example, when a user wants to request a
|
||||
power7 vm to run in compatibility mode on a Power8 host, this can be
|
||||
described in XML as follows :
|
||||
|
||||
<cpu mode='host-model'>
|
||||
<model>power7</model>
|
||||
</cpu>
|
||||
|
||||
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Signed-off-by: Li Zhang <zhlcindy@linux.vnet.ibm.com>
|
||||
Signed-off-by: Pradipta Kr. Banerjee <bpradip@in.ibm.com>
|
||||
Acked-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit addce06c9221f948072cd222b56ea9c3f70ec066)
|
||||
---
|
||||
src/conf/cpu_conf.c | 1 +
|
||||
src/cpu/cpu_powerpc.c | 11 ++---------
|
||||
src/qemu/qemu_command.c | 10 +++++++++-
|
||||
3 files changed, 12 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
|
||||
index c09c352..74f0b16 100644
|
||||
--- a/src/conf/cpu_conf.c
|
||||
+++ b/src/conf/cpu_conf.c
|
||||
@@ -624,6 +624,7 @@ virCPUDefFormatBuf(virBufferPtr buf,
|
||||
return 0;
|
||||
|
||||
formatModel = (def->mode == VIR_CPU_MODE_CUSTOM ||
|
||||
+ def->mode == VIR_CPU_MODE_HOST_MODEL ||
|
||||
(flags & VIR_DOMAIN_XML_UPDATE_CPU));
|
||||
formatFallback = (def->type == VIR_CPU_TYPE_GUEST &&
|
||||
(def->mode == VIR_CPU_MODE_HOST_MODEL ||
|
||||
diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
|
||||
index d591c18..4ea1835 100644
|
||||
--- a/src/cpu/cpu_powerpc.c
|
||||
+++ b/src/cpu/cpu_powerpc.c
|
||||
@@ -562,8 +562,8 @@ ppcUpdate(virCPUDefPtr guest,
|
||||
static virCPUDefPtr
|
||||
ppcBaseline(virCPUDefPtr *cpus,
|
||||
unsigned int ncpus,
|
||||
- const char **models,
|
||||
- unsigned int nmodels,
|
||||
+ const char **models ATTRIBUTE_UNUSED,
|
||||
+ unsigned int nmodels ATTRIBUTE_UNUSED,
|
||||
unsigned int flags)
|
||||
{
|
||||
struct ppc_map *map = NULL;
|
||||
@@ -583,13 +583,6 @@ ppcBaseline(virCPUDefPtr *cpus,
|
||||
goto error;
|
||||
}
|
||||
|
||||
- if (!cpuModelIsAllowed(model->name, models, nmodels)) {
|
||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
- _("CPU model %s is not supported by hypervisor"),
|
||||
- model->name);
|
||||
- goto error;
|
||||
- }
|
||||
-
|
||||
for (i = 0; i < ncpus; i++) {
|
||||
const struct ppc_vendor *vnd;
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index c5c48bf..423692e 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -6217,7 +6217,9 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
*hasHwVirt = hasSVM > 0 ? true : false;
|
||||
}
|
||||
|
||||
- if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
|
||||
+ if ((cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) ||
|
||||
+ ((cpu->mode == VIR_CPU_MODE_HOST_MODEL) &&
|
||||
+ ARCH_IS_PPC64(def->os.arch))) {
|
||||
const char *mode = virCPUModeTypeToString(cpu->mode);
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
@@ -6232,6 +6234,12 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
goto cleanup;
|
||||
}
|
||||
virBufferAddLit(buf, "host");
|
||||
+
|
||||
+ if (ARCH_IS_PPC64(def->os.arch) &&
|
||||
+ cpu->mode == VIR_CPU_MODE_HOST_MODEL) {
|
||||
+ virBufferAsprintf(buf, ",compat=%s", def->cpu->model);
|
||||
+ }
|
||||
+
|
||||
} else {
|
||||
if (VIR_ALLOC(guest) < 0)
|
||||
goto cleanup;
|
||||
@@ -1,47 +0,0 @@
|
||||
From 41d3b457972bde85991fa7ed6f282370aca4b2af Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <41d3b457972bde85991fa7ed6f282370aca4b2af.1760476767.git.crobinso@redhat.com>
|
||||
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 10 Oct 2025 15:20:05 +0200
|
||||
Subject: [PATCH 2/8] wireshark: Switch header files to #pragma once
|
||||
Content-type: text/plain
|
||||
|
||||
The genxdrstub.pl script generates some header files. But they
|
||||
use the old pattern to guard against multiple inclusion:
|
||||
|
||||
#ifndef SOMETHING_H
|
||||
#define SOMETHING_H
|
||||
...
|
||||
#endif
|
||||
|
||||
Change the script to generate just '#pragma once' used everywhere
|
||||
else in our code.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
tools/wireshark/util/genxdrstub.pl | 5 +----
|
||||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tools/wireshark/util/genxdrstub.pl b/tools/wireshark/util/genxdrstub.pl
|
||||
index 8cfda25a27..01b663a88c 100755
|
||||
--- a/tools/wireshark/util/genxdrstub.pl
|
||||
+++ b/tools/wireshark/util/genxdrstub.pl
|
||||
@@ -563,11 +563,8 @@ sub add_header_file {
|
||||
local $self->{header_contents} = [];
|
||||
$self->print("/* *DO NOT MODIFY* this file directly.\n");
|
||||
$self->print(" * This file was generated by $0 from libvirt version $libvirt_version */\n");
|
||||
- my $ucname = uc $name;
|
||||
- $self->print("#ifndef _$ucname\_H_\n");
|
||||
- $self->print("#define _$ucname\_H_\n");
|
||||
+ $self->print("#pragma once\n");
|
||||
$block->();
|
||||
- $self->print("#endif /* _$ucname\_H_ */");
|
||||
push @{ $self->{headers} }, [ $name, delete $self->{header_contents} ];
|
||||
}
|
||||
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Date: Tue, 4 Nov 2014 22:58:33 +0530
|
||||
Subject: [PATCH] PowerPC:Improve PVR handling to fall back to cpu generation.
|
||||
|
||||
IBM Power processors differ uniquely across generations (such as power6,
|
||||
power7, power8). Each generation signifies a new PowerISA version
|
||||
that exhibits features unique to that generation.
|
||||
The higher 16 bits of PVR for IBM Power processors encode the CPU
|
||||
generation, while the CPU chip (sub)version is encoded in lower 16 bits.
|
||||
|
||||
For all practical purposes of launching a VM, we care about the
|
||||
generation which the vCPU will belong to, and not specifically the chip
|
||||
version. This patch updates the libvirt PVR check to reflect this
|
||||
relationship. It allows libvirt to select the right CPU generation
|
||||
in case the exact match for a a specific CPU is not found.
|
||||
Hence, there will no longer be a need to add each PowerPC CPU model to
|
||||
cpu_map.xml; just adding entry for the matching ISA generation will
|
||||
suffice.
|
||||
|
||||
It also contains changes to cpu_map.xml since processor generations
|
||||
as understood by QEMU compat mode go as "power6", "power7" or "power8"
|
||||
[Reference : QEMU commit 8dfa3a5e85 ]
|
||||
|
||||
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Signed-off-by: Pradipta Kr. Banerjee <bpradip@in.ibm.com>
|
||||
Signed-off-by: Anton Blanchard <anton@samba.org>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 1e911742287d964055f33ab76d53e673a9b4477f)
|
||||
---
|
||||
src/cpu/cpu_map.xml | 30 ++++++++++++++++++++++++++++++
|
||||
src/cpu/cpu_powerpc.c | 8 ++++++++
|
||||
2 files changed, 38 insertions(+)
|
||||
|
||||
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
|
||||
index d181cd5..4ec49ca 100644
|
||||
--- a/src/cpu/cpu_map.xml
|
||||
+++ b/src/cpu/cpu_map.xml
|
||||
@@ -637,5 +637,35 @@
|
||||
<pvr value='0x004b0100'/>
|
||||
</model>
|
||||
|
||||
+ <model name='power6'>
|
||||
+ <vendor name='IBM'/>
|
||||
+ <compat isa='2.05'/>
|
||||
+ <pvr value='0x003e0000'/>
|
||||
+ </model>
|
||||
+
|
||||
+ <model name='power7'>
|
||||
+ <vendor name='IBM'/>
|
||||
+ <compat isa='2.06'/>
|
||||
+ <pvr value='0x003f0000'/>
|
||||
+ </model>
|
||||
+
|
||||
+ <model name='power7+'>
|
||||
+ <vendor name='IBM'/>
|
||||
+ <compat isa='2.06B'/>
|
||||
+ <pvr value='0x004a0000'/>
|
||||
+ </model>
|
||||
+
|
||||
+ <model name='power8e'>
|
||||
+ <vendor name='IBM'/>
|
||||
+ <compat isa='2.07'/>
|
||||
+ <pvr value='0x004b0000'/>
|
||||
+ </model>
|
||||
+
|
||||
+ <model name='power8'>
|
||||
+ <vendor name='IBM'/>
|
||||
+ <compat isa='2.07'/>
|
||||
+ <pvr value='0x004d0000'/>
|
||||
+ </model>
|
||||
+
|
||||
</arch>
|
||||
</cpus>
|
||||
diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
|
||||
index 4ea1835..531868c 100644
|
||||
--- a/src/cpu/cpu_powerpc.c
|
||||
+++ b/src/cpu/cpu_powerpc.c
|
||||
@@ -99,6 +99,14 @@ ppcModelFindPVR(const struct ppc_map *map,
|
||||
model = model->next;
|
||||
}
|
||||
|
||||
+ /* PowerPC Processor Version Register is interpreted as follows :
|
||||
+ * Higher order 16 bits : Power ISA generation.
|
||||
+ * Lower order 16 bits : CPU chip version number.
|
||||
+ * If the exact CPU isnt found, return the nearest matching CPU generation
|
||||
+ */
|
||||
+ if (pvr & 0x0000FFFFul)
|
||||
+ return ppcModelFindPVR(map, (pvr & 0xFFFF0000ul));
|
||||
+
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
From 02a0e78bf54c903da8922c56bade9b3298ade351 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <02a0e78bf54c903da8922c56bade9b3298ade351.1760476767.git.crobinso@redhat.com>
|
||||
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 13 Oct 2025 09:04:17 +0200
|
||||
Subject: [PATCH 3/8] wireshark: Move WIRESHARK_VERSION macro definition
|
||||
Content-type: text/plain
|
||||
|
||||
Soon, other parts of the wireshark code will need to
|
||||
differentiate wrt wireshark version. Therefore, move the
|
||||
WIRESHARK_VERSION macro definition among with its deps into
|
||||
packet-libvirt.h.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
tools/wireshark/src/packet-libvirt.h | 14 ++++++++++++++
|
||||
tools/wireshark/src/plugin.c | 14 --------------
|
||||
2 files changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/tools/wireshark/src/packet-libvirt.h b/tools/wireshark/src/packet-libvirt.h
|
||||
index 14e6e13696..15cfcb0534 100644
|
||||
--- a/tools/wireshark/src/packet-libvirt.h
|
||||
+++ b/tools/wireshark/src/packet-libvirt.h
|
||||
@@ -19,5 +19,19 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
+#ifdef WITH_WS_VERSION
|
||||
+# include <wireshark/ws_version.h>
|
||||
+#else
|
||||
+# include <wireshark/config.h>
|
||||
+# define WIRESHARK_VERSION_MAJOR VERSION_MAJOR
|
||||
+# define WIRESHARK_VERSION_MINOR VERSION_MINOR
|
||||
+# define WIRESHARK_VERSION_MICRO VERSION_MICRO
|
||||
+#endif
|
||||
+
|
||||
+#define WIRESHARK_VERSION \
|
||||
+ ((WIRESHARK_VERSION_MAJOR * 1000 * 1000) + \
|
||||
+ (WIRESHARK_VERSION_MINOR * 1000) + \
|
||||
+ (WIRESHARK_VERSION_MICRO))
|
||||
+
|
||||
void proto_register_libvirt(void);
|
||||
void proto_reg_handoff_libvirt(void);
|
||||
diff --git a/tools/wireshark/src/plugin.c b/tools/wireshark/src/plugin.c
|
||||
index 19b25e7b1a..64317b5280 100644
|
||||
--- a/tools/wireshark/src/plugin.c
|
||||
+++ b/tools/wireshark/src/plugin.c
|
||||
@@ -12,15 +12,6 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
-#ifdef WITH_WS_VERSION
|
||||
-# include <wireshark/ws_version.h>
|
||||
-#else
|
||||
-# include <wireshark/config.h>
|
||||
-# define WIRESHARK_VERSION_MAJOR VERSION_MAJOR
|
||||
-# define WIRESHARK_VERSION_MINOR VERSION_MINOR
|
||||
-# define WIRESHARK_VERSION_MICRO VERSION_MICRO
|
||||
-#endif
|
||||
-
|
||||
#define HAVE_PLUGINS 1
|
||||
#include <wireshark/epan/proto.h>
|
||||
/* plugins are DLLs */
|
||||
@@ -32,11 +23,6 @@
|
||||
/* Let the plugin version be the version of libvirt */
|
||||
#define PLUGIN_VERSION VERSION
|
||||
|
||||
-#define WIRESHARK_VERSION \
|
||||
- ((WIRESHARK_VERSION_MAJOR * 1000 * 1000) + \
|
||||
- (WIRESHARK_VERSION_MINOR * 1000) + \
|
||||
- (WIRESHARK_VERSION_MICRO))
|
||||
-
|
||||
#if WIRESHARK_VERSION < 2005000
|
||||
|
||||
WS_DLL_PUBLIC_DEF const gchar version[] = VERSION;
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Date: Tue, 4 Nov 2014 23:00:36 +0530
|
||||
Subject: [PATCH] docs: Add documentation for compat mode.
|
||||
|
||||
Add documentation to explain how compat-mode can be invoked with libvirt
|
||||
running on PowerPC architecture.
|
||||
It also mentions that this change is available libvirt 1.2.11 onwards.
|
||||
|
||||
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 9265fd19b68d787e478f5e490524da794965a5f1)
|
||||
---
|
||||
docs/formatdomain.html.in | 15 ++++++++++++++-
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 12172a4..6c64230 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -1047,7 +1047,20 @@
|
||||
(such as CPUID level) that don't work. Until these issues are fixed,
|
||||
it's a good idea to avoid using <code>host-model</code> and use
|
||||
<code>custom</code> mode with just the CPU model from host
|
||||
- capabilities XML.</dd>
|
||||
+ capabilities XML.
|
||||
+ <span class="since">(Since 1.2.11)</span>. PowerISA allows
|
||||
+ processors to run VMs in binary compatibility mode supporting an
|
||||
+ older version of ISA. Libvirt on PowerPC architecture uses the
|
||||
+ <code>host-model</code> to signify a guest mode CPU running in
|
||||
+ binary compatibility mode. Example:
|
||||
+ When a user needs a power7 VM to run in compatibility mode
|
||||
+ on a Power8 host, this can be described in XML as follows :
|
||||
+<pre>
|
||||
+ <cpu mode='host-model'>
|
||||
+ <model>power7</model>
|
||||
+ </cpu>
|
||||
+ ...</pre>
|
||||
+ </dd>
|
||||
<dt><code>host-passthrough</code></dt>
|
||||
<dd>With this mode, the CPU visible to the guest should be exactly
|
||||
the same as the host CPU even in the aspects that libvirt does not
|
||||
@@ -1,133 +0,0 @@
|
||||
From 7374c4ecbd591b02f7be4b2918addc6d5852aafb Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <7374c4ecbd591b02f7be4b2918addc6d5852aafb.1760476767.git.crobinso@redhat.com>
|
||||
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 13 Oct 2025 09:21:30 +0200
|
||||
Subject: [PATCH 4/8] wireshark: Fix int type of some virNetMessageHeader
|
||||
members
|
||||
Content-type: text/plain
|
||||
|
||||
Our virNetMessageHeader is a struct that's declared as follows:
|
||||
|
||||
struct virNetMessageHeader {
|
||||
unsigned prog;
|
||||
unsigned vers;
|
||||
int proc;
|
||||
virNetMessageType type;
|
||||
unsigned serial;
|
||||
virNetMessageStatus status;
|
||||
};
|
||||
|
||||
Now, per RFC 4506 enums are also encoded as signed integers. This
|
||||
means, that only 'prog', 'vers' and 'serial' are really unsigned
|
||||
integers. The others ('proc', 'type' and 'status') are encoded as
|
||||
signed integers. Fix their type when dissecting.
|
||||
|
||||
While at it, also follow latest trend in wireshark and switch
|
||||
from guint32 to uint32_t.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
tools/wireshark/src/packet-libvirt.c | 34 +++++++++++++++++++---------
|
||||
1 file changed, 23 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
|
||||
index da2aabd98a..af14c6bed7 100644
|
||||
--- a/tools/wireshark/src/packet-libvirt.c
|
||||
+++ b/tools/wireshark/src/packet-libvirt.c
|
||||
@@ -92,7 +92,7 @@ typedef gboolean (*vir_xdr_dissector_t)(tvbuff_t *tvb, proto_tree *tree, XDR *xd
|
||||
|
||||
typedef struct vir_dissector_index vir_dissector_index_t;
|
||||
struct vir_dissector_index {
|
||||
- guint32 proc;
|
||||
+ int32_t proc;
|
||||
vir_xdr_dissector_t args;
|
||||
vir_xdr_dissector_t ret;
|
||||
vir_xdr_dissector_t msg;
|
||||
@@ -275,8 +275,10 @@ dissect_xdr_array(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
|
||||
}
|
||||
|
||||
static vir_xdr_dissector_t
|
||||
-find_payload_dissector(guint32 proc, guint32 type,
|
||||
- const vir_dissector_index_t *pds, gsize length)
|
||||
+find_payload_dissector(int32_t proc,
|
||||
+ enum vir_net_message_type type,
|
||||
+ const vir_dissector_index_t *pds,
|
||||
+ gsize length)
|
||||
{
|
||||
const vir_dissector_index_t *pd;
|
||||
guint32 first, last, direction;
|
||||
@@ -309,6 +311,10 @@ find_payload_dissector(guint32 proc, guint32 type,
|
||||
return pd->ret;
|
||||
case VIR_NET_MESSAGE:
|
||||
return pd->msg;
|
||||
+ case VIR_NET_STREAM:
|
||||
+ case VIR_NET_STREAM_HOLE:
|
||||
+ /* Handled elsewhere */
|
||||
+ return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -397,8 +403,12 @@ dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
#include "libvirt/protocol.h"
|
||||
|
||||
static void
|
||||
-dissect_libvirt_payload(tvbuff_t *tvb, proto_tree *tree,
|
||||
- guint32 prog, guint32 proc, guint32 type, guint32 status)
|
||||
+dissect_libvirt_payload(tvbuff_t *tvb,
|
||||
+ proto_tree *tree,
|
||||
+ uint32_t prog,
|
||||
+ int32_t proc,
|
||||
+ int32_t type,
|
||||
+ int32_t status)
|
||||
{
|
||||
gssize payload_length;
|
||||
|
||||
@@ -430,7 +440,8 @@ dissect_libvirt_payload(tvbuff_t *tvb, proto_tree *tree,
|
||||
return;
|
||||
|
||||
unknown:
|
||||
- dbg("Cannot determine payload: Prog=%u, Proc=%u, Type=%u, Status=%u", prog, proc, type, status);
|
||||
+ dbg("Cannot determine payload: Prog=%u, Proc=%d, Type=%d, Status=%d",
|
||||
+ prog, proc, type, status);
|
||||
proto_tree_add_item(tree, hf_libvirt_unknown, tvb, VIR_HEADER_LEN, -1, ENC_NA);
|
||||
}
|
||||
|
||||
@@ -439,7 +450,8 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
void *opaque G_GNUC_UNUSED)
|
||||
{
|
||||
goffset offset;
|
||||
- guint32 prog, proc, type, serial, status;
|
||||
+ uint32_t prog, serial;
|
||||
+ int32_t proc, type, status;
|
||||
const value_string *vs;
|
||||
|
||||
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Libvirt");
|
||||
@@ -448,17 +460,17 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
offset = 4; /* End of length field */
|
||||
prog = tvb_get_ntohl(tvb, offset); offset += 4;
|
||||
offset += 4; /* Ignore version header field */
|
||||
- proc = tvb_get_ntohl(tvb, offset); offset += 4;
|
||||
- type = tvb_get_ntohl(tvb, offset); offset += 4;
|
||||
+ proc = tvb_get_ntohil(tvb, offset); offset += 4;
|
||||
+ type = tvb_get_ntohil(tvb, offset); offset += 4;
|
||||
serial = tvb_get_ntohl(tvb, offset); offset += 4;
|
||||
- status = tvb_get_ntohl(tvb, offset); offset += 4;
|
||||
+ status = tvb_get_ntohil(tvb, offset); offset += 4;
|
||||
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s",
|
||||
val_to_str(prog, program_strings, "%x"));
|
||||
|
||||
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
|
||||
if (vs == NULL) {
|
||||
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%u", proc);
|
||||
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%d", proc);
|
||||
} else {
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
|
||||
}
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Date: Tue, 4 Nov 2014 23:02:15 +0530
|
||||
Subject: [PATCH] Test: Add a testcase for PowerPC compat mode cpu
|
||||
specification.
|
||||
|
||||
This introduces a testcase for PowerPC compat mode cpu specification.
|
||||
|
||||
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 12c381114ce362e49cadb730b5faabbc150a8878)
|
||||
---
|
||||
.../qemuxml2argv-pseries-cpu-compat.args | 8 ++++++++
|
||||
.../qemuxml2argv-pseries-cpu-compat.xml | 20 ++++++++++++++++++++
|
||||
tests/qemuxml2argvtest.c | 2 ++
|
||||
3 files changed, 30 insertions(+)
|
||||
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
|
||||
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml
|
||||
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
|
||||
new file mode 100644
|
||||
index 0000000..64df406
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
|
||||
@@ -0,0 +1,8 @@
|
||||
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
|
||||
+QEMU_AUDIO_DRV=none /usr/bin/qemu-system-ppc64 -S -M pseries \
|
||||
+-cpu host,compat=power7 \
|
||||
+-m 214 -smp 4 -nographic -nodefconfig -nodefaults \
|
||||
+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
|
||||
+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -usb \
|
||||
+-chardev pty,id=charserial0 \
|
||||
+-device spapr-vty,chardev=charserial0,reg=0x30000000
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml
|
||||
new file mode 100644
|
||||
index 0000000..e34a8ad
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml
|
||||
@@ -0,0 +1,20 @@
|
||||
+<domain type='kvm'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>4</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='ppc64' machine='pseries'>hvm</type>
|
||||
+ </os>
|
||||
+ <cpu mode='host-model'>
|
||||
+ <model>power7</model>
|
||||
+ </cpu>
|
||||
+ <clock offset='utc'/>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-ppc64</emulator>
|
||||
+ <console type='pty'>
|
||||
+ <address type="spapr-vio"/>
|
||||
+ </console>
|
||||
+ <memballoon model="none"/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index 5539a84..e24d17f 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -1314,6 +1314,8 @@ mymain(void)
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_NODEFCONFIG);
|
||||
+ DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST,
|
||||
+ QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("disk-ide-drive-split",
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||
QEMU_CAPS_IDE_CD);
|
||||
@@ -1,46 +0,0 @@
|
||||
From 1086888f95a322101f8cf53b63c96600ccbeb882 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <1086888f95a322101f8cf53b63c96600ccbeb882.1760476767.git.crobinso@redhat.com>
|
||||
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 10 Oct 2025 19:16:54 +0200
|
||||
Subject: [PATCH 5/8] wireshark: Don't special case retval of
|
||||
get_program_data() in dissect_libvirt_message()
|
||||
Content-type: text/plain
|
||||
|
||||
The get_program_data() function returns a pointer (in this
|
||||
specific case to an array of procedure strings) which, if
|
||||
non-NULL is then passed val_to_str(). Well, if val_to_str() sees
|
||||
NULL it is treated gracefully, i.e. like if the numeric value
|
||||
'proc' wasn't found in the array.
|
||||
|
||||
Therefore, there's no need to special case call to
|
||||
col_append_fstr(). Both result into the same behaviour.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
tools/wireshark/src/packet-libvirt.c | 6 +-----
|
||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
|
||||
index af14c6bed7..6c729801d4 100644
|
||||
--- a/tools/wireshark/src/packet-libvirt.c
|
||||
+++ b/tools/wireshark/src/packet-libvirt.c
|
||||
@@ -469,11 +469,7 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
val_to_str(prog, program_strings, "%x"));
|
||||
|
||||
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
|
||||
- if (vs == NULL) {
|
||||
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%d", proc);
|
||||
- } else {
|
||||
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
|
||||
- }
|
||||
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
|
||||
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
|
||||
val_to_str(type, type_strings, "%d"), serial,
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 28 Apr 2015 17:38:00 -0400
|
||||
Subject: [PATCH] polkit: Allow password-less access for 'libvirt' group
|
||||
|
||||
Many users, who admin their own machines, want to be able to access
|
||||
system libvirtd via tools like virt-manager without having to enter
|
||||
a root password. Just google 'virt-manager without password' and
|
||||
you'll find many hits. I've read at least 5 blog posts over the years
|
||||
describing slightly different ways of achieving this goal.
|
||||
|
||||
Let's finally add official support for this.
|
||||
|
||||
Install a polkit-1 rules file granting password-less auth for any user
|
||||
in the new 'libvirt' group. Create the group on RPM install
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=957300
|
||||
(cherry picked from commit e94979e901517af9fdde358d7b7c92cc055dd50c)
|
||||
---
|
||||
daemon/Makefile.am | 13 +++++++++++++
|
||||
daemon/libvirt.rules | 9 +++++++++
|
||||
libvirt.spec.in | 15 +++++++++++++--
|
||||
3 files changed, 35 insertions(+), 2 deletions(-)
|
||||
create mode 100644 daemon/libvirt.rules
|
||||
|
||||
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
|
||||
index b95a79d..9c5ea37 100644
|
||||
--- a/daemon/Makefile.am
|
||||
+++ b/daemon/Makefile.am
|
||||
@@ -53,6 +53,7 @@ EXTRA_DIST = \
|
||||
libvirtd.init.in \
|
||||
libvirtd.upstart \
|
||||
libvirtd.policy.in \
|
||||
+ libvirt.rules \
|
||||
libvirtd.sasl \
|
||||
libvirtd.service.in \
|
||||
libvirtd.socket.in \
|
||||
@@ -233,6 +234,8 @@ policyauth = auth_admin_keep_session
|
||||
else ! WITH_POLKIT0
|
||||
policydir = $(datadir)/polkit-1/actions
|
||||
policyauth = auth_admin_keep
|
||||
+rulesdir = $(datadir)/polkit-1/rules.d
|
||||
+rulesfile = libvirt.rules
|
||||
endif ! WITH_POLKIT0
|
||||
endif WITH_POLKIT
|
||||
|
||||
@@ -263,9 +266,19 @@ if WITH_POLKIT
|
||||
install-data-polkit::
|
||||
$(MKDIR_P) $(DESTDIR)$(policydir)
|
||||
$(INSTALL_DATA) libvirtd.policy $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
+if ! WITH_POLKIT0
|
||||
+ $(MKDIR_P) $(DESTDIR)$(rulesdir)
|
||||
+ $(INSTALL_DATA) $(srcdir)/$(rulesfile) $(DESTDIR)$(rulesdir)/50-libvirt.rules
|
||||
+endif ! WITH_POLKIT0
|
||||
+
|
||||
uninstall-data-polkit::
|
||||
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
rmdir $(DESTDIR)$(policydir) || :
|
||||
+if ! WITH_POLKIT0
|
||||
+ rm -f $(DESTDIR)$(rulesdir)/50-libvirt.rules
|
||||
+ rmdir $(DESTDIR)$(rulesdir) || :
|
||||
+endif ! WITH_POLKIT0
|
||||
+
|
||||
else ! WITH_POLKIT
|
||||
install-data-polkit::
|
||||
uninstall-data-polkit::
|
||||
diff --git a/daemon/libvirt.rules b/daemon/libvirt.rules
|
||||
new file mode 100644
|
||||
index 0000000..01a15fa
|
||||
--- /dev/null
|
||||
+++ b/daemon/libvirt.rules
|
||||
@@ -0,0 +1,9 @@
|
||||
+// Allow any user in the 'libvirt' group to connect to system libvirtd
|
||||
+// without entering a password.
|
||||
+
|
||||
+polkit.addRule(function(action, subject) {
|
||||
+ if (action.id == "org.libvirt.unix.manage" &&
|
||||
+ subject.isInGroup("libvirt")) {
|
||||
+ return polkit.Result.YES;
|
||||
+ }
|
||||
+});
|
||||
diff --git a/libvirt.spec.in b/libvirt.spec.in
|
||||
index a84b19d..5de085b 100644
|
||||
--- a/libvirt.spec.in
|
||||
+++ b/libvirt.spec.in
|
||||
@@ -1583,9 +1583,9 @@ then
|
||||
fi
|
||||
|
||||
%if %{with_libvirtd}
|
||||
+%pre daemon
|
||||
%if ! %{with_driver_modules}
|
||||
%if %{with_qemu}
|
||||
-%pre daemon
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 6
|
||||
# We want soft static allocation of well-known ids, as disk images
|
||||
# are commonly shared across NFS mounts by id rather than name; see
|
||||
@@ -1599,11 +1599,21 @@ if ! getent passwd qemu >/dev/null; then
|
||||
useradd -r -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu
|
||||
fi
|
||||
fi
|
||||
-exit 0
|
||||
%endif
|
||||
%endif
|
||||
%endif
|
||||
|
||||
+ %if %{with_polkit}
|
||||
+ %if 0%{?fedora} || 0%{?rhel} >= 6
|
||||
+# 'libvirt' group is just to allow password-less polkit access to
|
||||
+# libvirtd. The uid number is irrelevant, so we use dynamic allocation
|
||||
+# described at the above link.
|
||||
+getent group libvirt >/dev/null || groupadd -r libvirt
|
||||
+ %endif
|
||||
+ %endif
|
||||
+
|
||||
+exit 0
|
||||
+
|
||||
%post daemon
|
||||
|
||||
%if %{with_network}
|
||||
@@ -1919,6 +1929,7 @@ exit 0
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 6
|
||||
%{_datadir}/polkit-1/actions/org.libvirt.unix.policy
|
||||
%{_datadir}/polkit-1/actions/org.libvirt.api.policy
|
||||
+%{_datadir}/polkit-1/rules.d/50-libvirt.rules
|
||||
%else
|
||||
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
|
||||
%endif
|
||||
@@ -1,68 +0,0 @@
|
||||
From ba2c4bdd5cbccd5c0673149cf76802c98b70d2f7 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <ba2c4bdd5cbccd5c0673149cf76802c98b70d2f7.1760476767.git.crobinso@redhat.com>
|
||||
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 10 Oct 2025 18:23:18 +0200
|
||||
Subject: [PATCH 6/8] wireshark: Introduce and use vir_val_to_str()
|
||||
Content-type: text/plain
|
||||
|
||||
Wireshark offers val_to_str() function which converts numeric
|
||||
value to string by looking up value ('val') in an array ('vs') of
|
||||
<val, string> pairs. If no corresponding string is found, then
|
||||
the value is formatted using given 'fmt' string.
|
||||
|
||||
Starting from wireshark-4.6.0 not only this function gained
|
||||
another argument but also returns a strdup()-ed string. To keep
|
||||
our code simple, let's introduce a wrapper so which can be then
|
||||
adjusted as needed.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
tools/wireshark/src/packet-libvirt.c | 17 +++++++++++++----
|
||||
1 file changed, 13 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
|
||||
index 6c729801d4..f6ad2c4578 100644
|
||||
--- a/tools/wireshark/src/packet-libvirt.c
|
||||
+++ b/tools/wireshark/src/packet-libvirt.c
|
||||
@@ -140,6 +140,15 @@ static const value_string status_strings[] = {
|
||||
{ -1, NULL }
|
||||
};
|
||||
|
||||
+static const char *
|
||||
+G_GNUC_PRINTF(3, 0)
|
||||
+vir_val_to_str(const uint32_t val,
|
||||
+ const value_string *vs,
|
||||
+ const char *fmt)
|
||||
+{
|
||||
+ return val_to_str(val, vs, fmt);
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
dissect_xdr_string(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
guint32 maxlen)
|
||||
@@ -466,14 +475,14 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
status = tvb_get_ntohil(tvb, offset); offset += 4;
|
||||
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s",
|
||||
- val_to_str(prog, program_strings, "%x"));
|
||||
+ vir_val_to_str(prog, program_strings, "%x"));
|
||||
|
||||
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
|
||||
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
|
||||
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", vir_val_to_str(proc, vs, "%d"));
|
||||
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
|
||||
- val_to_str(type, type_strings, "%d"), serial,
|
||||
- val_to_str(status, status_strings, "%d"));
|
||||
+ vir_val_to_str(type, type_strings, "%d"), serial,
|
||||
+ vir_val_to_str(status, status_strings, "%d"));
|
||||
|
||||
if (tree) {
|
||||
gint *hf_proc;
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -1,165 +0,0 @@
|
||||
From 002b9f559d69b92e77ab2d234df6966fecdaf0ec Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <002b9f559d69b92e77ab2d234df6966fecdaf0ec.1760476767.git.crobinso@redhat.com>
|
||||
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 10 Oct 2025 19:13:48 +0200
|
||||
Subject: [PATCH 7/8] wireshark: Don't leak column strings
|
||||
Content-type: text/plain
|
||||
|
||||
One of the problems of using val_to_str() is that it may return a
|
||||
const string from given table ('vs'), OR return an allocated one.
|
||||
Since the caller has no idea which case it is, it resides to safe
|
||||
option and don't free returned string. But that might lead to a
|
||||
memleak. This behaviour is fixed with wireshark-4.6.0 and support
|
||||
for it will be introduced soon. But first, make vir_val_to_str()
|
||||
behave like fixed val_to_str() from newer wireshark: just always
|
||||
allocate the string.
|
||||
|
||||
Now, if val_to_str() needs to allocate new memory it obtains
|
||||
allocator by calling wmem_packet_scope() which is what we may do
|
||||
too.
|
||||
|
||||
Hand in hand with that, we need to free the memory using the
|
||||
correct allocator, hence wmem_free(). But let's put it into a
|
||||
wrapper vir_wmem_free() because just like val_to_str(), it'll
|
||||
need additional argument when adapting to new wireshark.
|
||||
|
||||
Oh, and freeing the memory right after col_add_fstr() is safe as
|
||||
it uses vsnprintf() under the hood to format passed args.
|
||||
|
||||
One last thing, the wmem.h file used to live under epan/wmem/ but
|
||||
then in v3.5.0~240 [1] was moved to wsutil/wmem/.
|
||||
|
||||
1: https://gitlab.com/wireshark/wireshark/-/commit/7f9c1f5f92c131354fc8b2b88d473706786064c0
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
meson.build | 20 ++++++++++++++++
|
||||
tools/wireshark/src/meson.build | 1 +
|
||||
tools/wireshark/src/packet-libvirt.c | 35 ++++++++++++++++++++++------
|
||||
3 files changed, 49 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index bcc18b20e5..a1e0e5ecd5 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -1365,6 +1365,26 @@ if wireshark_dep.found()
|
||||
if cc.check_header('wireshark/ws_version.h')
|
||||
conf.set('WITH_WS_VERSION', 1)
|
||||
endif
|
||||
+
|
||||
+ # Find wmem.h
|
||||
+ # But it's not as easy as you'd think. Ubuntu 20.04 has split parts of
|
||||
+ # libwireshark.so into libwsutil.so but:
|
||||
+ # a) wireshark.pc never mentions it,
|
||||
+ # b) libwsutil-dev package doesn't install pkg-config file.
|
||||
+ # Fortunately, it's fixed in 24.04.
|
||||
+ if cc.check_header('wireshark/epan/wmem/wmem.h', dependencies: wireshark_dep)
|
||||
+ conf.set('WITH_WS_EPAN_WMEM', 1)
|
||||
+ elif cc.check_header('wireshark/wsutil/wmem/wmem.h', dependencies: wireshark_dep)
|
||||
+ conf.set('WITH_WS_WSUTIL_WMEM', 1)
|
||||
+ else
|
||||
+ error('Unable to locate wmem.h file')
|
||||
+ endif
|
||||
+
|
||||
+ # TODO: drop wsutil dep once support for Ubuntu 20.04 is dropped
|
||||
+ wsutil_dep = dependency('', required: false)
|
||||
+ if not cc.has_function('wmem_free', dependencies: wireshark_dep)
|
||||
+ wsutil_dep = cc.find_library('wsutil', required: true)
|
||||
+ endif
|
||||
endif
|
||||
|
||||
# generic build dependencies checks
|
||||
diff --git a/tools/wireshark/src/meson.build b/tools/wireshark/src/meson.build
|
||||
index 9b452dc5ca..ba0df913e0 100644
|
||||
--- a/tools/wireshark/src/meson.build
|
||||
+++ b/tools/wireshark/src/meson.build
|
||||
@@ -9,6 +9,7 @@ shared_library(
|
||||
],
|
||||
dependencies: [
|
||||
wireshark_dep,
|
||||
+ wsutil_dep,
|
||||
xdr_dep,
|
||||
tools_dep,
|
||||
],
|
||||
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
|
||||
index f6ad2c4578..3178ac6f27 100644
|
||||
--- a/tools/wireshark/src/packet-libvirt.c
|
||||
+++ b/tools/wireshark/src/packet-libvirt.c
|
||||
@@ -21,6 +21,11 @@
|
||||
#include <wireshark/epan/proto.h>
|
||||
#include <wireshark/epan/packet.h>
|
||||
#include <wireshark/epan/dissectors/packet-tcp.h>
|
||||
+#ifdef WITH_WS_EPAN_WMEM
|
||||
+# include <wireshark/epan/wmem/wmem.h>
|
||||
+#elif WITH_WS_WSUTIL_WMEM
|
||||
+# include <wireshark/wsutil/wmem/wmem.h>
|
||||
+#endif
|
||||
#include <rpc/types.h>
|
||||
#include <rpc/xdr.h>
|
||||
#include "packet-libvirt.h"
|
||||
@@ -140,13 +145,19 @@ static const value_string status_strings[] = {
|
||||
{ -1, NULL }
|
||||
};
|
||||
|
||||
-static const char *
|
||||
+static char *
|
||||
G_GNUC_PRINTF(3, 0)
|
||||
vir_val_to_str(const uint32_t val,
|
||||
const value_string *vs,
|
||||
const char *fmt)
|
||||
{
|
||||
- return val_to_str(val, vs, fmt);
|
||||
+ return val_to_str_wmem(wmem_packet_scope(), val, vs, fmt);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+vir_wmem_free(void *ptr)
|
||||
+{
|
||||
+ wmem_free(wmem_packet_scope(), ptr);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -462,6 +473,10 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
uint32_t prog, serial;
|
||||
int32_t proc, type, status;
|
||||
const value_string *vs;
|
||||
+ char *prog_str = NULL;
|
||||
+ char *proc_str = NULL;
|
||||
+ char *type_str = NULL;
|
||||
+ char *status_str = NULL;
|
||||
|
||||
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Libvirt");
|
||||
col_clear(pinfo->cinfo, COL_INFO);
|
||||
@@ -474,15 +489,21 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
serial = tvb_get_ntohl(tvb, offset); offset += 4;
|
||||
status = tvb_get_ntohil(tvb, offset); offset += 4;
|
||||
|
||||
- col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s",
|
||||
- vir_val_to_str(prog, program_strings, "%x"));
|
||||
+ prog_str = vir_val_to_str(prog, program_strings, "%x");
|
||||
+ col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s", prog_str);
|
||||
+ vir_wmem_free(prog_str);
|
||||
|
||||
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
|
||||
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", vir_val_to_str(proc, vs, "%d"));
|
||||
+ proc_str = vir_val_to_str(proc, vs, "%d");
|
||||
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", proc_str);
|
||||
+ vir_wmem_free(proc_str);
|
||||
|
||||
+ type_str = vir_val_to_str(type, type_strings, "%d");
|
||||
+ status_str = vir_val_to_str(status, status_strings, "%d");
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
|
||||
- vir_val_to_str(type, type_strings, "%d"), serial,
|
||||
- vir_val_to_str(status, status_strings, "%d"));
|
||||
+ type_str, serial, status_str);
|
||||
+ vir_wmem_free(status_str);
|
||||
+ vir_wmem_free(type_str);
|
||||
|
||||
if (tree) {
|
||||
gint *hf_proc;
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -1,493 +0,0 @@
|
||||
From b42a12174c787b99cd6fcb29b44e4b13bd64ee58 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <b42a12174c787b99cd6fcb29b44e4b13bd64ee58.1760476767.git.crobinso@redhat.com>
|
||||
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 10 Oct 2025 15:22:34 +0200
|
||||
Subject: [PATCH 8/8] wireshark: Adapt to wireshark-4.6.0
|
||||
Content-type: text/plain
|
||||
|
||||
The main difference is that wmem_packet_scope() is gone [1] but
|
||||
the packet_info struct has 'pool` member which points to the
|
||||
allocator used for given packet.
|
||||
|
||||
Unfortunately, while we were given pointer to packet_info at the
|
||||
entry level to our dissector (dissect_libvirt() ->
|
||||
tcp_dissect_pdus() -> dissect_libvirt_message()) it was never
|
||||
propagated to generated/primitive dissectors.
|
||||
|
||||
But not all dissectors need to allocate memory, so mark the new
|
||||
argument as unused. And while our generator could be rewritten so
|
||||
that the argument is annotated as unused iff it's really unused,
|
||||
I couldn't bother rewriting it. It's generated code after all.
|
||||
Too much work for little gain.
|
||||
|
||||
Another significant change is that val_to_str() now requires new
|
||||
argument: pointer to allocator to use because it always allocates
|
||||
new memory [2][3].
|
||||
|
||||
1: https://gitlab.com/wireshark/wireshark/-/commit/5ca5c9ca372e06881b23ba9f4fdcb6b479886444
|
||||
2: https://gitlab.com/wireshark/wireshark/-/commit/b63599762468e4cf1783419a5556377604d344bb
|
||||
3: https://gitlab.com/wireshark/wireshark/-/commit/84799be215313e61b83a3eaf074f89d6ee349b8c
|
||||
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/823
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
tools/wireshark/src/packet-libvirt.c | 157 +++++++++++++++++++--------
|
||||
tools/wireshark/util/genxdrstub.pl | 18 +--
|
||||
2 files changed, 119 insertions(+), 56 deletions(-)
|
||||
|
||||
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
|
||||
index 3178ac6f27..c5c8fb4756 100644
|
||||
--- a/tools/wireshark/src/packet-libvirt.c
|
||||
+++ b/tools/wireshark/src/packet-libvirt.c
|
||||
@@ -63,7 +63,7 @@ static gint ett_libvirt_stream_hole = -1;
|
||||
|
||||
#define XDR_PRIMITIVE_DISSECTOR(xtype, ctype, ftype) \
|
||||
static gboolean \
|
||||
- dissect_xdr_##xtype(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf) \
|
||||
+ dissect_xdr_##xtype(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf) \
|
||||
{ \
|
||||
goffset start; \
|
||||
ctype val; \
|
||||
@@ -93,7 +93,7 @@ XDR_PRIMITIVE_DISSECTOR(bool, bool_t, boolean)
|
||||
|
||||
VIR_WARNINGS_RESET
|
||||
|
||||
-typedef gboolean (*vir_xdr_dissector_t)(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf);
|
||||
+typedef gboolean (*vir_xdr_dissector_t)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, XDR *xdrs, int hf);
|
||||
|
||||
typedef struct vir_dissector_index vir_dissector_index_t;
|
||||
struct vir_dissector_index {
|
||||
@@ -146,22 +146,32 @@ static const value_string status_strings[] = {
|
||||
};
|
||||
|
||||
static char *
|
||||
-G_GNUC_PRINTF(3, 0)
|
||||
-vir_val_to_str(const uint32_t val,
|
||||
+G_GNUC_PRINTF(4, 0)
|
||||
+vir_val_to_str(packet_info *pinfo,
|
||||
+ const uint32_t val,
|
||||
const value_string *vs,
|
||||
const char *fmt)
|
||||
{
|
||||
- return val_to_str_wmem(wmem_packet_scope(), val, vs, fmt);
|
||||
+#if WIRESHARK_VERSION < 4006000
|
||||
+ return val_to_str_wmem(pinfo->pool, val, vs, fmt);
|
||||
+#else
|
||||
+ return val_to_str(pinfo->pool, val, vs, fmt);
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void
|
||||
-vir_wmem_free(void *ptr)
|
||||
+vir_wmem_free(packet_info *pinfo,
|
||||
+ void *ptr)
|
||||
{
|
||||
- wmem_free(wmem_packet_scope(), ptr);
|
||||
+ wmem_free(pinfo->pool, ptr);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_string(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
+dissect_xdr_string(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo G_GNUC_UNUSED,
|
||||
+ proto_tree *tree,
|
||||
+ XDR *xdrs,
|
||||
+ int hf,
|
||||
guint32 maxlen)
|
||||
{
|
||||
goffset start;
|
||||
@@ -179,7 +189,11 @@ dissect_xdr_string(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_opaque(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
+dissect_xdr_opaque(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ XDR *xdrs,
|
||||
+ int hf,
|
||||
guint32 size)
|
||||
{
|
||||
goffset start;
|
||||
@@ -190,7 +204,7 @@ dissect_xdr_opaque(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
start = xdr_getpos(xdrs);
|
||||
if ((rc = xdr_opaque(xdrs, (caddr_t)val, size))) {
|
||||
gint len = xdr_getpos(xdrs) - start;
|
||||
- const char *s = tvb_bytes_to_str(wmem_packet_scope(), tvb, start, len);
|
||||
+ const char *s = tvb_bytes_to_str(pinfo->pool, tvb, start, len);
|
||||
|
||||
proto_tree_add_bytes_format_value(tree, hf, tvb, start, len, NULL, "%s", s);
|
||||
} else {
|
||||
@@ -202,7 +216,11 @@ dissect_xdr_opaque(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_bytes(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
+dissect_xdr_bytes(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ XDR *xdrs,
|
||||
+ int hf,
|
||||
guint32 maxlen)
|
||||
{
|
||||
goffset start;
|
||||
@@ -212,7 +230,7 @@ dissect_xdr_bytes(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
start = xdr_getpos(xdrs);
|
||||
if (xdr_bytes(xdrs, (char **)&val, &length, maxlen)) {
|
||||
gint len = xdr_getpos(xdrs) - start;
|
||||
- const char *s = tvb_bytes_to_str(wmem_packet_scope(), tvb, start, len);
|
||||
+ const char *s = tvb_bytes_to_str(pinfo->pool, tvb, start, len);
|
||||
|
||||
proto_tree_add_bytes_format_value(tree, hf, tvb, start, len, NULL, "%s", s);
|
||||
free(val);
|
||||
@@ -224,7 +242,11 @@ dissect_xdr_bytes(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_pointer(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
+dissect_xdr_pointer(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ XDR *xdrs,
|
||||
+ int hf,
|
||||
vir_xdr_dissector_t dissect)
|
||||
{
|
||||
goffset start;
|
||||
@@ -236,7 +258,7 @@ dissect_xdr_pointer(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
return FALSE;
|
||||
}
|
||||
if (not_null) {
|
||||
- return dissect(tvb, tree, xdrs, hf);
|
||||
+ return dissect(tvb, pinfo, tree, xdrs, hf);
|
||||
} else {
|
||||
proto_item *ti;
|
||||
ti = proto_tree_add_item(tree, hf, tvb, start, xdr_getpos(xdrs) - start, ENC_NA);
|
||||
@@ -246,15 +268,22 @@ dissect_xdr_pointer(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_iterable(tvbuff_t *tvb, proto_item *ti, XDR *xdrs, gint ett, int rhf,
|
||||
- guint32 length, vir_xdr_dissector_t dissect, goffset start)
|
||||
+dissect_xdr_iterable(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_item *ti,
|
||||
+ XDR *xdrs,
|
||||
+ gint ett,
|
||||
+ int rhf,
|
||||
+ guint32 length,
|
||||
+ vir_xdr_dissector_t dissect,
|
||||
+ goffset start)
|
||||
{
|
||||
proto_tree *tree;
|
||||
guint32 i;
|
||||
|
||||
tree = proto_item_add_subtree(ti, ett);
|
||||
for (i = 0; i < length; i++) {
|
||||
- if (!dissect(tvb, tree, xdrs, rhf))
|
||||
+ if (!dissect(tvb, pinfo, tree, xdrs, rhf))
|
||||
return FALSE;
|
||||
}
|
||||
proto_item_set_len(ti, xdr_getpos(xdrs) - start);
|
||||
@@ -262,8 +291,16 @@ dissect_xdr_iterable(tvbuff_t *tvb, proto_item *ti, XDR *xdrs, gint ett, int rhf
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_vector(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
|
||||
- int rhf, const gchar *rtype, guint32 size, vir_xdr_dissector_t dissect)
|
||||
+dissect_xdr_vector(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ XDR *xdrs,
|
||||
+ int hf,
|
||||
+ gint ett,
|
||||
+ int rhf,
|
||||
+ const gchar *rtype,
|
||||
+ guint32 size,
|
||||
+ vir_xdr_dissector_t dissect)
|
||||
{
|
||||
goffset start;
|
||||
proto_item *ti;
|
||||
@@ -271,12 +308,20 @@ dissect_xdr_vector(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
|
||||
start = xdr_getpos(xdrs);
|
||||
ti = proto_tree_add_item(tree, hf, tvb, start, -1, ENC_NA);
|
||||
proto_item_append_text(ti, " :: %s[%u]", rtype, size);
|
||||
- return dissect_xdr_iterable(tvb, ti, xdrs, ett, rhf, size, dissect, start);
|
||||
+ return dissect_xdr_iterable(tvb, pinfo, ti, xdrs, ett, rhf, size, dissect, start);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_array(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
|
||||
- int rhf, const gchar *rtype, guint32 maxlen, vir_xdr_dissector_t dissect)
|
||||
+dissect_xdr_array(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ XDR *xdrs,
|
||||
+ int hf,
|
||||
+ gint ett,
|
||||
+ int rhf,
|
||||
+ const gchar *rtype,
|
||||
+ guint32 maxlen,
|
||||
+ vir_xdr_dissector_t dissect)
|
||||
{
|
||||
goffset start;
|
||||
proto_item *ti;
|
||||
@@ -291,7 +336,7 @@ dissect_xdr_array(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
|
||||
|
||||
ti = proto_tree_add_item(tree, hf, tvb, start, -1, ENC_NA);
|
||||
proto_item_append_text(ti, " :: %s<%u>", rtype, length);
|
||||
- return dissect_xdr_iterable(tvb, ti, xdrs, ett, rhf, length, dissect, start);
|
||||
+ return dissect_xdr_iterable(tvb, pinfo, ti, xdrs, ett, rhf, length, dissect, start);
|
||||
}
|
||||
|
||||
static vir_xdr_dissector_t
|
||||
@@ -340,7 +385,10 @@ find_payload_dissector(int32_t proc,
|
||||
}
|
||||
|
||||
static void
|
||||
-dissect_libvirt_stream(tvbuff_t *tvb, proto_tree *tree, gint payload_length)
|
||||
+dissect_libvirt_stream(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo G_GNUC_UNUSED,
|
||||
+ proto_tree *tree,
|
||||
+ gint payload_length)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_libvirt_stream, tvb, VIR_HEADER_LEN,
|
||||
payload_length - VIR_HEADER_LEN, ENC_NA);
|
||||
@@ -357,6 +405,7 @@ dissect_libvirt_num_of_fds(tvbuff_t *tvb, proto_tree *tree)
|
||||
|
||||
static void
|
||||
dissect_libvirt_fds(tvbuff_t *tvb G_GNUC_UNUSED,
|
||||
+ packet_info *pinfo G_GNUC_UNUSED,
|
||||
gint start G_GNUC_UNUSED,
|
||||
gint32 nfds G_GNUC_UNUSED)
|
||||
{
|
||||
@@ -364,8 +413,12 @@ dissect_libvirt_fds(tvbuff_t *tvb G_GNUC_UNUSED,
|
||||
}
|
||||
|
||||
static void
|
||||
-dissect_libvirt_payload_xdr_data(tvbuff_t *tvb, proto_tree *tree, gint payload_length,
|
||||
- gint32 status, vir_xdr_dissector_t dissect)
|
||||
+dissect_libvirt_payload_xdr_data(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ gint payload_length,
|
||||
+ gint32 status,
|
||||
+ vir_xdr_dissector_t dissect)
|
||||
{
|
||||
gint32 nfds = 0;
|
||||
gint start = VIR_HEADER_LEN;
|
||||
@@ -384,17 +437,21 @@ dissect_libvirt_payload_xdr_data(tvbuff_t *tvb, proto_tree *tree, gint payload_l
|
||||
payload_data = (caddr_t)tvb_memdup(NULL, payload_tvb, 0, payload_length);
|
||||
xdrmem_create(&xdrs, payload_data, payload_length, XDR_DECODE);
|
||||
|
||||
- dissect(payload_tvb, tree, &xdrs, -1);
|
||||
+ dissect(payload_tvb, pinfo, tree, &xdrs, -1);
|
||||
|
||||
xdr_destroy(&xdrs);
|
||||
g_free(payload_data);
|
||||
|
||||
if (nfds != 0)
|
||||
- dissect_libvirt_fds(tvb, start + payload_length, nfds);
|
||||
+ dissect_libvirt_fds(tvb, pinfo, start + payload_length, nfds);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
+dissect_xdr_stream_hole(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ XDR *xdrs,
|
||||
+ int hf)
|
||||
{
|
||||
goffset start;
|
||||
proto_item *ti;
|
||||
@@ -411,10 +468,10 @@ dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
tree = proto_item_add_subtree(ti, ett_libvirt_stream_hole);
|
||||
|
||||
hf = hf_libvirt_stream_hole_length;
|
||||
- if (!dissect_xdr_hyper(tvb, tree, xdrs, hf)) return FALSE;
|
||||
+ if (!dissect_xdr_hyper(tvb, pinfo, tree, xdrs, hf)) return FALSE;
|
||||
|
||||
hf = hf_libvirt_stream_hole_flags;
|
||||
- if (!dissect_xdr_u_int(tvb, tree, xdrs, hf)) return FALSE;
|
||||
+ if (!dissect_xdr_u_int(tvb, pinfo, tree, xdrs, hf)) return FALSE;
|
||||
|
||||
proto_item_set_len(ti, xdr_getpos(xdrs) - start);
|
||||
return TRUE;
|
||||
@@ -424,6 +481,7 @@ dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
|
||||
static void
|
||||
dissect_libvirt_payload(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
proto_tree *tree,
|
||||
uint32_t prog,
|
||||
int32_t proc,
|
||||
@@ -447,13 +505,13 @@ dissect_libvirt_payload(tvbuff_t *tvb,
|
||||
xd = find_payload_dissector(proc, type, pds, *len);
|
||||
if (xd == NULL)
|
||||
goto unknown;
|
||||
- dissect_libvirt_payload_xdr_data(tvb, tree, payload_length, status, xd);
|
||||
+ dissect_libvirt_payload_xdr_data(tvb, pinfo, tree, payload_length, status, xd);
|
||||
} else if (status == VIR_NET_ERROR) {
|
||||
- dissect_libvirt_payload_xdr_data(tvb, tree, payload_length, status, dissect_xdr_remote_error);
|
||||
+ dissect_libvirt_payload_xdr_data(tvb, pinfo, tree, payload_length, status, dissect_xdr_remote_error);
|
||||
} else if (type == VIR_NET_STREAM) { /* implicitly, status == VIR_NET_CONTINUE */
|
||||
- dissect_libvirt_stream(tvb, tree, payload_length);
|
||||
+ dissect_libvirt_stream(tvb, pinfo, tree, payload_length);
|
||||
} else if (type == VIR_NET_STREAM_HOLE) {
|
||||
- dissect_libvirt_payload_xdr_data(tvb, tree, payload_length, status, dissect_xdr_stream_hole);
|
||||
+ dissect_libvirt_payload_xdr_data(tvb, pinfo, tree, payload_length, status, dissect_xdr_stream_hole);
|
||||
} else {
|
||||
goto unknown;
|
||||
}
|
||||
@@ -489,21 +547,21 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
serial = tvb_get_ntohl(tvb, offset); offset += 4;
|
||||
status = tvb_get_ntohil(tvb, offset); offset += 4;
|
||||
|
||||
- prog_str = vir_val_to_str(prog, program_strings, "%x");
|
||||
+ prog_str = vir_val_to_str(pinfo, prog, program_strings, "%x");
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s", prog_str);
|
||||
- vir_wmem_free(prog_str);
|
||||
+ vir_wmem_free(pinfo, prog_str);
|
||||
|
||||
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
|
||||
- proc_str = vir_val_to_str(proc, vs, "%d");
|
||||
+ proc_str = vir_val_to_str(pinfo, proc, vs, "%d");
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", proc_str);
|
||||
- vir_wmem_free(proc_str);
|
||||
+ vir_wmem_free(pinfo, proc_str);
|
||||
|
||||
- type_str = vir_val_to_str(type, type_strings, "%d");
|
||||
- status_str = vir_val_to_str(status, status_strings, "%d");
|
||||
+ type_str = vir_val_to_str(pinfo, type, type_strings, "%d");
|
||||
+ status_str = vir_val_to_str(pinfo, status, status_strings, "%d");
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
|
||||
type_str, serial, status_str);
|
||||
- vir_wmem_free(status_str);
|
||||
- vir_wmem_free(type_str);
|
||||
+ vir_wmem_free(pinfo, status_str);
|
||||
+ vir_wmem_free(pinfo, type_str);
|
||||
|
||||
if (tree) {
|
||||
gint *hf_proc;
|
||||
@@ -532,21 +590,26 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
proto_tree_add_item(libvirt_tree, hf_libvirt_status, tvb, offset, 4, ENC_NA); offset += 4;
|
||||
|
||||
/* Dissect payload remaining */
|
||||
- dissect_libvirt_payload(tvb, libvirt_tree, prog, proc, type, status);
|
||||
+ dissect_libvirt_payload(tvb, pinfo, libvirt_tree, prog, proc, type, status);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static guint
|
||||
-get_message_len(packet_info *pinfo G_GNUC_UNUSED, tvbuff_t *tvb, int offset, void *data G_GNUC_UNUSED)
|
||||
+get_message_len(packet_info *pinfo G_GNUC_UNUSED,
|
||||
+ tvbuff_t *tvb,
|
||||
+ int offset,
|
||||
+ void *data G_GNUC_UNUSED)
|
||||
{
|
||||
return tvb_get_ntohl(tvb, offset);
|
||||
}
|
||||
|
||||
static int
|
||||
-dissect_libvirt(tvbuff_t *tvb, packet_info *pinfo,
|
||||
- proto_tree *tree, void *data G_GNUC_UNUSED)
|
||||
+dissect_libvirt(tvbuff_t *tvb,
|
||||
+ packet_info *pinfo,
|
||||
+ proto_tree *tree,
|
||||
+ void *data G_GNUC_UNUSED)
|
||||
{
|
||||
/* Another magic const - 4; simply, how much bytes
|
||||
* is needed to tell the length of libvirt packet. */
|
||||
diff --git a/tools/wireshark/util/genxdrstub.pl b/tools/wireshark/util/genxdrstub.pl
|
||||
index 01b663a88c..f69695c091 100755
|
||||
--- a/tools/wireshark/util/genxdrstub.pl
|
||||
+++ b/tools/wireshark/util/genxdrstub.pl
|
||||
@@ -250,7 +250,7 @@ sub xdr_type {
|
||||
sub render_caller {
|
||||
my ($self, $hfid) = @_;
|
||||
my $name = $c->rinc( 'dissect_xdr_'.($self->idstrip || lc($self->xdr_type)) );
|
||||
- "$name(tvb, tree, xdrs, hf)";
|
||||
+ "$name(tvb, pinfo, tree, xdrs, hf)";
|
||||
}
|
||||
|
||||
sub ft_type {
|
||||
@@ -345,7 +345,7 @@ BEGIN{::register_profile(
|
||||
sub render_caller {
|
||||
my ($self) = @_;
|
||||
my ($klass) = ref($self) =~ /([^:]+)$/;
|
||||
- sprintf '%s(tvb, tree, xdrs, hf, %s)',
|
||||
+ sprintf '%s(tvb, pinfo, tree, xdrs, hf, %s)',
|
||||
$c->rinc('dissect_xdr_'.lc($klass)),
|
||||
$c->rinc('dissect_xdr_'.$self->reftype->idstrip);
|
||||
}
|
||||
@@ -359,7 +359,7 @@ BEGIN{::register_profile(
|
||||
sub render_caller {
|
||||
my ($self, $hfid) = @_;
|
||||
my ($klass) = ref($self) =~ /([^:]+)$/;
|
||||
- sprintf '%s(tvb, tree, xdrs, hf, %s)',
|
||||
+ sprintf '%s(tvb, pinfo, tree, xdrs, hf, %s)',
|
||||
$c->rinc('dissect_xdr_'.lc($klass)), $self->length || '~0';
|
||||
}
|
||||
|
||||
@@ -447,7 +447,7 @@ BEGIN{::register_profile(
|
||||
sub render_caller {
|
||||
my ($self, $hfid) = @_;
|
||||
my ($pname) = reverse split /__/, $hfid;
|
||||
- sprintf 'dissect_xdr_array(tvb, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
|
||||
+ sprintf 'dissect_xdr_array(tvb, pinfo, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
|
||||
$c->rinc('ett_'.$self->idstrip),
|
||||
$c->rinc("hf_$hfid\__$pname"),
|
||||
$self->reftype->idstrip,
|
||||
@@ -476,7 +476,7 @@ BEGIN{::register_profile(
|
||||
sub render_caller {
|
||||
my ($self, $hfid) = @_;
|
||||
my ($pname) = reverse split /__/, $hfid;
|
||||
- sprintf 'dissect_xdr_vector(tvb, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
|
||||
+ sprintf 'dissect_xdr_vector(tvb, pinfo, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
|
||||
$c->rinc('ett_'.$self->idstrip),
|
||||
$c->rinc("hf_$hfid\__$pname"),
|
||||
$self->reftype->idstrip,
|
||||
@@ -857,7 +857,7 @@ __END__<<DUMMY # Dummy heredoc to disable perl syntax highlighting
|
||||
my ($self, $ident) = @_;
|
||||
return if $self->is_primitive;
|
||||
%>
|
||||
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
|
||||
{
|
||||
return <%= $self->dealias->render_caller($self->ident eq $ident ? undef : $ident) %>;
|
||||
}
|
||||
@@ -865,7 +865,7 @@ static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *
|
||||
<% my ($self, $ident) = @_;
|
||||
my $hfvar = $c->rinc('hf_'.$self->idstrip);
|
||||
%>
|
||||
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
|
||||
{
|
||||
goffset start;
|
||||
proto_item *ti;
|
||||
@@ -890,7 +890,7 @@ static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *
|
||||
}
|
||||
@@ Sym::Type::Enum#render_dissector
|
||||
<% my ($self, $ident) = @_; %>
|
||||
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
|
||||
{
|
||||
goffset start;
|
||||
enum { DUMMY } es;
|
||||
@@ -914,7 +914,7 @@ static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *
|
||||
my ($self, $ident) = @_;
|
||||
my $decl_type = $self->decl->type->idstrip;
|
||||
%>
|
||||
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
|
||||
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
|
||||
{
|
||||
gboolean rc = TRUE;
|
||||
goffset start;
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# Makefile for source rpm: libvirt
|
||||
# $Id$
|
||||
NAME := libvirt
|
||||
SPECFILE = $(firstword $(wildcard *.spec))
|
||||
|
||||
define find-makefile-common
|
||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
||||
|
||||
ifeq ($(MAKEFILE_COMMON),)
|
||||
# attempt a checkout
|
||||
define checkout-makefile-common
|
||||
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
||||
endif
|
||||
|
||||
include $(MAKEFILE_COMMON)
|
||||
+2643
-2295
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user