ANNOUNCEMENT: Live Wireshark University & Allegro Packets online APAC Wireshark Training Session
April 17th, 2024 | 14:30-16:00 SGT (UTC+8) | Online

Wireshark-dev: [Wireshark-dev] [PATCH] New plugin for Homeplug

From: Sebastien Tandel <sebastien@xxxxxxxxx>
Date: Mon, 04 Dec 2006 23:05:43 +0100
Hi,

    Here is a patch for the plugin supporting the dissection of the
intellon homeplug powerline protocol based on INT51X1 specification.

Sebastien Tandel
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/configure.in wireshark/configure.in
--- svn-copy/configure.in	2006-12-04 22:06:59.000000000 +0100
+++ wireshark/configure.in	2006-11-28 20:51:16.000000000 +0100
@@ -1382,6 +1382,7 @@
   plugins/giop/makefile
   plugins/gryphon/makefile
   plugins/h223/makefile
+  plugins/homeplug/makefile
   plugins/irda/makefile
   plugins/lwres/makefile
   plugins/mate/makefile
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/epan/makefile.am wireshark/epan/makefile.am
--- svn-copy/epan/makefile.am	2006-12-04 22:06:20.000000000 +0100
+++ wireshark/epan/makefile.am	2006-12-04 21:40:18.000000000 +0100
@@ -166,6 +166,7 @@
 	../plugins/giop/packet-cosnaming.c \
 	../plugins/giop/packet-coseventcomm.c \
 	../plugins/gryphon/packet-gryphon.c \
+	../plugins/homeplug/packet-homeplug.c \
 	../plugins/irda/packet-irda.c \
 	../plugins/lwres/packet-lwres.c \
 	../plugins/megaco/packet-megaco.c \
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/makefile.am wireshark/makefile.am
--- svn-copy/makefile.am	2006-12-04 22:06:59.000000000 +0100
+++ wireshark/makefile.am	2006-11-28 20:27:12.000000000 +0100
@@ -200,6 +200,7 @@
 	plugins/giop/cosnaming.la \
 	plugins/giop/coseventcomm.la \
 	plugins/gryphon/gryphon.la \
+	plugins/homeplug/homeplug.la \
 	plugins/irda/irda.la \
 	plugins/lwres/lwres.la \
 	plugins/mate/mate.la \
@@ -232,6 +233,7 @@
 	"-dlopen" plugins/giop/coseventcomm.la \
 	"-dlopen" plugins/gryphon/gryphon.la \
 	"-dlopen" plugins/h223/h223.la \
+	"-dlopen" plugins/homeplug/homeplug.la \
 	"-dlopen" plugins/irda/irda.la \
 	"-dlopen" plugins/lwres/lwres.la \
 	"-dlopen" plugins/mate/mate.la \
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/makefile.nmake wireshark/makefile.nmake
--- svn-copy/makefile.nmake	2006-12-04 22:06:59.000000000 +0100
+++ wireshark/makefile.nmake	2006-12-04 21:40:18.000000000 +0100
@@ -765,6 +765,7 @@
 	xcopy ".\plugins\giop\tango.dll" $(install_dir)\plugins\$(version) /d
 	xcopy ".\plugins\gryphon\gryphon.dll" $(install_dir)\plugins\$(version) /d
 	xcopy ".\plugins\h223\h223.dll" $(install_dir)\plugins\$(version) /d
+	xcopy ".\plugins\homeplug\homeplug.dll" $(install_dir)\plugins\$(version) /d
 	xcopy ".\plugins\irda\irda.dll" $(install_dir)\plugins\$(version) /d
 	xcopy ".\plugins\lwres\lwres.dll" $(install_dir)\plugins\$(version) /d
 	xcopy ".\plugins\mate\mate.dll" $(install_dir)\plugins\$(version) /d
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/authors wireshark/plugins/homeplug/authors
--- svn-copy/plugins/homeplug/authors	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/authors	2006-11-28 20:03:43.000000000 +0100
@@ -0,0 +1,2 @@
+sebastien tandel (sebastien@xxxxxxxxx)
+
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/copying wireshark/plugins/homeplug/copying
--- svn-copy/plugins/homeplug/copying	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/copying	2006-11-28 20:03:43.000000000 +0100
@@ -0,0 +1,280 @@
+		    gnu general public license
+		       version 2, june 1991
+
+ copyright (c) 1989, 1991 free software foundation, inc.
+     59 temple place, suite 330, boston, ma  02111-1307  usa
+ everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    preamble
+
+  the licenses for most software are designed to take away your
+freedom to share and change it.  by contrast, the gnu general public
+license is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  this
+general public license applies to most of the free software
+foundation's software and to any other program whose authors commit to
+using it.  (some other free software foundation software is covered by
+the gnu library general public license instead.)  you can apply it to
+your programs, too.
+
+  when we speak of free software, we are referring to freedom, not
+price.  our general public licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  to protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+these restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  for example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  you must make sure that they, too, receive or can get the
+source code.  and you must show them these terms so they know their
+rights.
+
+  we protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  if the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  finally, any free program is threatened constantly by software
+patents.  we wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  to prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  the precise terms and conditions for copying, distribution and
+modification follow.
+
+		    gnu general public license
+   terms and conditions for copying, distribution and modification
+
+  0. this license applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this general public license.  the "program", below,
+refers to any such program or work, and a "work based on the program"
+means either the program or any derivative work under copyright law:
+that is to say, a work containing the program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (hereinafter, translation is included without limitation in
+the term "modification".)  each licensee is addressed as "you".
+
+activities other than copying, distribution and modification are not
+covered by this license; they are outside its scope.  the act of
+running the program is not restricted, and the output from the program
+is covered only if its contents constitute a work based on the
+program (independent of having been made by running the program).
+whether that is true depends on what the program does.
+
+  1. you may copy and distribute verbatim copies of the program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this license and to the absence of any warranty;
+and give any other recipients of the program a copy of this license
+along with the program.
+
+you may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. you may modify your copy or copies of the program or any portion
+of it, thus forming a work based on the program, and copy and
+distribute such modifications or work under the terms of section 1
+above, provided that you also meet all of these conditions:
+
+    a) you must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) you must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this license.
+
+    c) if the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    license.  (exception: if the program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the program is not required to print an announcement.)
+
+these requirements apply to the modified work as a whole.  if
+identifiable sections of that work are not derived from the program,
+and can be reasonably considered independent and separate works in
+themselves, then this license, and its terms, do not apply to those
+sections when you distribute them as separate works.  but when you
+distribute the same sections as part of a whole which is a work based
+on the program, the distribution of the whole must be on the terms of
+this license, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the program.
+
+in addition, mere aggregation of another work not based on the program
+with the program (or with a work based on the program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this license.
+
+  3. you may copy and distribute the program (or a work based on it,
+under section 2) in object code or executable form under the terms of
+sections 1 and 2 above provided that you also do one of the following:
+
+    a) accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (this alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with subsection b above.)
+
+the source code for a work means the preferred form of the work for
+making modifications to it.  for an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  however, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+if distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. you may not copy, modify, sublicense, or distribute the program
+except as expressly provided under this license.  any attempt
+otherwise to copy, modify, sublicense or distribute the program is
+void, and will automatically terminate your rights under this license.
+however, parties who have received copies, or rights, from you under
+this license will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. you are not required to accept this license, since you have not
+signed it.  however, nothing else grants you permission to modify or
+distribute the program or its derivative works.  these actions are
+prohibited by law if you do not accept this license.  therefore, by
+modifying or distributing the program (or any work based on the
+program), you indicate your acceptance of this license to do so, and
+all its terms and conditions for copying, distributing or modifying
+the program or works based on it.
+
+  6. each time you redistribute the program (or any work based on the
+program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the program subject to
+these terms and conditions.  you may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+you are not responsible for enforcing compliance by third parties to
+this license.
+
+  7. if, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this license, they do not
+excuse you from the conditions of this license.  if you cannot
+distribute so as to satisfy simultaneously your obligations under this
+license and any other pertinent obligations, then as a consequence you
+may not distribute the program at all.  for example, if a patent
+license would not permit royalty-free redistribution of the program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this license would be to
+refrain entirely from distribution of the program.
+
+if any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+it is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+this section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this license.
+
+  8. if the distribution and/or use of the program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the program under this license
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  in such case, this license incorporates
+the limitation as if written in the body of this license.
+
+  9. the free software foundation may publish revised and/or new versions
+of the general public license from time to time.  such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+each version is given a distinguishing version number.  if the program
+specifies a version number of this license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the free
+software foundation.  if the program does not specify a version number of
+this license, you may choose any version ever published by the free software
+foundation.
+
+  10. if you wish to incorporate parts of the program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  for software which is copyrighted by the free
+software foundation, write to the free software foundation; we sometimes
+make exceptions for this.  our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    no warranty
+
+  11. because the program is licensed free of charge, there is no warranty
+for the program, to the extent permitted by applicable law.  except when
+otherwise stated in writing the copyright holders and/or other parties
+provide the program "as is" without warranty of any kind, either expressed
+or implied, including, but not limited to, the implied warranties of
+merchantability and fitness for a particular purpose.  the entire risk as
+to the quality and performance of the program is with you.  should the
+program prove defective, you assume the cost of all necessary servicing,
+repair or correction.
+
+  12. in no event unless required by applicable law or agreed to in writing
+will any copyright holder, or any other party who may modify and/or
+redistribute the program as permitted above, be liable to you for damages,
+including any general, special, incidental or consequential damages arising
+out of the use or inability to use the program (including but not limited
+to loss of data or data being rendered inaccurate or losses sustained by
+you or third parties or a failure of the program to operate with any other
+programs), even if such holder or other party has been advised of the
+possibility of such damages.
+
+		     end of terms and conditions
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/makefile.am wireshark/plugins/homeplug/makefile.am
--- svn-copy/plugins/homeplug/makefile.am	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/makefile.am	2006-12-04 20:19:09.000000000 +0100
@@ -0,0 +1,116 @@
+# makefile.am
+# automake file for homeplug plugin
+#
+# $id: makefile.am 18312 2006-06-02 06:53:30z standel $
+#
+# wireshark - network traffic analyzer
+# by gerald combs <gerald@xxxxxxxxxxxxx>
+# copyright 1998 gerald combs
+# 
+# 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 2
+# 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, write to the free software
+# foundation, inc., 59 temple place - suite 330, boston, ma  02111-1307, usa.
+#
+
+includes = -i$(top_srcdir) -i$(includedir)
+
+include makefile.common
+
+plugindir = @plugindir@
+
+plugin_ltlibraries = homeplug.la
+homeplug_la_sources = \
+	plugin.c \
+	moduleinfo.h \
+	$(dissector_src) \
+	$(dissector_includes)
+homeplug_la_ldflags = -module -avoid-version
+homeplug_la_libadd = @plugin_libs@
+
+libs =
+
+#
+# build plugin.c, which contains the plugin version[] string, a
+# function plugin_register() that calls the register routines for all
+# protocols, and a function plugin_reg_handoff() that calls the handoff
+# registration routines for all protocols.
+#
+# we do this by scanning sources.  if that turns out to be too slow,
+# maybe we could just require every .o file to have an register routine
+# of a given name (packet-aarp.o -> proto_register_aarp, etc.).
+#
+# formatting conventions:  the name of the proto_register_* routines an
+# proto_reg_handoff_* routines must start in column zero, or must be
+# preceded only by "void " starting in column zero, and must not be
+# inside #if.
+#
+# dissector_src is assumed to have all the files that need to be scanned.
+#
+# for some unknown reason, having a big "for" loop in the makefile
+# to scan all the files doesn't work with some "make"s; they seem to
+# pass only the first few names in the list to the shell, for some
+# reason.
+#
+# therefore, we have a script to generate the plugin.c file.
+# the shell script runs slowly, as multiple greps and seds are run
+# for each input file; this is especially slow on windows.  therefore,
+# if python is present (as indicated by python being defined), we run
+# a faster python script to do that work instead.
+#
+# the first argument is the directory in which the source files live.
+# the second argument is "plugin", to indicate that we should build
+# a plugin.c file for a plugin.
+# all subsequent arguments are the files to scan.
+#
+plugin.c: $(dissector_src) $(top_srcdir)/tools/make-dissector-reg \
+    $(top_srcdir)/tools/make-dissector-reg.py
+	@if test -n $(python); then \
+		echo making plugin.c with python ; \
+		$(python) $(top_srcdir)/tools/make-dissector-reg.py $(srcdir) \
+		    plugin $(dissector_src) ; \
+	else \
+		echo making plugin.c with shell script ; \
+		$(top_srcdir)/tools/make-dissector-reg $(srcdir) \
+		    $(plugin_src) plugin $(dissector_src) ; \
+	fi
+
+
+#
+# currently plugin.c can be included in the distribution because
+# we always build all protocol dissectors. we used to have to check
+# whether or not to build the snmp dissector. if we again need to
+# variably build something, making plugin.c non-portable, uncomment
+# the dist-hook line below.
+#
+# oh, yuk.  we don't want to include "plugin.c" in the distribution, as
+# its contents depend on the configuration, and therefore we want it
+# to be built when the first "make" is done; however, automake insists
+# on putting *all* source into the distribution.
+#
+# we work around this by having a "dist-hook" rule that deletes
+# "plugin.c", so that "dist" won't pick it up.
+#
+#dist-hook:
+#	@rm -f $(distdir)/plugin.c
+
+cleanfiles = \
+	homeplug \
+	*~
+
+maintainercleanfiles = \
+	makefile.in	\
+	plugin.c
+
+extra_dist = \
+	makefile.common		\
+	makefile.nmake
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/makefile.common wireshark/plugins/homeplug/makefile.common
--- svn-copy/plugins/homeplug/makefile.common	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/makefile.common	2006-11-28 20:41:55.000000000 +0100
@@ -0,0 +1,32 @@
+# makefile.common for homeplug plugin
+#     contains the stuff from makefile.am and makefile.nmake that is
+#     a) common to both files and
+#     b) portable between both files
+#
+# $id: makefile.common 18197 2006-05-21 05:12:17z standel $
+#
+# wireshark - network traffic analyzer
+# by gerald combs <gerald@xxxxxxxxxxxxx>
+# copyright 1998 gerald combs
+#
+# 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 2
+# 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, write to the free software
+# foundation, inc., 59 temple place - suite 330, boston, ma  02111-1307, usa.
+
+# the name of the plugin
+plugin_name = homeplug
+
+# the dissector sources (without any helpers)
+dissector_src = \
+	packet-homeplug.c 
+
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/makefile.nmake wireshark/plugins/homeplug/makefile.nmake
--- svn-copy/plugins/homeplug/makefile.nmake	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/makefile.nmake	2006-11-28 20:41:13.000000000 +0100
@@ -0,0 +1,79 @@
+# makefile.nmake
+# nmake file for homeplug plugin
+#
+# $id: makefile.nmake 19730 2006-10-29 17:19:52z standel $
+#
+
+include ..\..\config.nmake
+
+############### no need to modify below this line #########
+
+include makefile.common
+
+cflags=/dhave_config_h /i../.. /i../../wiretap $(glib_cflags) \
+	/i$(pcap_dir)\include -d_u_="" $(local_cflags)
+
+ldflags = /nologo /incremental:no /machine:i386 $(local_ldflags)
+
+!ifdef enable_libwireshark
+link_plugin_with=..\..\epan\libwireshark.lib
+cflags=/dhave_win32_libwireshark_lib /d_need_var_import_ $(cflags)
+
+dissector_objects = $(dissector_src:.c=.obj)
+
+objects=$(dissector_objects) plugin.obj
+
+artnet.dll artnet.exp artnet.lib : $(objects) $(link_plugin_with) 
+	link -dll /out:homeplug.dll $(ldflags) $(objects) $(link_plugin_with)  \
+	$(glib_libs)
+
+#
+# build plugin.c, which contains the plugin version[] string, a
+# function plugin_register() that calls the register routines for all
+# protocols, and a function plugin_reg_handoff() that calls the handoff
+# registration routines for all protocols.
+#
+# we do this by scanning sources.  if that turns out to be too slow,
+# maybe we could just require every .o file to have an register routine
+# of a given name (packet-aarp.o -> proto_register_aarp, etc.).
+#
+# formatting conventions:  the name of the proto_register_* routines an
+# proto_reg_handoff_* routines must start in column zero, or must be
+# preceded only by "void " starting in column zero, and must not be
+# inside #if.
+#
+# dissector_src is assumed to have all the files that need to be scanned.
+#
+# for some unknown reason, having a big "for" loop in the makefile
+# to scan all the files doesn't work with some "make"s; they seem to
+# pass only the first few names in the list to the shell, for some
+# reason.
+#
+# therefore, we have a script to generate the plugin.c file.
+# the shell script runs slowly, as multiple greps and seds are run
+# for each input file; this is especially slow on windows.  therefore,
+# if python is present (as indicated by python being defined), we run
+# a faster python script to do that work instead.
+#
+# the first argument is the directory in which the source files live.
+# the second argument is "plugin", to indicate that we should build
+# a plugin.c file for a plugin.
+# all subsequent arguments are the files to scan.
+#
+plugin.c: $(dissector_src)
+!ifdef python
+	@echo making plugin.c (using python)
+	@$(python) "../../tools/make-dissector-reg.py" . plugin $(dissector_src)
+!else
+	@echo making plugin.c (using sh)
+	@$(sh) ../../tools/make-dissector-reg . plugin $(dissector_src)
+!endif
+
+!endif
+
+clean:
+	rm -f $(objects) homeplug.dll homeplug.exp homeplug.lib *.pdb
+
+distclean: clean
+
+maintainer-clean: distclean
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/moduleinfo.h wireshark/plugins/homeplug/moduleinfo.h
--- svn-copy/plugins/homeplug/moduleinfo.h	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/moduleinfo.h	2006-11-28 20:38:52.000000000 +0100
@@ -0,0 +1,16 @@
+/* included *after* config.h, in order to re-define these macros */
+
+#ifdef package
+#undef package
+#endif
+
+/* name of package */
+#define package "homeplug"
+
+#ifdef version
+#undef version
+#endif
+
+/* version number of package */
+#define version "0.0.1"
+
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/packet-homeplug.c wireshark/plugins/homeplug/packet-homeplug.c
--- svn-copy/plugins/homeplug/packet-homeplug.c	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/packet-homeplug.c	2006-12-04 21:38:18.000000000 +0100
@@ -0,0 +1,760 @@
+// ==================================================================
+// @(#)packet-homeplug.c
+//
+// @author  bruno quoitin (bqu@xxxxxxxxxxxxxx), 
+//	    sebastien tandel (sta@xxxxxxxxxxxxxx)
+// @date 09/09/2005
+// @lastdate 14/09/2005
+//
+// 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.
+//
+// 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, write to the free software
+// foundation, inc., 59 temple place, suite 330,
+// boston,  ma 02111-1307  usa
+// ==================================================================
+
+#ifdef have_config_h
+# include "config.h"
+#endif
+
+#include "moduleinfo.h"
+
+#include <gmodule.h>
+#include <epan/packet.h>
+#include <epan/prefs.h>
+
+#define ethertype_homeplug    0x887b /* ieee assigned ethertype */
+
+
+/* metype values */
+#define homeplug_mme_rce      0x00
+#define homeplug_mme_cer      0x01
+#define homeplug_mme_rps      0x07
+#define homeplug_mme_psr      0x08
+#define homeplug_mme_ns	      0x1a
+
+/* bit mask operation */
+#define homeplug_mctrl_rsvd   0x80
+#define homeplug_mctrl_ne     0x7f
+
+#define homeplug_mehdr_mev    0xe0
+#define homeplug_mehdr_metype 0x1f
+
+#define homeplug_ns_ac	      0x80
+#define homeplug_ns_icid      0x7f
+
+#define homeplug_rce_cev      0xf0
+#define homeplug_rce_rsvd     0x0f
+
+#define homeplug_cer_cerv     0xf0
+#define homeplug_cer_rsvd     0x0fe0
+#define homeplug_cer_rxtmi    0x1f
+#define homeplug_cer_rate     0x80
+#define homeplug_cer_bp	      0x40
+#define homeplug_cer_vt11     0x0f
+#define homeplug_cer_rsvd2    0x80
+#define homeplug_cer_nbdas    0x7f
+
+
+/* length of network statistics response defines whether it is the basic or the
+ * extended response */
+#define homeplug_ns_basic_len 187
+#define homeplug_ns_ext_len   199
+
+/* forward reference */
+void proto_reg_handoff_homeplug();
+
+/*#ifndef enable_static
+g_module_export const gchar version[]= version;
+#endif*/
+
+static int proto_homeplug= -1;
+static dissector_handle_t homeplug_handle;
+
+static int hf_homeplug_mctrl		= -1;
+  static int hf_homeplug_mctrl_reserved = -1;
+  static int hf_homeplug_mctrl_ne	= -1;
+static int hf_homeplug_mehdr		= -1;
+  static int hf_homeplug_mehdr_mev		= -1;
+  static int hf_homeplug_mehdr_metype		= -1;
+static int hf_homeplug_melen		= -1;
+static int hf_homeplug_mme		= -1;
+  /* request channel estimation */
+  static int hf_homeplug_rce		= -1;
+    static int hf_homeplug_rce_cev	= -1;
+    static int hf_homeplug_rce_rsvd	= -1;
+  /* channel estimation response */
+  static int hf_homeplug_cer		= -1;
+    static int hf_homeplug_cer_cerv	= -1;
+    static int hf_homeplug_cer_rsvd1	= -1;
+    static int hf_homeplug_cer_rxtmi	= -1;
+    static int hf_homeplug_cer_vt	= -1;
+    static int hf_homeplug_cer_rate	= -1;
+    static int hf_homeplug_cer_bp	= -1;
+    static int hf_homeplug_cer_mod	= -1;
+    static int hf_homeplug_cer_vt11	= -1;
+    static int hf_homeplug_cer_rsvd2	= -1;
+    static int hf_homeplug_cer_nbdas	= -1;
+    static int hf_homeplug_cer_bda	= -1;
+  /* request parameters and statistics */
+  static int hf_homeplug_rps		= -1;
+  /* parameters and statistics response */
+  static int hf_homeplug_psr		= -1;
+    static int hf_homeplug_psr_txack	= -1;
+    static int hf_homeplug_psr_txnack	= -1;
+    static int hf_homeplug_psr_txfail	= -1;
+    static int hf_homeplug_psr_txcloss	= -1;
+    static int hf_homeplug_psr_txcoll	= -1;
+    static int hf_homeplug_psr_txca3lat	= -1;
+    static int hf_homeplug_psr_txca2lat = -1;
+    static int hf_homeplug_psr_txca1lat	= -1;
+    static int hf_homeplug_psr_txca0lat = -1;
+    static int hf_homeplug_psr_rxbp40	= -1;
+  /* network statistics */
+      /* basic */
+  static int hf_homeplug_ns		= -1;
+    static int hf_homeplug_ns_netw_ctrl_ac  = -1;
+    static int hf_homeplug_ns_netw_ctrl_icid= -1;
+    static int hf_homeplug_ns_netw_ctrl_icid_rsvd= -1;
+    static int hf_homeplug_ns_bytes40_robo  = -1;
+    static int hf_homeplug_ns_fails_robo    = -1;
+    static int hf_homeplug_ns_drops_robo    = -1;
+    static int hf_homeplug_ns_netw_da	    = -1;
+    static int hf_homeplug_ns_bytes40	    = -1;
+    static int hf_homeplug_ns_fails	    = -1;
+    static int hf_homeplug_ns_drops	    = -1;
+    /* array of 15 elements */
+//    static int hf_homeplug_ns_bytes40_1	    = -1;
+//    static int hf_homeplug_ns_bytes40_1
+      /* extended */
+    /* array of 6 elements */
+//    static int hf_homeplug_ns_tx_bfr_0_state = -1;
+
+static gint ett_homeplug		= -1;
+static gint ett_homeplug_mctrl		= -1;
+static gint ett_homeplug_mehdr		= -1;
+static gint ett_homeplug_mme		= -1;
+static gint ett_homeplug_rce		= -1;
+static gint ett_homeplug_cer		= -1;
+static gint ett_homeplug_rps		= -1;
+static gint ett_homeplug_psr		= -1;
+static gint ett_homeplug_ns		= -1;
+static gint ett_homeplug_tone		= -1;
+
+static guint8 homeplug_ne = 0;
+static guint8 homeplug_melen = 0;
+static guint8 homeplug_metype = 0;
+
+static guint32	homeplug_offset = 0;
+
+/* ic_id values */
+#define homeplug_ns_icid5130a1		0x00
+#define homeplug_ns_icid51x1usb		0x01
+#define homeplug_ns_icid51x1phy		0x02
+#define homeplug_ns_icid51x1host	0x03
+#define homeplug_ns_icid5130a2		0x04
+#define homeplug_ns_icid_rsvd1		0x05
+#define homeplug_ns_icid_rsvd2		0x06
+#define homeplug_ns_icid_rsvd3		0x07
+/* icid bit mask */
+#define homeplug_ns_icid_mask		0x07
+#define homeplug_ns_icid_rsvd_mask	0x78
+/* string values in function of ic_id values */
+static const value_string homeplug_ns_icid_vals[] = {
+    { homeplug_ns_icid5130a1, "int5130a1" },
+    { homeplug_ns_icid51x1usb, "int51x1 (usb option)" },
+    { homeplug_ns_icid51x1phy, "int51x1 (phy option)" },
+    { homeplug_ns_icid51x1host, "int51x1 (host/dte option)" },
+    { homeplug_ns_icid5130a2, "int5130a2" },
+    { homeplug_ns_icid_rsvd1, "reserved"},
+    { homeplug_ns_icid_rsvd2, "reserved"},
+    { homeplug_ns_icid_rsvd3, "reserved"},
+    { 0,      null }
+};
+
+/* modulation method bit mask */
+#define homeplug_cer_mod_mask	        0x30
+/* modulation method values */
+#define homeplug_cer_mod_robo		0x00
+#define homeplug_cer_mod_dbpsk		0x01
+#define homeplug_cer_mod_dqpsk		0x02
+#define	homeplug_cer_mod_rsvd		0x03
+/* string values in function of modulation method values */
+static const value_string homeplug_cer_mod_vals[] = {
+  { homeplug_cer_mod_robo, "robo modulation"},
+  { homeplug_cer_mod_dbpsk, "dbpsk modulation"},
+  { homeplug_cer_mod_dqpsk, "dqpsk modulation"},
+  { homeplug_cer_mod_rsvd, "reserved"},
+  { 0, null}
+};
+
+
+void
+proto_register_homeplug(void)
+{
+  module_t * homeplug_module;
+
+  static hf_register_info hf[] = {
+    /* mac control field */
+    { &hf_homeplug_mctrl,
+      { "mac control field", "homeplug.mctrl",
+      ft_uint8, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_mctrl_reserved, 
+      { "reserved", "homeplug.mctrl.rsvd",
+	ft_none, base_dec, null, homeplug_mctrl_rsvd, "", hfill }
+    },
+
+    { &hf_homeplug_mctrl_ne, 
+      { "number of mac data entries", "homeplug.mctrl.ne",
+	ft_uint8, base_dec, null, homeplug_mctrl_ne, "", hfill }
+    },
+
+    /* mac entry header */
+    { &hf_homeplug_mehdr,
+      { "mac management entry header", "homeplug.mehdr",
+	ft_none, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_mehdr_mev,
+      { "mac entry version", "homeplug.mehdr.mev",
+	ft_uint8, base_dec, null, homeplug_mehdr_mev, "", hfill }
+    },
+
+    { &hf_homeplug_mehdr_metype,
+      { "mac entry type", "homeplug.mehdr.metype",
+	ft_uint8, base_hex, null, homeplug_mehdr_metype, "", hfill }
+    },
+
+    /* mac entry len */
+    { &hf_homeplug_melen,
+      { "mac management entry length", "homeplug.melen",
+	ft_uint8, base_dec, null, 0x0, "", hfill }
+    },
+
+    /* mac management entry */
+    { &hf_homeplug_mme,
+      { "mac management entry data", "homeplug.mmentry",
+	ft_uint8, base_dec, null, 0x0, "", hfill }
+    },
+
+    /* request channel estimation */
+    { &hf_homeplug_rce,
+      { "request channel estimation", "homeplug.rce",
+	ft_none, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_rce_cev,
+      { "channel estimation version", "homeplug.rce.cev",
+	ft_uint8, base_dec, null, homeplug_rce_cev, "", hfill }
+    },
+
+    { &hf_homeplug_rce_rsvd,
+      { "reserved", "homeplug.rce.rsvd",
+	ft_none, base_dec, null, homeplug_rce_rsvd, "", hfill }
+    },
+
+    /* channel estimation response */
+    { &hf_homeplug_cer,
+      { "channel estimation response", "homeplug.cer",
+	ft_none, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_cer_cerv,
+      { "channel estimation response version", "homeplug.cer.cerv",
+	ft_uint8, base_dec, null, homeplug_cer_cerv, "", hfill }
+    },
+
+    { &hf_homeplug_cer_rsvd1,
+      { "reserved", "homeplug.cer.rsvd1",
+	ft_none, base_dec, null, homeplug_cer_rsvd, "", hfill }
+    },
+
+    { &hf_homeplug_cer_rxtmi,
+      { "receive tone map index", "homeplug.cer.rxtmi",
+	ft_uint8, base_dec, null, homeplug_cer_rxtmi, "", hfill }
+    },
+
+    /* todo must append vt[79-0] */
+
+    { &hf_homeplug_cer_vt, 
+      {"valid tone flags", "homeplug.cer.vt",
+	ft_uint8, base_hex, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_cer_rate,
+      { "fec rate", "homeplug.cer.rate",
+	ft_uint8, base_dec, null, homeplug_cer_rate, "", hfill }
+    },
+
+    { &hf_homeplug_cer_bp,
+      { "bridge proxy", "homeplug.cer.bp",
+	ft_uint8, base_dec, null, homeplug_cer_bp, "", hfill }
+    },
+
+    { &hf_homeplug_cer_mod,
+      { "modulation method", "homeplug.cer.mod",
+	ft_uint8, base_dec, vals(&homeplug_cer_mod_vals), homeplug_cer_mod_mask, "", hfill }
+    },
+
+    { &hf_homeplug_cer_vt11,
+      { "valid tone flags [83-80]", "homeplug.cer.vt11",
+	ft_uint8, base_dec, null, homeplug_cer_vt11, "", hfill }
+    },
+
+    { &hf_homeplug_cer_rsvd2,
+      { "reserved", "homeplug.cer.rsvd2",
+	ft_uint8, base_dec, null, homeplug_cer_rsvd2, "", hfill }
+    },
+
+    { &hf_homeplug_cer_nbdas,
+      { "number bridged destination addresses", "homeplug.cer.nbdas",
+	ft_uint8, base_dec, null, homeplug_cer_nbdas, "", hfill }
+    },
+
+    { &hf_homeplug_cer_bda,
+      { "bridged destination address", "homeplug.cer.bda",
+	ft_ether, base_hex, null, 0x0, "", hfill }
+    },
+
+    /* request parameters and statistics */
+    { &hf_homeplug_rps,
+      { "request parameters and statistics", "homeplug.rps",
+	ft_none, base_dec, null, 0x0, "", hfill }
+    },
+	
+    /* parameters and statistics response */
+    { &hf_homeplug_psr,
+      { "parameters and statistics response", "homeplug.psr",
+	ft_none, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_txack,
+      { "transmit ack counter", "homeplug.psr.txack",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_txnack,
+      { "transmit nack counter", "homeplug.psr.txnack",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_txfail,
+      { "transmit fail counter", "homeplug.psr.txfail",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_txcloss,
+      { "transmit contention loss counter", "homeplug.psr.txcloss",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_txcoll,
+      { "transmit collision counter", "homeplug.psr.txcoll",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_txca3lat,
+      { "transmit ca3 latency counter", "homeplug.psr.txca3lat",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_txca2lat,
+      { "transmit ca2 latency counter", "homeplug.psr.txca2lat",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+    { &hf_homeplug_psr_txca1lat,
+      { "transmit ca1 latency counter", "homeplug.psr.txca1lat",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+    { &hf_homeplug_psr_txca0lat,
+      { "transmit ca0 latency counter", "homeplug.psr.txca0lat",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_psr_rxbp40,
+      { "receive cumulative bytes per 40-symbol", "homeplug.psr.rxbp40",
+	ft_uint32, base_dec, null, 0x0, "", hfill }
+    },
+
+    /* network statistics basic */
+    { &hf_homeplug_ns,
+      { "network statistics basic", "homeplug.ns",
+	ft_none, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_ns_netw_ctrl_ac, 
+      { "action control", "homeplug.ns.ac",
+      ft_boolean, base_dec, null, homeplug_ns_ac, "", hfill }
+    },
+    
+    { &hf_homeplug_ns_netw_ctrl_icid,
+      { "ic_id", "homeplug.ns.icid",
+      ft_uint8, base_hex, vals(&homeplug_ns_icid_vals), homeplug_ns_icid_mask, "", hfill }
+    },
+
+    { &hf_homeplug_ns_netw_ctrl_icid_rsvd,
+      { "ic_id reserved", "homeplug.ns.icid",
+	ft_none, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_ns_bytes40_robo,
+      { "bytes in 40 symbols in robo", "homeplug.ns.bytes40_robo",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_ns_fails_robo,
+      { "fails received in robo", "homeplug.ns.fails_robo",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_ns_drops_robo,
+      { "frame drops in robo", "homeplug.ns.drops_robo",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    /* todo netw_da1 ... */
+    { &hf_homeplug_ns_netw_da,
+      { "address of network da", "homeplug.ns.netw_da",
+	ft_ether, base_hex, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_ns_bytes40,
+      { "bytes in 40 symbols", "homeplug.ns.bytes40",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_ns_fails,
+      { "fails received", "homeplug.ns.fails",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    },
+
+    { &hf_homeplug_ns_drops,
+      { "frame drops", "homeplug.ns.drops",
+	ft_uint16, base_dec, null, 0x0, "", hfill }
+    }
+
+    /* todo network statistics extended */
+  };
+
+  /* setup protocol subtree array */
+  static gint *ett[] = {
+    &ett_homeplug,
+    &ett_homeplug_mctrl,
+    &ett_homeplug_mehdr,
+    &ett_homeplug_rce,
+    &ett_homeplug_cer,
+    &ett_homeplug_rps,
+    &ett_homeplug_psr,
+    &ett_homeplug_ns,
+    &ett_homeplug_tone,
+  };
+
+  if (proto_homeplug == -1) {
+    proto_homeplug= proto_register_protocol(
+					    "homeplug protocol",  /* name */
+					    "homeplug",		  /* short name */
+					    "homeplug"		  /* abbrev */
+					    );
+    proto_register_field_array(proto_homeplug,
+			       hf, array_length(hf));
+    proto_register_subtree_array(ett, array_length(ett));
+  }
+  homeplug_module= prefs_register_protocol(proto_homeplug,
+					   proto_reg_handoff_homeplug);
+}
+
+/* dissection of mctrl */
+static void dissect_homeplug_mctrl(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_item * it = null;
+  proto_tree * additional_tree = null;
+  
+  it = proto_tree_add_item(tree, hf_homeplug_mctrl, tvb, 0, 1, false);
+  additional_tree = proto_item_add_subtree(it, ett_homeplug_mctrl);
+    proto_tree_add_item(additional_tree, hf_homeplug_mctrl_reserved, tvb, 0, 1, false);
+    proto_tree_add_item(additional_tree, hf_homeplug_mctrl_ne, tvb, 0, 1, false);
+
+  homeplug_ne = tvb_get_guint8(tvb, 0) & homeplug_mctrl_ne;
+
+  homeplug_offset += 1;
+  
+}
+
+/* dissection of mehdr */
+static void dissect_homeplug_mehdr(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_item * it = null;
+  proto_tree * additional_tree = null;
+  
+  it = proto_tree_add_item (tree, hf_homeplug_mehdr, tvb, homeplug_offset, 1, false);
+  additional_tree = proto_item_add_subtree(it, ett_homeplug_mehdr);
+    proto_tree_add_item(additional_tree, hf_homeplug_mehdr_mev, tvb, homeplug_offset, 1, false);
+    proto_tree_add_item(additional_tree, hf_homeplug_mehdr_metype, tvb, homeplug_offset, 1, false);
+
+  homeplug_metype = tvb_get_guint8(tvb, homeplug_offset) & homeplug_mehdr_metype;
+
+  homeplug_offset += 1;
+}
+
+/* dissection of melen */
+static void dissect_homeplug_melen(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_tree_add_item(tree, hf_homeplug_melen, tvb, homeplug_offset, 1, false);
+
+  homeplug_melen = tvb_get_guint8(tvb, homeplug_offset); 
+
+  homeplug_offset += 1;
+}
+
+/* dissection of request channel estimation mme */
+static void dissect_homeplug_rce(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_item * it = null;
+  proto_tree * additional_tree= null;
+
+  it = proto_tree_add_item(tree, hf_homeplug_rce, tvb, homeplug_offset, homeplug_melen, false);
+  additional_tree = proto_item_add_subtree(it , ett_homeplug_rce);
+    proto_tree_add_item(additional_tree, hf_homeplug_rce_cev, tvb, homeplug_offset, 1, false);
+    proto_tree_add_item(additional_tree, hf_homeplug_rce_rsvd, tvb, homeplug_offset, 1, false);
+
+  homeplug_offset += 1;
+}
+
+/* dissection of channel estimation response mme */
+static void dissect_homeplug_cer(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_item * it = null;
+  proto_tree * additional_tree = null;
+  guint8 itone = 0;
+  guint8 bp = 0;
+  guint8 inbda = 0;
+
+  it = proto_tree_add_item(tree, hf_homeplug_cer, tvb, homeplug_offset, homeplug_melen, false);
+  additional_tree = proto_item_add_subtree(it, ett_homeplug_cer);
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_cerv, tvb, homeplug_offset, 1, false);
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_rsvd1, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 1;
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_rxtmi, tvb, homeplug_offset, 1, false);
+    homeplug_offset += 1;
+    while (itone < 10) {
+      proto_tree_add_item(additional_tree, hf_homeplug_cer_vt, tvb, homeplug_offset, 1, false);
+      homeplug_offset += 1;
+      itone ++;
+    }
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_rate, tvb, homeplug_offset, 1, false);
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_bp, tvb, homeplug_offset, 1, false);
+    bp = tvb_get_guint8(tvb, homeplug_offset) & homeplug_cer_bp;
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_mod, tvb, homeplug_offset, 1, false);
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_vt11, tvb, homeplug_offset, 1, false);
+    homeplug_offset += 1;
+    proto_tree_add_item(additional_tree, hf_homeplug_cer_rsvd2, tvb, homeplug_offset, 1, false);
+    if (bp) {
+      proto_tree_add_item(additional_tree, hf_homeplug_cer_nbdas, tvb, homeplug_offset, 1, false);
+      inbda = tvb_get_guint8(tvb, homeplug_offset) & homeplug_cer_nbdas;
+      homeplug_offset += 1;
+      /* todo : check on inbda! int51x1 up to 16 dba. but up to 32 for int51x1 (host/dte) */
+      while (inbda > 0) {
+	proto_tree_add_item(additional_tree, hf_homeplug_cer_bda, tvb, homeplug_offset, 6, false);
+	homeplug_offset += 6;
+	inbda--;
+      }
+    }
+}
+
+/* dissection of request parameters and statistics mme */
+static void dissect_homeplug_rps(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_tree_add_item(tree, hf_homeplug_rps, tvb, homeplug_offset, homeplug_melen, false);
+}
+
+/* dissection of parameters and statistics response mme */
+static void dissect_homeplug_psr(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_item * it = null;
+  proto_tree * additional_tree=null;
+  
+  it = proto_tree_add_item(tree, hf_homeplug_psr, tvb, homeplug_offset, homeplug_melen, false); 
+  additional_tree = proto_item_add_subtree(it, ett_homeplug_psr);
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txack, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txnack, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txfail, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txcloss, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txcoll, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txca3lat, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txca2lat, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txca1lat, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_txca0lat, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_psr_rxbp40, tvb, homeplug_offset, 4, false);
+    homeplug_offset += 4;
+}
+
+/* dissection of the network statistic mme */
+static void dissect_homeplug_ns(tvbuff_t * tvb, proto_tree * tree)
+{
+  proto_item * it = null;
+  proto_tree * additional_tree=null, * tree_tone = null;
+  guint8 homeplug_ns_icid_rsvd = 0;
+  guint8 itone = 0;
+
+  /* todo : test length of the mme : differentiation of ns basic and extended */
+  it = proto_tree_add_item(tree, hf_homeplug_ns, tvb, homeplug_offset, homeplug_melen, false);
+  additional_tree = proto_item_add_subtree(it, ett_homeplug_ns);
+    proto_tree_add_item(additional_tree, hf_homeplug_ns_netw_ctrl_ac, tvb, homeplug_offset, 1, false);
+    homeplug_ns_icid_rsvd = tvb_get_guint8(tvb, homeplug_offset) & homeplug_ns_icid_rsvd_mask; 
+    if (homeplug_ns_icid_rsvd)
+      proto_tree_add_item(additional_tree, hf_homeplug_ns_netw_ctrl_icid_rsvd, tvb, homeplug_offset, 1, false);
+    else
+      proto_tree_add_item(additional_tree, hf_homeplug_ns_netw_ctrl_icid, tvb, homeplug_offset, 1, false);
+    homeplug_offset += 1;
+    /* todo : represents mhz by bytes40/42 */
+    proto_tree_add_item(additional_tree, hf_homeplug_ns_bytes40_robo, tvb, homeplug_offset, 2, true);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_ns_fails_robo, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    proto_tree_add_item(additional_tree, hf_homeplug_ns_drops_robo, tvb, homeplug_offset, 2, false);
+    homeplug_offset += 2;
+    while (itone < 15) {
+      it = proto_tree_add_text(additional_tree, tvb, homeplug_offset, 12, "tone map #%d", itone+1);
+      tree_tone = proto_item_add_subtree(it, ett_homeplug_tone);
+	/* todo : check if the (da == 01:00:00:00:00:00). it tell us that following data are not valid. */
+	proto_tree_add_item(tree_tone, hf_homeplug_ns_netw_da, tvb, homeplug_offset, 6, false);
+	homeplug_offset += 6;
+	/* todo : represents mhz by bytes40/42 */
+	proto_tree_add_item(tree_tone, hf_homeplug_ns_bytes40, tvb, homeplug_offset, 2, true);
+	homeplug_offset += 2;
+	proto_tree_add_item(tree_tone, hf_homeplug_ns_fails, tvb, homeplug_offset, 2, true);
+	homeplug_offset += 2;
+	proto_tree_add_item(tree_tone, hf_homeplug_ns_drops, tvb, homeplug_offset, 2, true);
+	homeplug_offset += 2;
+
+      itone++;
+    }
+}
+
+static void dissect_homeplug_mme(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+{
+
+  switch(homeplug_metype) {
+    case homeplug_mme_rce:
+      if (check_col(pinfo->cinfo, col_info)) {
+	col_clear(pinfo->cinfo, col_info);
+	col_set_str(pinfo->cinfo, col_info, "request channel estimation");
+      }
+      dissect_homeplug_rce(tvb, tree);
+      break;
+    case homeplug_mme_cer:
+      if (check_col(pinfo->cinfo, col_info)) {
+	col_clear(pinfo->cinfo, col_info);
+	col_set_str(pinfo->cinfo, col_info, "channel estimation response");
+      }
+      dissect_homeplug_cer(tvb, tree);
+      break;
+    case homeplug_mme_rps:
+      if (check_col(pinfo->cinfo, col_info)) {
+	col_clear(pinfo->cinfo, col_info);
+	col_set_str(pinfo->cinfo, col_info, "request parameters and statistics");
+      } 
+      dissect_homeplug_rps(tvb, tree);
+      break;
+    case homeplug_mme_psr:
+      if (check_col(pinfo->cinfo, col_info)) {
+	col_clear(pinfo->cinfo, col_info);
+	col_set_str(pinfo->cinfo, col_info, "parameters and statistics response");
+      }
+      dissect_homeplug_psr(tvb, tree);
+      break;
+    case homeplug_mme_ns:
+      if (check_col(pinfo->cinfo, col_info)) {
+	col_clear(pinfo->cinfo, col_info);
+	col_set_str(pinfo->cinfo, col_info, "network statistics");
+      }
+      dissect_homeplug_ns(tvb, tree);
+      break;
+  }
+}
+
+static void
+dissect_homeplug(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+{
+  proto_item * it= null;
+  proto_tree * homeplug_tree= null;
+
+  if (check_col(pinfo->cinfo, col_protocol))
+    col_set_str(pinfo->cinfo, col_protocol, "homeplug");
+  /* clear out stuff in the info column */
+  if (check_col(pinfo->cinfo, col_info)) {
+    col_clear(pinfo->cinfo, col_info);
+    col_set_str(pinfo->cinfo, col_info, "mac management");
+  }
+
+  if (tree) {
+    homeplug_offset = 0;
+    it= proto_tree_add_item(tree, proto_homeplug, tvb, homeplug_offset, -1, false);
+    homeplug_tree = proto_item_add_subtree(it, ett_homeplug);
+
+    dissect_homeplug_mctrl(tvb, homeplug_tree);
+    //proto_item * it = null;
+    //proto_tree * additional_tree = null;
+
+    /* homeplug_ne indicates the number of mme entries. this field is fetched
+     * from mctrl. */
+    while (homeplug_ne > 0) {
+      dissect_homeplug_mehdr(tvb, homeplug_tree);
+
+      dissect_homeplug_melen(tvb, homeplug_tree);
+
+      dissect_homeplug_mme(tvb, pinfo, homeplug_tree);
+
+      homeplug_ne--;
+    }
+  }
+}
+
+void
+proto_reg_handoff_homeplug(void)
+{
+  static int initialized= false;
+
+  if (!initialized) {
+    homeplug_handle= create_dissector_handle(dissect_homeplug, proto_homeplug);
+    dissector_add("ethertype", ethertype_homeplug, homeplug_handle);
+    initialized= true;
+  }
+}
+
+
+/*#ifndef enable_static
+g_module_export void
+plugin_register(void)
+{
+  if (proto_homeplug == -1) {
+    proto_register_homeplug();
+
+  }
+}
+
+g_module_export void
+plugin_reg_handoff(void) {
+  proto_reg_handoff_homeplug();
+}
+#endif*/
+
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/readme wireshark/plugins/homeplug/readme
--- svn-copy/plugins/homeplug/readme	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/readme	2006-11-28 20:03:43.000000000 +0100
@@ -0,0 +1,14 @@
+homeplug plugin currently dissects :
+  mctrl
+  mehdr
+  melen
+
+  mme : 
+    request channel estimation (0x00) (not tested!)
+    channel estimation response (0x01) (not tested!)
+    request parameters and statistics (0x07)
+    parameters and statistics response (0x08)
+    network statistics basic (0x1a)
+
+  partial support for : 
+    network statistics extended (ox1a)
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/homeplug/readme.developper wireshark/plugins/homeplug/readme.developper
--- svn-copy/plugins/homeplug/readme.developper	1970-01-01 01:00:00.000000000 +0100
+++ wireshark/plugins/homeplug/readme.developper	2006-12-04 22:00:45.000000000 +0100
@@ -0,0 +1,28 @@
+readme.developper (bqu@xxxxxxxxxxxxxx, sta@xxxxxxxxxxxxxx)
+=================
+
+you will need to update the following files in order to compile the
+homeplug plugin:
+
+  configure.in
+  makefile.am
+  plugins/makefile.am
+  plugins/makefile.nmake
+  epan/makefile.am
+
+the homeplug plugin should come with the following files:
+
+  plugins/homeplug/authors
+  plugins/homeplug/copying
+  plugins/homeplug/changelog
+  plugins/homeplug/makefile.am
+  plugins/homeplug/makefile.common
+  plugins/homeplug/makefile.nmake
+  plugins/homeplug/moduleinfo.h
+  plugins/homeplug/packet-homeplug.c
+
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/makefile.am wireshark/plugins/makefile.am
--- svn-copy/plugins/makefile.am	2006-12-04 22:01:23.000000000 +0100
+++ wireshark/plugins/makefile.am	2006-11-28 20:03:56.000000000 +0100
@@ -31,6 +31,7 @@
 	giop \
 	gryphon \
 	h223 \
+	homeplug \
 	irda \
 	lwres \
 	mate \
diff --unidirectional-new-file -r -u -x'*entries' svn-copy/plugins/makefile.nmake wireshark/plugins/makefile.nmake
--- svn-copy/plugins/makefile.nmake	2006-12-04 22:01:23.000000000 +0100
+++ wireshark/plugins/makefile.nmake	2006-11-28 20:22:12.000000000 +0100
@@ -17,6 +17,7 @@
 	giop \
 	gryphon \
 	h223 \
+	homeplug \
 	irda \
 	lwres \
 	mate \
@@ -81,6 +82,11 @@
 	$(make) /$(makeflags) -f makefile.nmake
 	cd ..
 
+homeplug::
+	cd homeplug
+	$(make) /$(makeflags) -f makefile.nmake
+	cd ..
+
 irda::
 	cd irda
 	$(make) /$(makeflags) -f makefile.nmake
@@ -179,6 +185,9 @@
 	cd h223
 	$(make) /$(makeflags) -f makefile.nmake clean
 	cd ..
+	cd homeplug
+	$(make) /$(makeflags) -f makefile.nmake clean
+	cd ..
 	cd irda
 	$(make) /$(makeflags) -f makefile.nmake clean
 	cd ..
@@ -251,6 +260,9 @@
 	cd h223
 	$(make) /$(makeflags) -f makefile.nmake distclean
 	cd ..
+	cd homeplug
+	$(make) /$(makeflags) -f makefile.nmake distclean
+	cd ..
 	cd irda
 	$(make) /$(makeflags) -f makefile.nmake distclean
 	cd ..
@@ -323,6 +335,9 @@
 	cd h223
 	$(make) /$(makeflags) -f makefile.nmake maintainer-clean
 	cd ..
+	cd homeplug
+	$(make) /$(makeflags) -f makefile.nmake maintainer-clean
+	cd ..
 	cd irda
 	$(make) /$(makeflags) -f makefile.nmake maintainer-clean
 	cd ..
@@ -382,6 +397,7 @@
 	xcopy giop\*.dll $(version) /d
 	xcopy gryphon\*.dll $(version) /d
 	xcopy h223\*.dll $(version) /d
+	xcopy homeplug\*.dll $(version) /d
 	xcopy irda\*.dll $(version) /d
 	xcopy lwres\*.dll $(version) /d
 	xcopy mate\*.dll $(version) /d