[Ocfs2-tools-devel] [PATCH 1/1] wireshark-ocfs2: add dlm_query_join response handler
Jeff Liu
jeff.liu at oracle.com
Wed Jul 15 21:14:12 PDT 2009
this patch add the handler against dlm_query_join_response message, it
could deal with both ocfs2-1.2.x and the newer packet layout.
for ocfs2-1.4.x and the newer, the response status will be dissected and shown as:
Status: Value (response_code:dlm_minor:fs_minor)
Signed-off-by: Jeff Liu <jeff.liu at oracle.com>
---
epan/dissectors/packet-ocfs2.c | 54 +++++++++++++++++++++++++++++++++++++--
1 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/epan/dissectors/packet-ocfs2.c b/epan/dissectors/packet-ocfs2.c
index ce57c3f..a4f07cc 100644
--- a/epan/dissectors/packet-ocfs2.c
+++ b/epan/dissectors/packet-ocfs2.c
@@ -229,12 +229,27 @@ const char * decode_enumerated_bitfield_full(guint32 val, guint32 mask, int widt
#define DLM_LVB_LEN 64
#define DLM_MOD_KEY (0x666c6172)
-enum dlm_query_join_response {
+enum dlm_query_join_response_code {
JOIN_DISALLOW = 0,
JOIN_OK,
JOIN_OK_NO_MAP,
+ JOIN_PROTOCOL_MISMATCH,
};
+struct dlm_query_join_packet {
+ guint8 code; /* Response code. dlm_minor and fs_minor
+ are only valid if this is JOIN_OK */
+ guint8 dlm_minor; /* The minor version of the protocol the
+ dlm is speaking. */
+ guint8 fs_minor; /* The minor version of the protocol the
+ filesystem is speaking. */
+ guint8 reserved;
+};
+
+union dlm_query_join_response {
+ guint32 intval;
+ struct dlm_query_join_packet packet;
+};
/* DLM lock modes */
enum {
@@ -1148,10 +1163,37 @@ static void msg_struct_enumerate_fields(struct dlm_msg_struct_def *def, proto_tr
}
}
+static void dissect_dlm_query_join_response(proto_tree *tree,
+ proto_item *item,
+ tvbuff_t *tvb,
+ int offset)
+{
+ union dlm_query_join_response response;
+ struct dlm_query_join_packet packet;
+ guint32 status;
+
+ status = tvb_get_ntohl(tvb, offset);
+
+ /* NOP if ocfs2-1.2.x message coming */
+ if (status < JOIN_PROTOCOL_MISMATCH)
+ return ;
+
+ /* for ocfs2-1.4.x and newer */
+ response.intval = htonl(status);
+ packet = response.packet;
+ proto_item_append_text(item, " (%u:", packet.code);
+
+ if (packet.code == JOIN_OK)
+ proto_item_append_text(item, "%u:%u",
+ packet.dlm_minor, packet.fs_minor);
+
+ proto_item_append_text(item, ")");
+}
+
static int dissect_ocfs2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
proto_tree *subtree = NULL;
- proto_item *ti;
+ proto_item *ti, *si;
guint16 len, magic, msg_type;
int ret;
@@ -1188,7 +1230,7 @@ static int dissect_ocfs2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_item(subtree, hf_msg_sys_status,
tvb, O2NET_MSG_HDR_OFF_SYS_STATUS, 4,
FALSE);
- proto_tree_add_item(subtree, hf_msg_status,
+ si = proto_tree_add_item(subtree, hf_msg_status,
tvb, O2NET_MSG_HDR_OFF_STATUS, 4,
FALSE);
proto_tree_add_item(subtree, hf_msg_key,
@@ -1240,6 +1282,12 @@ static int dissect_ocfs2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
}
+ if (msg_type == DLM_QUERY_JOIN_MSG) {
+ if (magic == O2NET_MSG_STATUS_MAGIC)
+ dissect_dlm_query_join_response(subtree,
+ si, tvb, O2NET_MSG_HDR_OFF_STATUS);
+ goto out;
+ }
if (magic == O2NET_MSG_MAGIC) {
struct dlm_msg_struct_def *def;
--
1.5.4.3
More information about the Ocfs2-tools-devel
mailing list