[libvirt] [PATCH v2 1/2] Introduce Libvirt Wireshark dissector

Daniel P. Berrange berrange at redhat.com
Fri Sep 20 10:37:12 UTC 2013


On Thu, Sep 19, 2013 at 11:26:08PM +0900, Yuto KAWAMURA(kawamuray) wrote:
> diff --git a/tools/wireshark/src/moduleinfo.h b/tools/wireshark/src/moduleinfo.h
> new file mode 100644
> index 0000000..9ab642c
> --- /dev/null
> +++ b/tools/wireshark/src/moduleinfo.h
> @@ -0,0 +1,37 @@
> +/* moduleinfo.h --- Define constants about wireshark plugin module
...
> +
> +/* Included *after* config.h, in order to re-define these macros */
> +
> +#ifdef PACKAGE
> +# undef PACKAGE
> +#endif
> +
> +/* Name of package */
> +#define PACKAGE "libvirt"

Huh ?  "PACKAGE" will already be defined to 'libvirt' so why are
you redefining it.

> +
> +
> +#ifdef VERSION
> +# undef VERSION
> +#endif
> +
> +/* Version number of package */
> +#define VERSION "0.0.1"

This means the wireshark plugin will have a fixed version, even
when libvirt protocol changes in new releases. This seems bogus.
Again I think we should just use the existing defined "VERSION".

I think this whole file can just go away completely

> diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
> new file mode 100644
> index 0000000..cd3e6ce
> --- /dev/null
> +++ b/tools/wireshark/src/packet-libvirt.c
> +static gboolean
> +dissect_xdr_bytes(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
> +                  guint32 maxlen)
> +{
> +    goffset start;
> +    guint8 *val = NULL;
> +    guint32 length;
> +
> +    start = xdr_getpos(xdrs);
> +    if (xdr_bytes(xdrs, (char **)&val, &length, maxlen)) {
> +        proto_tree_add_bytes_format_value(tree, hf, tvb, start, xdr_getpos(xdrs) - start,
> +                                          NULL, "%s", format_xdr_bytes(val, length));
> +        /* Seems I can't call xdr_free() for this case.
> +           It will raises SEGV by referencing out of bounds argument stack */
> +        xdrs->x_op = XDR_FREE;
> +        xdr_bytes(xdrs, (char **)&val, &length, maxlen);
> +        xdrs->x_op = XDR_DECODE;

Is accessing the internals of the 'XDR' struct really portable ? I think
it would be desirable to solve the xdr_free problem rather than accessing
struct internals



Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list