Richard Achmatowicz commented on JGRP-324:
I spent a little more time looking at JGroups wireformats. I sent you earlier the
wireformat for JGroups messages as sent by UDP/TCP.
I wanted to add to that a concrete protocol as well, and I have done so for the lowest
level protocol sitting on top of UDP/TCP - the PING protocol. I have included the
wireformat for that message at the end of this email.
Just as a reminder, we have the following structure for things sent across the wire in
JGroups (up to and including PING):
* Ethernet frame
** UDP/TCP packet
*** JGroups TP packet, containing a header and one or more bundled Messages
**** Message containing a PING header
1. I believe we now have enough information to start putting together a dissector which
will handle completely PING messages. A PING message is going to be Message structure
which contains a single PING header. We should make it our aim to get this working as a
The key problems I see in getting this working are:
(i) dealing with bundled messages - Messages can contain one or more bundled Messages and
as a first step in receiving a TP packet, need to be able to unbundle it if necessary.
(ii) writing small C routines to dissect Address instances - Address instances are
embedded both in TP packets, serialized Messages, as well as serialized PingHeaders.
Solving (i) will involve reading up on how Wireshark handles bundled messages and getting
some basic framework working to display the individual packets within a bundle in some
reasonable way on the Wireshark GUI.
Solving (ii) will simply be a matter of writing a Wireshark routine for displaying an
arbitrary JGroups Address - mimicking the code in Util.readAddress(). Shouldn't be too
2. If you need a svn repository to store your Wireshark code, I can set up a repo for you
on our internal QA repository.
What do you think about 1 & 2?
PING wire format (PingHeader)
byte type: (1=PingHeader.GET_MBRS_REQ, 2=PingHeader.GET_MBRS_RSP)
PingRsp response: can take value null, or a PingRsp instance
Address local ;
Address coord ;
boolean is_server ;
These elements are serialised using PingRsp.writeTo() and PingRsp.readFrom() methods,
DataStream methods to write bthe small pieces which make up the serialzed form. For
Addresses are written using a combination of Util.writeStreamable() and
Ethereal plugin for JGroups
Issue Type: Feature Request
Reporter: Bela Ban
Assigned To: Richard Achmatowicz
Fix For: 2.x
Write a C implementation of an ethereal plugin which understands the JGroups wire format
and displays information about the JGroups messages (e.g. sender, receiver, headers) in
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see: http://www.atlassian.com/software/jira