diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-09-27 11:39:54 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-09-27 11:39:54 +0000 |
commit | 04c7b4836d733af92d23c134a80ce2388da94b7c (patch) | |
tree | dacaafd9c9b594705d7691000b7fd3f341a0dbd8 | |
parent | 8559469419bbff21dc8830d95ec6f7d84b35c596 (diff) | |
download | wireshark-04c7b4836d733af92d23c134a80ce2388da94b7c.tar.gz wireshark-04c7b4836d733af92d23c134a80ce2388da94b7c.tar.bz2 wireshark-04c7b4836d733af92d23c134a80ce2388da94b7c.zip |
Copy over:
Revision 45111 - From Steve Magnani via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7753 :
Fix display of WRITE BUFFER and SEND DIAGNOSTIC fields in SCSI dissector
--------------------------------------------------------------------------------
Revision 45142
Implement and document the Custom plugin system. Create relevant example files and add them to the distribution. Rewrite README.plugins to describe how to use this system.
-------------------------------------------------------------------------------
svn path=/trunk-1.8/; revision=45172
-rw-r--r-- | doc/README.plugins | 193 | ||||
-rw-r--r-- | epan/dissectors/packet-scsi.c | 22 | ||||
-rw-r--r-- | plugins/Custom.m4.example | 5 | ||||
-rw-r--r-- | plugins/Custom.make.example | 13 | ||||
-rw-r--r-- | plugins/Custom.nmake.example | 16 | ||||
-rw-r--r-- | plugins/Makefile.am | 9 |
6 files changed, 157 insertions, 101 deletions
diff --git a/doc/README.plugins b/doc/README.plugins index 19ff49e12c..bacc6a67ea 100644 --- a/doc/README.plugins +++ b/doc/README.plugins @@ -2,23 +2,22 @@ $Id$ 1. Plugins -Writing a "plugin" dissector is not very different from writing a -standard one. In fact all of the functions described in -README.developer can be used in the plugins exactly as they are used in -standard dissectors. +Writing a "plugin" dissector is not very different from writing a standard +one. In fact all of the functions described in README.developer can be +used in the plugins exactly as they are used in standard dissectors. (Note, however, that not all OSes on which Wireshark runs can support plugins.) -If you've chosen "xxx" as the name of your plugin (typically, that would +If you've chosen "foo" as the name of your plugin (typically, that would be a short name for your protocol, in all lower case), the following instructions tell you how to implement it as a plugin. All occurrences -of "xxx" below should be replaced by the name of your plugin. +of "foo" below should be replaced by the name of your plugin. 2. The directory for the plugin, and its files -The plugin should be placed in a new plugins/xxx directory which should -contain minimally the following files: +The plugin should be placed in a new plugins/foo directory which should +contain at least the following files: AUTHORS COPYING @@ -30,7 +29,7 @@ Makefile.nmake moduleinfo.h moduleinfo.nmake plugin.rc.in -The source files and header files for your dissector +And of course the source and header files for your dissector. Examples of these files can be found in plugins/gryphon. @@ -41,51 +40,76 @@ files. 2.2 CMakeLists.txt -For your plugins/xxx/CMakeLists.txt file, see the corresponding file in -plugins/gryphon. Replace all occurrences of "gryphon" in those files -with "xxx" and add your source files to the DISSECTOR_SRC variable. +For your plugins/foo/CMakeLists.txt file, see the corresponding file in +plugins/gryphon. Replace all occurrences of "gryphon" in those files +with "foo" and add your source files to the DISSECTOR_SRC variable. 2.3 Makefile.am -For your plugins/xxx/Makefile.am file, see the corresponding file in -plugins/gryphon. Replace all occurrences of "gryphon" in those files -with "xxx". +For your plugins/foo/Makefile.am file, see the corresponding file in +plugins/gryphon. Replace all occurrences of "gryphon" in those files +with "foo". 2.4 Makefile.common -Your plugins/xxx/Makefile.common should only list the main source file(s), +Your plugins/foo/Makefile.common should only list the main source file(s), which exports register_*() and handoff_*(), for your dissector in the -DISSECTOR_SRC variable. All other supporting source files should be listed -in the DISSECTOR_SUPPORT_SRC variable, and this variable added to the -xxx_la_SOURCES variable in Makefile.am. +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 -DISSECTOR_INCLUDES variable. The DISSECTOR_INCLUDES variable should not +DISSECTOR_INCLUDES variable. The DISSECTOR_INCLUDES variable should not include moduleinfo.h. 2.5 Makefile.nmake -For your plugins/xxx/Makefile.nmake file, see the corresponding file in -plugins/gryphon. No modifications are needed here. +For your plugins/foo/Makefile.nmake file, see the corresponding file in +plugins/gryphon. No modifications are needed here. 2.6 moduleinfo.h -Your plugins/xxx/moduleinfo.h file is used to set the version information +Your plugins/foo/moduleinfo.h file is used to set the version information for the plugin. 2.7 moduleinfo.nmake -Your plugins/xxx/moduleinfo.nmake is used to set the version information -for building the plugin. Its contents should match that in moduleinfo.h +Your plugins/foo/moduleinfo.nmake is used to set the version information +for building the plugin. Its contents should match that in moduleinfo.h 2.8 plugin.rc.in -Your plugins/xxx/plugin.rc.in is the Windows resource template file -used to add the plugin specific information as resources to the DLL. +Your plugins/foo/plugin.rc.in is the Windows resource template file used +to add the plugin specific information as resources to the DLL. No modifications are needed here. 3. Changes to existing Wireshark files -You will also need to change the following files: +There are two ways to add your plugin dissector to the build, as a custom +extension or as a permanent addition. The custom extension is easy to +configure, but won't be used for inclusion in the distribution if that's +your goal. Setting up the permanent addition is somewhat more involved. + +3.1 Custom extension + +Go to the plugins directory and copy the three Custom.*.example files to +Custom.*. Now you have three files ready for building a plugin with the +name "foo". Replace the name if you so require. + +If you want to add the plugin to your own Windows installer add a text +file named custom_plugins.txt to the packaging/nsis directory, with a +"File" statement for NSIS: + +File "..\..\plugins\foo\foo.dll" + +Then open packaging/nsis/Custom.nmake and add the relative path to your +DLL to CUSTOM_PLUGINS: + +CUSTOM_PLUGINS= \ + ../../plugins/foo/foo.dll + +3.2 Permanent addition + +In order to be able to permanently add a plugin take the following steps. +You will need to change the following files: configure.in CMakeLists.txt epan/Makefile.am @@ -97,67 +121,81 @@ You will also need to change the following files: You might also want to search your Wireshark development directory for occurrences of an existing plugin name, in case this document is out of -date with the current directory structure. For example, +date with the current directory structure. For example, grep -rl gryphon . could be used from a shell prompt. -3.1 Changes to plugins/Makefile.am +3.2.1 Changes to plugins/Makefile.am -The plugins directory contains a Makefile.am. You need to change the -SUBDIRS directive to reflect the addition of your plugin: +The plugins directory contains a Makefile.am. You need to add to SUBDIRS +(in alphabetical order) the name of your plugin: SUBDIRS = $(_CUSTOM_SUBDIRS_) \ ... + ethercat \ + foo \ gryphon \ irda \ - xxx \ -3.2 Changes to plugins/Makefile.nmake -In plugins/Makefile.nmake you need to add to the PLUGINS_LIST -(in alphabetical order) the name of your dissector (actually: -the name of the plugins sub-directory which contains your dissector). +3.2.2 Changes to plugins/Makefile.nmake + +In plugins/Makefile.nmake you need to add to PLUGINS_LIST (in alphabetical +order) the name of your plugin: + +PLUGIN_LIST = \ + ... + ethercat \ + foo \ + gryphon \ + irda \ -3.3 Changes to the top level Makefile.am +3.2.3 Changes to the top level Makefile.am -Add your plugin (in alphabetical order) to the plugin_ldadd: +Add your plugin (in alphabetical order) to plugin_ldadd: if HAVE_PLUGINS -plugin_ldadd = \ +plugin_ldadd = $(_CUSTOM_plugin_ldadd_) \ ... - -dlopen plugins/gryphon/gryphon.la \ - -dlopen plugins/irda/irda.la \ - -dlopen plugins/xxx/xxx.la \ + -dlopen plugins/ethercat/ethercat.la \ + -dlopen plugins/foo/foo.la \ + -dlopen plugins/gryphon/gryphon.la \ + -dlopen plugins/irda/irda.la \ ... -3.4 Changes to the top level configure.in +3.2.4 Changes to the top level configure.in -You need to add your plugins Makefile (in alphbetical order) to the AC_OUTPUT -rule in the configure.in +You need to add your plugins Makefile (in alphbetical order) to the +AC_OUTPUT rule in the configure.in AC_OUTPUT( ... + plugins/ethercat/Makefile + plugins/foo/Makefile plugins/gryphon/Makefile plugins/irda/Makefile - plugins/xxx/Makefile ... ,) -3.5 Changes to epan/Makefile.am +3.2.5 Changes to epan/Makefile.am -Add the relative path of your plugin (in alphbetical order) to plugin_src: +Add the relative path of all your plugin source files (in alphbetical +order) to plugin_src: plugin_src = \ ... + ../plugins/ethercat/packet-ioraw.c \ + ../plugins/ethercat/packet-nv.c \ + ../plugins/foo/packet-foo.c \ ../plugins/gryphon/packet-gryphon.c \ + ../plugins/irda/packet-ircomm.c \ ../plugins/irda/packet-irda.c \ - ../plugins/xxx/packet-xxx.c \ ... -3.6 Changes to CMakeLists.txt +3.2.6 Changes to CMakeLists.txt Add your plugin (in alphabetical order) to the PLUGIN_SRC_DIRS: @@ -165,44 +203,57 @@ if(ENABLE_PLUGINS) ... set(PLUGIN_SRC_DIRS ... + plugins/ethercat + plugins/foo plugins/gryphon plugins/irda - plugins/xxx ... -3.7 Changes to the installers +3.2.7 Changes to the installers If you want to include your plugin in an installer you have to add lines in the NSIS installer Makefile.nmake and wireshark.nsi files. -For the NSIS installer: +3.2.7.1 Changes to packaging/nsis/Makefile.nmake + +Add the relative path of your plugin DLL (in alphbetical order) to PLUGINS: + +PLUGINS= \ + ... + ../../plugins/ethercat/ethercat.dll \ + ../../plugins/foo/foo.dll \ + ../../plugins/gryphon/gryphon.dll \ + ../../plugins/irda/irda.dll \ - Add ../../plugins/xxx/xxx.dll to the list of plugins for the - PLUGINS variable in packaging/nsis/Makefile.nmake. +3.2.7.2 Changes to packaging/nsis/wireshark.nsi - Add +Add the relative path of your plugin DLL (in alphbetical order) to the +list of "File" statements in the "Dissector Plugins" section: - File "..\..\plugins\xxx\xxx.dll" +File "${STAGING_DIR}\plugins\${VERSION}\ethercat.dll" +File "${STAGING_DIR}\plugins\${VERSION}\foo.dll" +File "${STAGING_DIR}\plugins\${VERSION}\gryphon.dll" +File "${STAGING_DIR}\plugins\${VERSION}\irda.dll" - to the list of "File" statements in the "Dissector Plugins" - section in packaging/nsis/wireshark.nsi. +3.2.7.3 Other installers -The U3 and PortableApps installers build their manifests, including plugins, -from packaging/nsis/wireshark.nsi via the packaging/ws-manifest.pl script. +The U3 and PortableApps installers build their manifests, including +plugins, from wireshark.nsi via the packaging/ws-manifest.pl script. 4. Development and plugins on Unix Plugins make some aspects of development easier and some harder. -The first thing is that you'll have to run autogen.sh and configure -once more to setup your build environment. +The first thing is that you'll have to run autogen.sh and configure once +more to setup your build environment. -The good news is that if you are working on a single plugin -then you will find recompiling the plugin MUCH faster than -recompiling a dissector and then linking it back into Wireshark. +The good news is that if you are working on a single plugin then you will +find recompiling the plugin MUCH faster than recompiling a dissector and +then linking it back into Wireshark. Use "make -C plugins" to compile just +your plugins. -The bad news is that Wireshark will not use the plugins unless the -plugins are installed in one of the places it expects them to find. +The bad news is that Wireshark will not use the plugins unless the plugins +are installed in one of the places it expects them to find. One way of dealing with this problem is to set an environment variable when running Wireshark: WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1. @@ -211,10 +262,10 @@ Another way to deal with this problem is to set up a working root for wireshark, say in $HOME/build/root and build wireshark to install there -./configure --prefix=${HOME}/build/root;make install +./configure --prefix=${HOME}/build/root && make install then subsequent rebuilds/installs of your plugin can be accomplished -by going to the plugins/xxx directory and running +by going to the plugins/foo directory and running make install diff --git a/epan/dissectors/packet-scsi.c b/epan/dissectors/packet-scsi.c index 86dc36579d..a90ac06860 100644 --- a/epan/dissectors/packet-scsi.c +++ b/epan/dissectors/packet-scsi.c @@ -24,7 +24,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* @@ -4295,12 +4295,12 @@ dissect_spc_senddiagnostic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr if (!tree && !isreq) return; - proto_tree_add_uint(tree, hf_scsi_senddiag_st_code, tvb, offset, 1, 0); - proto_tree_add_boolean(tree, hf_scsi_senddiag_pf, tvb, offset, 1, 0); - proto_tree_add_boolean(tree, hf_scsi_senddiag_st, tvb, offset, 1, 0); - proto_tree_add_boolean(tree, hf_scsi_senddiag_devoff, tvb, offset, 1, 0); - proto_tree_add_boolean(tree, hf_scsi_senddiag_unitoff, tvb, offset, 1, 0); - proto_tree_add_uint(tree, hf_scsi_paramlen16, tvb, offset+2, 2, 0); + proto_tree_add_item(tree, hf_scsi_senddiag_st_code, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_senddiag_pf, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_senddiag_st, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_senddiag_devoff, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_senddiag_unitoff, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_paramlen16, tvb, offset+2, 2, ENC_BIG_ENDIAN); proto_tree_add_bitmask(tree, tvb, offset+4, hf_scsi_control, ett_scsi_control, cdb_control_fields, ENC_BIG_ENDIAN); } @@ -4313,10 +4313,10 @@ dissect_spc_writebuffer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, if (!tree && !isreq) return; - proto_tree_add_uint(tree, hf_scsi_wb_mode, tvb, offset, 1, 0); - proto_tree_add_uint(tree, hf_scsi_wb_bufferid, tvb, offset+1, 1, 0); - proto_tree_add_uint(tree, hf_scsi_wb_bufoffset, tvb, offset+2, 3, 0); - proto_tree_add_uint(tree, hf_scsi_paramlen24, tvb, offset+5, 3, 0); + proto_tree_add_item(tree, hf_scsi_wb_mode, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_wb_bufferid, tvb, offset+1, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_wb_bufoffset, tvb, offset+2, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_scsi_paramlen24, tvb, offset+5, 3, ENC_BIG_ENDIAN); proto_tree_add_bitmask(tree, tvb, offset+8, hf_scsi_control, ett_scsi_control, cdb_control_fields, ENC_BIG_ENDIAN); } diff --git a/plugins/Custom.m4.example b/plugins/Custom.m4.example new file mode 100644 index 0000000000..0694d281eb --- /dev/null +++ b/plugins/Custom.m4.example @@ -0,0 +1,5 @@ +# +# $Id$ +# + +m4_define([_CUSTOM_AC_OUTPUT_], [plugins/foo/Makefile]) diff --git a/plugins/Custom.make.example b/plugins/Custom.make.example new file mode 100644 index 0000000000..ecb0f171bc --- /dev/null +++ b/plugins/Custom.make.example @@ -0,0 +1,13 @@ +# +# $Id$ +# + +_CUSTOM_SUBDIRS_ = \ + foo + +_CUSTOM_EXTRA_DIST_ = \ + Custom.m4 \ + Custom.make + +_CUSTOM_plugin_ldadd_ = \ + -dlopen plugins/foo/foo.la diff --git a/plugins/Custom.nmake.example b/plugins/Custom.nmake.example index aef2d64284..1d9c153940 100644 --- a/plugins/Custom.nmake.example +++ b/plugins/Custom.nmake.example @@ -4,22 +4,6 @@ include ..\config.nmake -# -# Custom plugin build template. -# -# If you need to develop a custom plugin (a plugin not yet released to the -# public) this file is for you. -# -# To generate a custom plugin: -# -# 1. Create the new plugin directory and implement the plugin (at least to be -# ready for a first build try). The easiest way to do this is to copy an -# existing plugin and modify the contents. -# 2. Rename this file to Custom.nmake -# 3. Replace every appearance of foo in this file with your plugin dir name -# 4. Build Wireshark as usual -# - all: foo foo:: diff --git a/plugins/Makefile.am b/plugins/Makefile.am index e92d1e8b30..c895d0ebd4 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -19,7 +19,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -include Custom.make SUBDIRS = $(_CUSTOM_SUBDIRS_) \ @@ -41,8 +41,11 @@ plugindir = @plugindir@ EXTRA_DIST = \ $(_CUSTOM_EXTRA_DIST_) \ - plugins.vcproj \ - Makefile.nmake + plugins.vcproj \ + Makefile.nmake \ + Custom.make.example \ + Custom.m4.example \ + Custom.nmake.example MAINTAINERCLEANFILES = \ Makefile.in |