aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/README.plugins41
-rw-r--r--doc/plugins.example/Makefile.am10
-rw-r--r--doc/plugins.example/configure.ac9
-rw-r--r--doc/plugins.example/hello.c21
4 files changed, 67 insertions, 14 deletions
diff --git a/doc/README.plugins b/doc/README.plugins
index f66f993938..e06842571a 100644
--- a/doc/README.plugins
+++ b/doc/README.plugins
@@ -42,8 +42,8 @@ For your plugins/foo/Makefile.am file, see the corresponding file in
plugins/gryphon. Replace all occurrences of "gryphon" in those files
with "foo".
-Your plugins/foo/Makefile.am also needs to list the main source file(s),
-which exports register_*() and handoff_*(), for your dissector in the
+Your plugins/foo/Makefile.am also needs to list the main source file
+which exports plugin_register() for your dissector in the
DISSECTOR_SRC variable. All other supporting source files should be
listed in the DISSECTOR_SUPPORT_SRC variable.
The header files for your dissector, if any, must be listed in the
@@ -236,7 +236,39 @@ make install
5. Update "old style" plugins
-5.1 How to update an "old style" plugin (using plugin_register and
+5.1 How to update an "old style" plugin (since Wireshark 2.5)
+
+Plugins need exactly three visible symbols: plugin_version, plugin_release and
+plugin_register. Each plugin is either a libwscodecs plugin, libwiretap plugin or
+libwireshark plugin and the library will call "plugin_register" after
+loading the plugin. "plugin_register" in turn calls all the hooks necessary
+to enable the plugin. So if you had two function like so:
+
+ WS_DLL_PUBLIC void plugin_register(void);
+ WS_DLL_PUBLIC void plugin_reg_handoff(void);
+
+ void plugin_register(void) {...};
+ void plugin_reg_handoff(void) {...};
+
+You'll have to rewrite it as:
+
+ WS_DLL_PUBLIC void plugin_register(void);
+
+ static void proto_register_foo(void) {...};
+ static void proto_reg_handoff_foo(void) {...};
+
+ void plugin_register(void)
+ {
+ static proto_plugin plugin_foo;
+
+ plugin_foo.register_protoinfo = proto_register_foo;
+ plugin_foo.register_handoff = proto_reg_handoff_foo;
+ proto_register_plugin(&plugin_foo);
+ }
+
+See doc/plugins.example for an example.
+
+5.2 How to update an "old style" plugin (using plugin_register and
plugin_reg_handoff functions).
The plugin registration has changed with the extension of the build
@@ -269,7 +301,7 @@ stips the parts outlined below:
This will leave a clean dissector source file without plugin specifics.
-5.2 How to update an "old style" plugin (using plugin_init function)
+5.3 How to update an "old style" plugin (using plugin_init function)
The plugin registering has changed between 0.10.9 and 0.10.10; everyone
is encouraged to update their plugins as outlined below:
@@ -283,7 +315,6 @@ is encouraged to update their plugins as outlined below:
o Change the Makefile.am file to match the one of the DOCSIS plugin.
-
6 How to plugin related interface options
To demonstrate the functionality of the plugin interface options, a demonstration
diff --git a/doc/plugins.example/Makefile.am b/doc/plugins.example/Makefile.am
index df90503908..d33e186757 100644
--- a/doc/plugins.example/Makefile.am
+++ b/doc/plugins.example/Makefile.am
@@ -11,13 +11,15 @@ WARNFLAGS = -Wall -Wextra
plugindir := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(PKG_CONFIG) --define-variable=libdir=$(libdir) --variable plugindir wireshark)
-release_version := $(notdir $(plugindir))
+epan_plugindir = $(plugindir)/epan
-plugin_LTLIBRARIES = hello.la
+VERSION_RELEASE := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(PKG_CONFIG) --variable VERSION_RELEASE wireshark)
+
+epan_plugin_LTLIBRARIES = hello.la
hello_la_SOURCES = hello.c
-hello_la_CPPFLAGS = -DVERSION_RELEASE=\"$(release_version)\"
+hello_la_CPPFLAGS = -DVERSION_RELEASE=\"$(VERSION_RELEASE)\"
hello_la_CFLAGS = $(WIRESHARK_CFLAGS) -fvisibility=hidden $(WARNFLAGS)
@@ -25,7 +27,7 @@ hello_la_LDFLAGS = -module -avoid-version -shared
hello_la_LIBADD = $(WIRESHARK_LIBS)
-homedir = $${HOME}/.local/lib/wireshark/plugins/$(release_version)
+homedir = $${HOME}/.local/lib/wireshark/plugins/$(VERSION_RELEASE)/epan
install-home:
$(MKDIR_P) $(homedir) || exit 1; \
diff --git a/doc/plugins.example/configure.ac b/doc/plugins.example/configure.ac
index 07e9845d10..df66a02cc2 100644
--- a/doc/plugins.example/configure.ac
+++ b/doc/plugins.example/configure.ac
@@ -22,6 +22,15 @@ AC_CONFIG_SRCDIR([hello.c])
dnl Requires Wireshark 2.5.0 or greater.
PKG_CHECK_MODULES([WIRESHARK], [wireshark >= 2.5])
+saved_CFLAGS="$CFLAGS"; saved_LIBS="$LIBS";
+CFLAGS="$WIRESHARK_CFLAGS"
+LIBS="$WIRESHARK_LIBS"
+AC_CHECK_FUNCS([proto_register_plugin],
+ [AC_DEFINE([HAVE_PLUGINS], 1, [Define to 1 if Wireshark supports loading plugins])],
+ [AC_MSG_ERROR([Wireshark was compiled without support for plugins])]
+)
+CFLAGS="$saved_CFLAGS"; LIBS="$saved_LIBS"
+
AC_CONFIG_HEADER([config.h])
AC_CONFIG_FILES([Makefile])
diff --git a/doc/plugins.example/hello.c b/doc/plugins.example/hello.c
index fce0a5372b..455b4741a6 100644
--- a/doc/plugins.example/hello.c
+++ b/doc/plugins.example/hello.c
@@ -12,6 +12,7 @@
#endif
#include <epan/packet.h>
+#include <epan/proto.h>
#include <ws_attributes.h>
#ifndef VERSION
@@ -25,8 +26,6 @@ DLL_PUBLIC const gchar plugin_release[] = VERSION_RELEASE;
DLL_PUBLIC void plugin_register(void);
-DLL_PUBLIC void plugin_reg_handoff(void);
-
static int proto_hello = -1;
static dissector_handle_t handle_hello;
@@ -38,14 +37,26 @@ dissect_hello(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *dat
return tvb_captured_length(tvb);
}
-void plugin_register(void)
+static void
+proto_register_hello(void)
{
- proto_hello = proto_register_protocol("Wireshark Hello Plugin", "Hello", "hello");
+ proto_hello = proto_register_protocol("Wireshark Hello Plugin", "Hello WS", "hello_ws");
handle_hello = create_dissector_handle(dissect_hello, proto_hello);
register_postdissector(handle_hello);
}
-void plugin_reg_handoff(void)
+static void
+proto_reg_handoff_hello(void)
{
/* empty */
}
+
+void
+plugin_register(void)
+{
+ static proto_plugin plug;
+
+ plug.register_protoinfo = proto_register_hello;
+ plug.register_handoff = proto_reg_handoff_hello; /* or NULL */
+ proto_register_plugin(&plug);
+}