Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10e74b75cb | ||
|
|
67283bdf89 | ||
|
|
e092293a63 | ||
|
|
41a6b3c03f | ||
|
|
31256f3d0d | ||
|
|
abac39a1b8 | ||
|
|
39e9be886f | ||
|
|
3db4281bc0 | ||
|
|
249ba7e495 | ||
|
|
33a8555d08 | ||
|
|
dfb6f9eee6 | ||
|
|
f5c4597c0a | ||
|
|
766bb232e8 | ||
|
|
266d5e2fcb | ||
|
|
c6cfdf3963 | ||
|
|
e3da3b01fc | ||
|
|
b340367499 | ||
|
|
ca7cc971b8 | ||
|
|
774125b7ed |
@@ -0,0 +1,41 @@
|
|||||||
|
From 845210011a9ffd9d17e30c51cbc81ba67c5d3166 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Tue, 20 Jan 2026 10:08:29 +0100
|
||||||
|
Subject: [PATCH] esx: Allow connecting to IPv6 server
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
When connecting to a VMWare server, the hostname from URI is
|
||||||
|
resolved using esxUtil_ResolveHostname() which in turn calls
|
||||||
|
getaddrinfo(). But in the hints argument, we restrict the return
|
||||||
|
address to be IPv4 (AF_INET) which obviously fails if the address
|
||||||
|
to resolve is an IPv6 address. Set the hint to AF_UNSPEC which
|
||||||
|
allows both IPv4 and IPv6. While at it, also allow IPv4 addresses
|
||||||
|
mapped in IPv6 by setting AI_V4MAPPED flag.
|
||||||
|
|
||||||
|
Resolves: https://issues.redhat.com/browse/RHEL-138300
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/esx/esx_util.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c
|
||||||
|
index 88b3dc893f..a6275babd5 100644
|
||||||
|
--- a/src/esx/esx_util.c
|
||||||
|
+++ b/src/esx/esx_util.c
|
||||||
|
@@ -275,8 +275,8 @@ esxUtil_ResolveHostname(const char *hostname, char **ipAddress)
|
||||||
|
int errcode;
|
||||||
|
g_autofree char *address = NULL;
|
||||||
|
|
||||||
|
- hints.ai_flags = AI_ADDRCONFIG;
|
||||||
|
- hints.ai_family = AF_INET;
|
||||||
|
+ hints.ai_flags = AI_ADDRCONFIG | AI_V4MAPPED;
|
||||||
|
+ hints.ai_family = AF_UNSPEC;
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
hints.ai_protocol = 0;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.52.0
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
+75
-47
@@ -6,7 +6,7 @@
|
|||||||
%define min_rhel 9
|
%define min_rhel 9
|
||||||
%define min_fedora 41
|
%define min_fedora 41
|
||||||
|
|
||||||
%define arches_qemu_kvm %{ix86} x86_64 %{power64} %{arm} aarch64 s390x riscv64
|
%define arches_qemu_kvm %{ix86} x86_64 %{power64} aarch64 s390x riscv64
|
||||||
%if 0%{?rhel}
|
%if 0%{?rhel}
|
||||||
%if 0%{?rhel} >= 10
|
%if 0%{?rhel} >= 10
|
||||||
%define arches_qemu_kvm x86_64 aarch64 s390x riscv64
|
%define arches_qemu_kvm x86_64 aarch64 s390x riscv64
|
||||||
@@ -32,12 +32,22 @@
|
|||||||
%define arches_ch x86_64 aarch64
|
%define arches_ch x86_64 aarch64
|
||||||
|
|
||||||
# The hypervisor drivers that run in libvirtd
|
# The hypervisor drivers that run in libvirtd
|
||||||
%define with_qemu 0%{!?_without_qemu:1}
|
|
||||||
%define with_lxc 0%{!?_without_lxc:1}
|
%define with_lxc 0%{!?_without_lxc:1}
|
||||||
%define with_libxl 0%{!?_without_libxl:1}
|
%define with_libxl 0%{!?_without_libxl:1}
|
||||||
%define with_vbox 0%{!?_without_vbox:1}
|
%define with_vbox 0%{!?_without_vbox:1}
|
||||||
%define with_ch 0%{!?_without_ch:1}
|
%define with_ch 0%{!?_without_ch:1}
|
||||||
|
|
||||||
|
%ifarch %{arches_64bit}
|
||||||
|
%define with_qemu 0%{!?_without_qemu:1}
|
||||||
|
%else
|
||||||
|
# QEMU drops 32-bit in Fedora 44
|
||||||
|
%if 0%{?fedora} > 43
|
||||||
|
%define with_qemu 0
|
||||||
|
%else
|
||||||
|
%define with_qemu 0%{!?_without_qemu:1}
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
%ifarch %{arches_qemu_kvm}
|
%ifarch %{arches_qemu_kvm}
|
||||||
%define with_qemu_kvm %{with_qemu}
|
%define with_qemu_kvm %{with_qemu}
|
||||||
%else
|
%else
|
||||||
@@ -93,7 +103,6 @@
|
|||||||
|
|
||||||
# Other optional features
|
# Other optional features
|
||||||
%define with_numactl 0%{!?_without_numactl:1}
|
%define with_numactl 0%{!?_without_numactl:1}
|
||||||
%define with_userfaultfd_sysctl 0%{!?_without_userfaultfd_sysctl:1}
|
|
||||||
|
|
||||||
# A few optional bits off by default, we enable later
|
# A few optional bits off by default, we enable later
|
||||||
%define with_fuse 0
|
%define with_fuse 0
|
||||||
@@ -254,19 +263,14 @@
|
|||||||
|
|
||||||
# RHEL releases provide stable tool chains and so it is safe to turn
|
# RHEL releases provide stable tool chains and so it is safe to turn
|
||||||
# compiler warning into errors without being worried about frequent
|
# compiler warning into errors without being worried about frequent
|
||||||
# changes in reported warnings
|
# changes in reported warnings. ELN is a rebuild of Rawhide so should
|
||||||
%if 0%{?rhel}
|
# be treated as unstable for this flag
|
||||||
|
%if 0%{?rhel} && !0%{?eln}
|
||||||
%define enable_werror -Dwerror=true
|
%define enable_werror -Dwerror=true
|
||||||
%else
|
%else
|
||||||
%define enable_werror -Dwerror=false -Dgit_werror=disabled
|
%define enable_werror -Dwerror=false -Dgit_werror=disabled
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Fedora and RHEL-9 are new enough to support /dev/userfaultfd, which
|
|
||||||
# does not require enabling vm.unprivileged_userfaultfd sysctl.
|
|
||||||
%if 0%{?fedora} || 0%{?rhel}
|
|
||||||
%define with_userfaultfd_sysctl 0
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%define tls_priority "@LIBVIRT,SYSTEM"
|
%define tls_priority "@LIBVIRT,SYSTEM"
|
||||||
|
|
||||||
# libvirt 8.1.0 stops distributing any sysconfig files.
|
# libvirt 8.1.0 stops distributing any sysconfig files.
|
||||||
@@ -290,7 +294,7 @@
|
|||||||
|
|
||||||
Summary: Library providing a simple virtualization API
|
Summary: Library providing a simple virtualization API
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 11.6.0
|
Version: 12.0.0
|
||||||
Release: 3%{?dist}
|
Release: 3%{?dist}
|
||||||
License: GPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND OFL-1.1
|
License: GPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND OFL-1.1
|
||||||
URL: https://libvirt.org/
|
URL: https://libvirt.org/
|
||||||
@@ -300,15 +304,9 @@ URL: https://libvirt.org/
|
|||||||
%endif
|
%endif
|
||||||
Source: https://download.libvirt.org/%{?mainturl}libvirt-%{version}.tar.xz
|
Source: https://download.libvirt.org/%{?mainturl}libvirt-%{version}.tar.xz
|
||||||
|
|
||||||
Patch: 0001-wireshark-Drop-needless-declaration-of-proto_registe.patch
|
# Fix IPv6 connections to ESXi
|
||||||
Patch: 0002-wireshark-Switch-header-files-to-pragma-once.patch
|
# Upstream in > 12.0.0
|
||||||
Patch: 0003-wireshark-Move-WIRESHARK_VERSION-macro-definition.patch
|
Patch: 0001-esx-Allow-connecting-to-IPv6-server.patch
|
||||||
Patch: 0004-wireshark-Fix-int-type-of-some-virNetMessageHeader-m.patch
|
|
||||||
Patch: 0005-wireshark-Don-t-special-case-retval-of-get_program_d.patch
|
|
||||||
Patch: 0006-wireshark-Introduce-and-use-vir_val_to_str.patch
|
|
||||||
Patch: 0007-wireshark-Don-t-leak-column-strings.patch
|
|
||||||
Patch: 0008-wireshark-Adapt-to-wireshark-4.6.0.patch
|
|
||||||
|
|
||||||
|
|
||||||
Requires: libvirt-daemon = %{version}-%{release}
|
Requires: libvirt-daemon = %{version}-%{release}
|
||||||
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
||||||
@@ -345,9 +343,9 @@ Requires: libvirt-libs = %{version}-%{release}
|
|||||||
# listed against each sub-RPM
|
# listed against each sub-RPM
|
||||||
BuildRequires: python3-docutils
|
BuildRequires: python3-docutils
|
||||||
BuildRequires: meson >= 0.56.0
|
BuildRequires: meson >= 0.56.0
|
||||||
BuildRequires: ninja-build
|
BuildRequires: ninja
|
||||||
BuildRequires: git-core
|
BuildRequires: git-core
|
||||||
BuildRequires: perl-interpreter
|
BuildRequires: perl
|
||||||
BuildRequires: python3
|
BuildRequires: python3
|
||||||
BuildRequires: python3-pytest
|
BuildRequires: python3-pytest
|
||||||
# For xmllint
|
# For xmllint
|
||||||
@@ -363,15 +361,15 @@ BuildRequires: gcc
|
|||||||
%if %{with_libxl}
|
%if %{with_libxl}
|
||||||
BuildRequires: xen-devel
|
BuildRequires: xen-devel
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: glib2-devel >= 2.66
|
BuildRequires: glib-devel >= 2.66
|
||||||
BuildRequires: libxml2-devel
|
BuildRequires: libxml2-devel
|
||||||
BuildRequires: readline-devel
|
BuildRequires: readline-devel
|
||||||
BuildRequires: pkgconfig(bash-completion) >= 2.0
|
BuildRequires: pkgconfig(bash-completion) >= 2.0
|
||||||
BuildRequires: libtasn1-devel
|
BuildRequires: libtasn1-devel
|
||||||
BuildRequires: gnutls-devel
|
BuildRequires: gnutls-devel
|
||||||
BuildRequires: libattr-devel
|
BuildRequires: attr-devel
|
||||||
# For pool-build probing for existing pools
|
# For pool-build probing for existing pools
|
||||||
BuildRequires: libblkid-devel >= 2.17
|
BuildRequires: util-linux >= 2.17
|
||||||
# for augparse, optionally used in testing
|
# for augparse, optionally used in testing
|
||||||
BuildRequires: augeas
|
BuildRequires: augeas
|
||||||
BuildRequires: systemd-devel >= 185
|
BuildRequires: systemd-devel >= 185
|
||||||
@@ -381,12 +379,12 @@ BuildRequires: json-c-devel
|
|||||||
BuildRequires: sanlock-devel >= 2.4
|
BuildRequires: sanlock-devel >= 2.4
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: libpcap-devel >= 1.5.0
|
BuildRequires: libpcap-devel >= 1.5.0
|
||||||
BuildRequires: libnl3-devel
|
BuildRequires: libnl-devel
|
||||||
BuildRequires: libselinux-devel
|
BuildRequires: libselinux-devel
|
||||||
BuildRequires: cyrus-sasl-devel
|
BuildRequires: cyrus-sasl-devel
|
||||||
%if %{with_qemu}
|
%if %{with_qemu}
|
||||||
# For managing ACLs
|
# For managing ACLs
|
||||||
BuildRequires: libacl-devel
|
BuildRequires: acl-devel
|
||||||
# From QEMU RPMs, used by virstoragetest
|
# From QEMU RPMs, used by virstoragetest
|
||||||
BuildRequires: /usr/bin/qemu-img
|
BuildRequires: /usr/bin/qemu-img
|
||||||
%endif
|
%endif
|
||||||
@@ -407,7 +405,6 @@ BuildRequires: librados-devel
|
|||||||
BuildRequires: librbd-devel
|
BuildRequires: librbd-devel
|
||||||
%endif
|
%endif
|
||||||
%if %{with_storage_gluster}
|
%if %{with_storage_gluster}
|
||||||
BuildRequires: glusterfs-api-devel >= 3.4.1
|
|
||||||
BuildRequires: glusterfs-devel >= 3.4.1
|
BuildRequires: glusterfs-devel >= 3.4.1
|
||||||
%endif
|
%endif
|
||||||
%if %{with_numactl}
|
%if %{with_numactl}
|
||||||
@@ -416,7 +413,7 @@ BuildRequires: numactl-devel
|
|||||||
%endif
|
%endif
|
||||||
BuildRequires: libcap-ng-devel >= 0.5.0
|
BuildRequires: libcap-ng-devel >= 0.5.0
|
||||||
%if %{with_fuse}
|
%if %{with_fuse}
|
||||||
BuildRequires: fuse-devel >= 2.8.6
|
BuildRequires: fuse3-devel
|
||||||
%endif
|
%endif
|
||||||
%if %{with_libssh2}
|
%if %{with_libssh2}
|
||||||
BuildRequires: libssh2-devel >= 1.3.0
|
BuildRequires: libssh2-devel >= 1.3.0
|
||||||
@@ -425,12 +422,12 @@ BuildRequires: libssh2-devel >= 1.3.0
|
|||||||
BuildRequires: netcf-devel >= 0.2.2
|
BuildRequires: netcf-devel >= 0.2.2
|
||||||
%endif
|
%endif
|
||||||
%if %{with_esx}
|
%if %{with_esx}
|
||||||
BuildRequires: libcurl-devel
|
BuildRequires: curl-devel
|
||||||
%endif
|
%endif
|
||||||
%if %{with_hyperv}
|
%if %{with_hyperv}
|
||||||
BuildRequires: libwsman-devel >= 2.6.3
|
BuildRequires: libwsman-devel >= 2.6.3
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: audit-libs-devel
|
BuildRequires: audit-devel
|
||||||
BuildRequires: systemtap-sdt-devel
|
BuildRequires: systemtap-sdt-devel
|
||||||
BuildRequires: /usr/bin/dtrace
|
BuildRequires: /usr/bin/dtrace
|
||||||
%if %{with_wireshark}
|
%if %{with_wireshark}
|
||||||
@@ -442,7 +439,7 @@ BuildRequires: libssh-devel >= 0.8.1
|
|||||||
BuildRequires: libtirpc-devel
|
BuildRequires: libtirpc-devel
|
||||||
%if %{with_firewalld_zone}
|
%if %{with_firewalld_zone}
|
||||||
# Needed for the firewalld_reload macro
|
# Needed for the firewalld_reload macro
|
||||||
BuildRequires: firewalld-filesystem
|
BuildRequires: firewalld
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@@ -1345,12 +1342,6 @@ exit 1
|
|||||||
%define arg_remote_mode -Dremote_default_mode=legacy
|
%define arg_remote_mode -Dremote_default_mode=legacy
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if %{with_userfaultfd_sysctl}
|
|
||||||
%define arg_userfaultfd_sysctl -Duserfaultfd_sysctl=enabled
|
|
||||||
%else
|
|
||||||
%define arg_userfaultfd_sysctl -Duserfaultfd_sysctl=disabled
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%define when %(date +"%%F-%%T")
|
%define when %(date +"%%F-%%T")
|
||||||
%define where %(hostname)
|
%define where %(hostname)
|
||||||
%define who %{?packager}%{!?packager:Unknown}
|
%define who %{?packager}%{!?packager:Unknown}
|
||||||
@@ -1434,7 +1425,6 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/libvirt.spec)
|
|||||||
-Dqemu_datadir=%{qemu_datadir} \
|
-Dqemu_datadir=%{qemu_datadir} \
|
||||||
-Dtls_priority=%{tls_priority} \
|
-Dtls_priority=%{tls_priority} \
|
||||||
-Dsysctl_config=enabled \
|
-Dsysctl_config=enabled \
|
||||||
%{?arg_userfaultfd_sysctl} \
|
|
||||||
-Dssh_proxy=enabled \
|
-Dssh_proxy=enabled \
|
||||||
%{?enable_werror} \
|
%{?enable_werror} \
|
||||||
-Dexpensive_tests=enabled \
|
-Dexpensive_tests=enabled \
|
||||||
@@ -1522,7 +1512,6 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/libvirt.spec)
|
|||||||
-Dstorage_vstorage=disabled \
|
-Dstorage_vstorage=disabled \
|
||||||
-Dstorage_zfs=disabled \
|
-Dstorage_zfs=disabled \
|
||||||
-Dsysctl_config=disabled \
|
-Dsysctl_config=disabled \
|
||||||
-Duserfaultfd_sysctl=disabled \
|
|
||||||
-Dssh_proxy=disabled \
|
-Dssh_proxy=disabled \
|
||||||
-Dtests=disabled \
|
-Dtests=disabled \
|
||||||
-Dudev=disabled \
|
-Dudev=disabled \
|
||||||
@@ -2330,9 +2319,6 @@ exit 0
|
|||||||
%if %{with_qemu}
|
%if %{with_qemu}
|
||||||
%files daemon-driver-qemu
|
%files daemon-driver-qemu
|
||||||
%config(noreplace) %{_sysconfdir}/libvirt/virtqemud.conf
|
%config(noreplace) %{_sysconfdir}/libvirt/virtqemud.conf
|
||||||
%if %{with_userfaultfd_sysctl}
|
|
||||||
%config(noreplace) %{_prefix}/lib/sysctl.d/60-qemu-postcopy-migration.conf
|
|
||||||
%endif
|
|
||||||
%{_datadir}/augeas/lenses/virtqemud.aug
|
%{_datadir}/augeas/lenses/virtqemud.aug
|
||||||
%{_datadir}/augeas/lenses/tests/test_virtqemud.aug
|
%{_datadir}/augeas/lenses/tests/test_virtqemud.aug
|
||||||
%{_unitdir}/virtqemud.service
|
%{_unitdir}/virtqemud.service
|
||||||
@@ -2484,6 +2470,9 @@ exit 0
|
|||||||
%{_unitdir}/virtchd.service
|
%{_unitdir}/virtchd.service
|
||||||
%{_unitdir}/virtchd.socket
|
%{_unitdir}/virtchd.socket
|
||||||
%{_libdir}/libvirt/connection-driver/libvirt_driver_ch.so
|
%{_libdir}/libvirt/connection-driver/libvirt_driver_ch.so
|
||||||
|
%config(noreplace) %{_sysconfdir}/libvirt/ch.conf
|
||||||
|
%{_datadir}/augeas/lenses/libvirtd_ch.aug
|
||||||
|
%{_datadir}/augeas/lenses/tests/test_libvirtd_ch.aug
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%files client
|
%files client
|
||||||
@@ -2705,12 +2694,51 @@ exit 0
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Mon Feb 16 2026 Daniel P. Berrangé <berrange@redhat.com> - 11.6.0-3
|
* Mon Jan 26 2026 Richard W.M. Jones <rjones@redhat.com> - 12.0.0-3
|
||||||
- Re-enable ZFS (rhbz#2407005)
|
- Backport fix for IPv6 connections to ESXi
|
||||||
|
|
||||||
* Fri Oct 31 2025 Cole Robinson <crobinso@redhat.com> - 11.6.0-2
|
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 12.0.0-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jan 15 2026 Daniel P. Berrangé <berrange@redhat.com> - 12.0.0-1
|
||||||
|
- Update to 12.0.0
|
||||||
|
|
||||||
|
* Mon Jan 12 2026 Daniel P. Berrangé <berrange@redhat.com> - 11.10.0-3
|
||||||
|
- Disable -Werror on ELN
|
||||||
|
|
||||||
|
* Thu Jan 08 2026 Richard W.M. Jones <rjones@redhat.com> - 11.10.0-2
|
||||||
|
- Rebuild for xen 4.21.0
|
||||||
|
|
||||||
|
* Mon Dec 01 2025 Cole Robinson <crobinso@redhat.com> - 11.10.0-1
|
||||||
|
- Update to version 11.10.0
|
||||||
|
|
||||||
|
* Mon Nov 17 2025 Richard W.M. Jones <rjones@redhat.com> - 11.9.0-3
|
||||||
|
- Add upstream patches to fix parallel libguestfs
|
||||||
|
|
||||||
|
* Tue Nov 4 2025 Tom Callaway <spot@fedoraproject.org> - 11.9.0-2
|
||||||
|
- rebuild against new fuse3
|
||||||
|
|
||||||
|
* Mon Nov 3 2025 Daniel P. Berrangé <berrange@redhat.com> - 11.9.0-1
|
||||||
|
- Update to 11.9.0 release
|
||||||
|
|
||||||
|
* Wed Oct 29 2025 Peter Robinson <pbrobinson@fedoraproject.org> - 11.8.0-3
|
||||||
|
- Build against fuse3, supported since 8.2
|
||||||
|
|
||||||
|
* Tue Oct 14 2025 Cole Robinson <crobinso@redhat.com> - 11.8.0-2
|
||||||
- Fix build with latest wireshark
|
- Fix build with latest wireshark
|
||||||
|
|
||||||
|
* Wed Oct 01 2025 Cole Robinson <crobinso@redhat.com> - 11.8.0-1
|
||||||
|
- Update to version 11.8.0
|
||||||
|
|
||||||
|
* Thu Sep 04 2025 Adam Williamson <awilliam@redhat.com> - 11.7.0-3
|
||||||
|
- Rebuild on a side tag
|
||||||
|
|
||||||
|
* Thu Sep 04 2025 Adam Williamson <awilliam@redhat.com> - 11.7.0-2
|
||||||
|
- Rebuild for libiscsi.so.11
|
||||||
|
|
||||||
|
* Tue Sep 02 2025 Cole Robinson <crobinso@redhat.com> - 11.7.0-1
|
||||||
|
- Update to version 11.7.0
|
||||||
|
|
||||||
* Tue Aug 05 2025 Cole Robinson <crobinso@redhat.com> - 11.6.0-1
|
* Tue Aug 05 2025 Cole Robinson <crobinso@redhat.com> - 11.6.0-1
|
||||||
- Update to version 11.6.0
|
- Update to version 11.6.0
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
SHA512 (libvirt-11.6.0.tar.xz) = b3dcc6628a53e9d8522965c1c47619caf00cbbcfe058298c0162ca196434c96935b1de8e6b8ced8b99737ad12c90e60a969cf83ed6f4ff61e77959ae28e6e6f7
|
SHA512 (libvirt-12.0.0.tar.xz) = 5613e4e59865f688fe4cca2734c6de1cf68d0540c6e3013c9c21e583accd4f4fc21ec98e9c794036c5d6d0c8dd05ad1d22dab61f8c7d2934c8cb507b5bee76ad
|
||||||
|
|||||||
Reference in New Issue
Block a user