2013/9/18 Michal Privoznik <mprivozn@xxxxxxxxxx>: > On 18.09.2013 06:18, Yuto KAWAMURA(kawamuray) wrote: >> From: "Yuto KAWAMURA(kawamuray)" <kawamuray.dadada@xxxxxxxxx> >> >> Introduce Wireshark dissector plugin which adds support to Wireshark >> for dissecting libvirt RPC protocol. >> Added following files to build Wireshark dissector from libvirt source >> tree. >> * devtools/: New directory which tools for libvirt developers should be placed. >> * devtools/wireshark-dissector/*: Source tree of Wireshark dissector plugin. >> >> Added followings to configure.ac or Makefile.am. >> configure.ac >> * --with-wireshark-dissector: Enable support for building Wireshark dissector. >> * --with-ws-plugindir: Specify wireshark plugin directory that dissector will installed. >> * Added devtools/wireshark-dissector/{Makefile,src/Makefile} to AC_CONFIG_FILES. >> Makefile.am >> * Added devtools/wireshark-dissector/ to SUBDIR. >> --- >> Makefile.am | 3 +- >> cfg.mk | 8 +- >> configure.ac | 69 +- >> devtools/wireshark-dissector/Makefile.am | 28 + >> devtools/wireshark-dissector/README.md | 25 + >> devtools/wireshark-dissector/src/.gitignore | 2 + >> devtools/wireshark-dissector/src/Makefile.am | 31 + >> devtools/wireshark-dissector/src/moduleinfo.h | 36 + >> devtools/wireshark-dissector/src/packet-libvirt.c | 512 +++++++++++ >> devtools/wireshark-dissector/src/packet-libvirt.h | 127 +++ >> devtools/wireshark-dissector/src/plugin.c | 27 + >> devtools/wireshark-dissector/util/genxdrstub.pl | 1009 +++++++++++++++++++++ >> 12 files changed, 1871 insertions(+), 6 deletions(-) >> create mode 100644 devtools/wireshark-dissector/Makefile.am >> create mode 100644 devtools/wireshark-dissector/README.md >> create mode 100644 devtools/wireshark-dissector/src/.gitignore >> create mode 100644 devtools/wireshark-dissector/src/Makefile.am >> create mode 100644 devtools/wireshark-dissector/src/moduleinfo.h >> create mode 100644 devtools/wireshark-dissector/src/packet-libvirt.c >> create mode 100644 devtools/wireshark-dissector/src/packet-libvirt.h >> create mode 100644 devtools/wireshark-dissector/src/plugin.c >> create mode 100755 devtools/wireshark-dissector/util/genxdrstub.pl >> >> diff --git a/Makefile.am b/Makefile.am >> index 4e24ecf..2385b0c 100644 >> --- a/Makefile.am >> +++ b/Makefile.am >> @@ -22,7 +22,8 @@ GENHTML = genhtml >> SUBDIRS = gnulib/lib include src daemon tools docs gnulib/tests \ >> python tests po examples/domain-events/events-c examples/hellolibvirt \ >> examples/dominfo examples/domsuspend examples/python examples/apparmor \ >> - examples/xml/nwfilter examples/openauth examples/systemtap >> + examples/xml/nwfilter examples/openauth examples/systemtap \ >> + devtools/wireshark-dissector >> >> ACLOCAL_AMFLAGS = -I m4 -I gnulib/m4 >> >> diff --git a/cfg.mk b/cfg.mk >> index 3a31815..d169c51 100644 >> --- a/cfg.mk >> +++ b/cfg.mk >> @@ -90,7 +90,7 @@ endif >> >> # Files that should never cause syntax check failures. >> VC_LIST_ALWAYS_EXCLUDE_REGEX = \ >> - (^(HACKING|docs/(news\.html\.in|.*\.patch))|\.po)$$ >> + (^(HACKING|docs/(news\.html\.in|.*\.patch))|\.po|devtools/wireshark-dissector/src/plugin.c)$$ >> >> # Functions like free() that are no-ops on NULL arguments. >> useless_free_options = \ >> @@ -969,7 +969,7 @@ exclude_file_name_regexp--sc_prohibit_newline_at_end_of_diagnostic = \ >> ^src/rpc/gendispatch\.pl$$ >> >> exclude_file_name_regexp--sc_prohibit_nonreentrant = \ >> - ^((po|tests)/|docs/.*(py|html\.in)|run.in$$) >> + ^((po|tests)/|docs/.*(py|html\.in)|run.in$$|devtools/wireshark-dissector/util/genxdrstub\.pl$$) >> >> exclude_file_name_regexp--sc_prohibit_raw_allocation = \ >> ^(docs/hacking\.html\.in)|(src/util/viralloc\.[ch]|examples/.*|tests/securityselinuxhelper\.c|tests/vircgroupmock\.c)$$ >> @@ -980,7 +980,7 @@ exclude_file_name_regexp--sc_prohibit_readlink = \ >> exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/virutil\.c$$ >> >> exclude_file_name_regexp--sc_prohibit_sprintf = \ >> - ^(docs/hacking\.html\.in)|(examples/systemtap/.*stp)|(src/dtrace2systemtap\.pl)|(src/rpc/gensystemtap\.pl)$$ >> + ^(docs/hacking\.html\.in)|(examples/systemtap/.*stp)|(src/dtrace2systemtap\.pl)|(src/rpc/gensystemtap\.pl)|(devtools/wireshark-dissector/util/genxdrstub\.pl)$$ >> >> exclude_file_name_regexp--sc_prohibit_strncpy = ^src/util/virstring\.c$$ >> >> @@ -1013,7 +1013,7 @@ exclude_file_name_regexp--sc_correct_id_types = \ >> exclude_file_name_regexp--sc_m4_quote_check = m4/virt-lib.m4 >> >> exclude_file_name_regexp--sc_prohibit_include_public_headers_quote = \ >> - ^src/internal\.h$$ >> + ^(src/internal\.h$$|devtools/wireshark-dissector/src/packet-libvirt.h$$) >> >> exclude_file_name_regexp--sc_prohibit_include_public_headers_brackets = \ >> ^(python/|tools/|examples/|include/libvirt/(virterror|libvirt-(qemu|lxc))\.h$$) >> diff --git a/configure.ac b/configure.ac >> index 69a01ae..83c7de4 100644 >> --- a/configure.ac >> +++ b/configure.ac >> @@ -2561,6 +2561,67 @@ AM_CONDITIONAL([HAVE_LIBNL], [test "$have_libnl" = "yes"]) >> AC_SUBST([LIBNL_CFLAGS]) >> AC_SUBST([LIBNL_LIBS]) >> >> +dnl wireshark dissector >> + >> +AC_ARG_WITH([wireshark-dissector], [ >> + AS_HELP_STRING([--with-wireshark-dissector], [ >> + enable wireshark dissector plugin support @<:@default=no@:>@ >> + ])], >> + [ with_wireshark_dissector=$withval ], >> + [ with_wireshark_dissector=no ]) > > I think we want with_wireshark_dissector=check here, so the dissector is > enabled if a devel has wireshark and disabled if he hasn't. This however > require the following to be rewritten slightly. > Agreed. I'll do it. >> + >> +if test "$with_wireshark_dissector" != "no"; then >> + dnl Check for XDR headers existence >> + AC_CHECK_HEADERS([rpc/types.h]) >> + >> + dnl Check for glib-2.0 existence >> + PKG_CHECK_MODULES([GLIB], [glib-2.0]) >> + WS_DISSECTOR_CPPFLAGS="$WS_DISSECTOR_CPPFLAGS `$PKG_CONFIG --cflags glib-2.0`" >> + >> + dnl Search for wireshark(or tshark) command >> + AC_PATH_PROG([WIRESHARK], [wireshark]) >> + AC_PATH_PROG([WIRESHARK], [tshark]) >> + if test -z "$WIRESHARK"; then >> + AC_MSG_ERROR([command not found wireshark or tshark]) >> + fi >> + >> + dnl Check for wireshark headers >> + save_CPPFLAGS="$CPPFLAGS" >> + WS_DISSECTOR_CPPFLAGS="$WS_DISSECTOR_CPPFLAGS -I`dirname $WIRESHARK`/../include/wireshark" >> + CPPFLAGS="$CPPFLAGS $WS_DISSECTOR_CPPFLAGS" >> + AC_CHECK_HEADERS([wireshark/config.h],, [ >> + AC_MSG_ERROR([wireshark/config.h is required for wireshark-dissector support]) >> + ]) >> + AC_CHECK_HEADERS([wireshark/epan/packet.h wireshark/epan/dissectors/packet-tcp.h],, [ >> + AC_MSG_ERROR([wireshark/epan/{packet,packet-tcp}.h are required for wireshark-dissector support]) >> + ], [ >> + #include <wireshark/config.h> >> + ]) >> + CPPFLAGS="$save_CPPFLAGS" >> + >> + WS_DISSECTOR_PROTO_FILES='\ >> + $(top_srcdir)/src/remote/remote_protocol.x \ >> + $(top_srcdir)/src/remote/qemu_protocol.x \ >> + $(top_srcdir)/src/remote/lxc_protocol.x \ >> + $(top_srcdir)/src/rpc/virkeepaliveprotocol.x \ >> + ' > > This variable can be hardcoded in > devtools/wireshark-dissector/src/Makefile.in. > You mean Makefile.am? If yes, then I agree. >> + AC_SUBST([WS_DISSECTOR_PROTO_FILES]) >> + AC_SUBST([WS_DISSECTOR_CPPFLAGS]) >> +fi >> +AM_CONDITIONAL([WITH_WIRESHARK_DISSECTOR], [test "$with_wireshark_dissector" = "yes"]) >> + >> +AC_ARG_WITH([ws-plugindir], [ >> + AC_HELP_STRING([--with-ws-plugindir], [ >> + wireshark plugins directory that plugin will installed >> + ])], >> + [ ws_plugindir=$withval ]) >> + >> +if test "$with_wireshark_dissector" != "no" && test -z "$ws_plugindir"; then >> + ws_version=`$WIRESHARK -v | head -1 | cut -f 2 -d' '` >> + ws_plugindir=`dirname $WIRESHARK`/../lib/wireshark/plugins/$ws_version >> +fi >> +AC_SUBST([ws_plugindir]) >> + >> # Check for Linux vs. BSD ifreq members >> AC_CHECK_MEMBERS([struct ifreq.ifr_newname, >> struct ifreq.ifr_ifindex, >> @@ -2646,7 +2707,9 @@ AC_CONFIG_FILES([\ >> examples/python/Makefile \ >> examples/hellolibvirt/Makefile \ >> examples/systemtap/Makefile \ >> - examples/xml/nwfilter/Makefile]) >> + examples/xml/nwfilter/Makefile \ >> + devtools/wireshark-dissector/Makefile \ >> + devtools/wireshark-dissector/src/Makefile]) >> AC_OUTPUT >> >> AC_MSG_NOTICE([]) >> @@ -2806,6 +2869,10 @@ AC_MSG_NOTICE([ XML Catalog: $XML_CATALOG_FILE]) >> AC_MSG_NOTICE([ Init script: $with_init_script]) >> AC_MSG_NOTICE([Char device locks: $with_chrdev_lock_files]) >> AC_MSG_NOTICE([]) >> +AC_MSG_NOTICE([Developer Tools]) >> +AC_MSG_NOTICE([]) >> +AC_MSG_NOTICE([Wireshark dissector: $with_wireshark_dissector]) >> +AC_MSG_NOTICE([]) >> AC_MSG_NOTICE([Privileges]) >> AC_MSG_NOTICE([]) >> AC_MSG_NOTICE([ QEMU: $QEMU_USER:$QEMU_GROUP]) >> diff --git a/devtools/wireshark-dissector/Makefile.am b/devtools/wireshark-dissector/Makefile.am >> new file mode 100644 >> index 0000000..6c535b5 >> --- /dev/null >> +++ b/devtools/wireshark-dissector/Makefile.am >> @@ -0,0 +1,28 @@ >> +## Process this file with automake to produce Makefile.in >> + >> +# Copyright (C) 2013 Yuto KAWAMURA(kawamuray) <kawamuray.dadada@xxxxxxxxx> >> +# >> +# This program is free software; you can redistribute it and/or >> +# modify it under the terms of the GNU General Public License >> +# as published by the Free Software Foundation; either version 3 >> +# of the License, or (at your option) any later version. >> +# >> +# This program is distributed in the hope that it will be useful, >> +# but WITHOUT ANY WARRANTY; without even the implied warranty of >> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> +# GNU General Public License for more details. >> +# >> +# You should have received a copy of the GNU General Public License >> +# along with this program. If not, see <http://www.gnu.org/licenses/>. >> +# >> +# Author: Yuto KAWAMURA(kawamuray) >> +if WITH_WIRESHARK_DISSECTOR >> +SUBDIRS = src >> + >> +# I think wireshark plugin is special case that doesn't need to install >> +# *.la(libtool archive) files. >> +# Maybe each plugin functionality should correspond to single file in >> +# plugins directory. So this hook keeps plugins directory clean. >> +install-exec-hook: >> + rm -f $(ws_plugindir)/libvirt.la >> +endif WITH_WIRESHARK_DISSECTOR >> diff --git a/devtools/wireshark-dissector/README.md b/devtools/wireshark-dissector/README.md >> new file mode 100644 >> index 0000000..e0ea522 >> --- /dev/null >> +++ b/devtools/wireshark-dissector/README.md >> @@ -0,0 +1,25 @@ >> +About >> +===== >> +This is the project of Google Summer of Code 2013 accepted by QEMU.org and libvirt community. >> +The goal of this project is, provide Wireshark dissector for Libvirt RPC protocol. It will provide Libvirt packet overview/detail analysing in Wireshark. Furthermore, it will be able to build(generated) from RPC protocol definition placed in Libvirt source tree to support latest protocol specification. > > Very long line, we use to wrap lines at 80 characters. > Okey, I'll wrap long lines. >> + >> +See also: >> +- http://www.google-melange.com/gsoc/project/google/gsoc2013/kawamuray/7001 >> +- http://wiki.qemu.org/Features/LibvirtWiresharkDissector >> + >> +Installation >> +============= >> +Run ./configure with --with-wireshark-dissector option enabled. >> +Then dissector will compiled with libvirt itself. >> + >> +Add/Remove protocol from dissector's support >> +-------------------------------------------- >> +Modify xdr\_proto\_files in this directory. >> + >> +Changing installation directory >> +------------------------------- >> +You can change installation directory of pluggable shared object(libvirt.so) by specifying --with-ws-plugindir=<path>. >> + >> +You can install libvirt.so into your local wireshark plugin directory: >> + >> + ./configure --with-wireshark-dissector --with-ws-plugindir=$HOME/.wireshark/plugins >> diff --git a/devtools/wireshark-dissector/src/.gitignore b/devtools/wireshark-dissector/src/.gitignore >> new file mode 100644 >> index 0000000..cc78368 >> --- /dev/null >> +++ b/devtools/wireshark-dissector/src/.gitignore >> @@ -0,0 +1,2 @@ >> +*.so >> +*.o >> diff --git a/devtools/wireshark-dissector/src/Makefile.am b/devtools/wireshark-dissector/src/Makefile.am >> new file mode 100644 >> index 0000000..f409b2b >> --- /dev/null >> +++ b/devtools/wireshark-dissector/src/Makefile.am >> @@ -0,0 +1,31 @@ >> +## Process this file with automake to produce Makefile.in >> + >> +# Copyright (C) 2013 Yuto KAWAMURA(kawamuray) <kawamuray.dadada@xxxxxxxxx> >> +# >> +# This program is free software; you can redistribute it and/or >> +# modify it under the terms of the GNU General Public License >> +# as published by the Free Software Foundation; either version 3 >> +# of the License, or (at your option) any later version. >> +# >> +# This program is distributed in the hope that it will be useful, >> +# but WITHOUT ANY WARRANTY; without even the implied warranty of >> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> +# GNU General Public License for more details. >> +# >> +# You should have received a copy of the GNU General Public License >> +# along with this program. If not, see <http://www.gnu.org/licenses/>. >> +# >> +# Author: Yuto KAWAMURA(kawamuray) >> +ws_plugin_LTLIBRARIES = libvirt.la >> +libvirt_la_SOURCES = packet-libvirt.c plugin.c >> +libvirt_la_CPPFLAGS = $(WS_DISSECTOR_CPPFLAGS) >> +libvirt_la_LDFLAGS = -avoid-version >> + >> +packet-libvirt.c: packet-libvirt.h libvirt/protocol.h > > I think this is the right place to fill WS_DISSECTOR_PROTO_FILES in. > >> + >> +libvirt/protocol.h: $(srcdir)/../util/genxdrstub.pl $(WS_DISSECTOR_PROTO_FILES) >> + LIBVIRT_VERSION=$(LIBVIRT_VERSION) \ >> + $(PERL) $(srcdir)/../util/genxdrstub.pl $(WS_DISSECTOR_PROTO_FILES) >> + >> +clean-local: >> + -rm -rf libvirt/*.h > > Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list