[Ocfs2-tools-devel] [PATCH 1/5] wireshark-ocfs2: add dlm_query_join_request handler V3

jeff.liu jeff.liu at oracle.com
Tue Aug 18 19:49:09 PDT 2009


Hi Sunil,

Yes, I forgot remove those entries, it will be corrected in next version.


Thanks,
Jeff

Sunil Mushran 写道:
> Checked in.
>
> This patch has a small bug requiring a trivial fix. It is printing 
> Node Index/Domain
> twice. You probably need to remove the entries for DLM_QUERY_JOIN_MSG 
> in dlm_struct_defs.
>
> Magic: Request (0xfa55)
> Len: 104
> Type: Query Join (510)
> Sys Status: 0
> Status: 0
> Key: 0x666c6172
> Num: 0
> Payload1: 050000200100010039434430464639363646363234353833
> Payload2: 383744433038323736314633454344350000000000000000
> Payload3: 000000000000000000000000000000000000000000000000
> Payload4: 200000800301000000000000000000000000000000000000
> Payload5: 0000000000000000
> Node Index: 5
> Domain Namelen: 32
> Domain Name: 9CD0FF966F62458387DC082761F3ECD5
> Node Index: 5
> Namelen: 32
> DLM Protocol: 1.0
> FS Protocol: 1.0
> Domain Name: 9CD0FF966F62458387DC082761F3ECD5
> Node Map: 
> 0000010000000000000000000000000111000000100000000000000000000000
> Node Map: 
> 0000000000000000000000000000000000000000000000000000000000000000
> Node Map: 
> 0000000000000000000000000000000000000000000000000000000000000000
> Node Map: 
> 0000000000000000000000000000000000000000000000000000000000000000
>
> Jeff Liu wrote:
>> this patch dissect the dlm_query_join_request message as follows,
>>
>> Magic: Request (0xfa55)
>> ...
>> ..
>> DLM Protocol: 1.0
>> FS Protocol: 1.0
>> Domain Name: A898D073F6244E9EBEB057B4F47EF61A
>> Node Map: 
>> 0000001100000000000000000000000000000000000000000000000000000000
>> Node Map: 
>> 0000000000000000000000000000000000000000000000000000000000000000
>> Node Map: 
>> 0000000000000000000000000000000000000000000000000000000000000000
>> Node Map: 
>> 0000000000000000000000000000000000000000000000000000000000000000
>>
>> Signed-off-by: Jeff Liu <jeff.liu at oracle.com>
>> ---
>> epan/dissectors/packet-ocfs2.c | 104 
>> ++++++++++++++++++++++++++++++++++++++-
>> 1 files changed, 101 insertions(+), 3 deletions(-)
>>
>> diff --git a/epan/dissectors/packet-ocfs2.c 
>> b/epan/dissectors/packet-ocfs2.c
>> index ce57c3f..cc8749c 100644
>> --- a/epan/dissectors/packet-ocfs2.c
>> +++ b/epan/dissectors/packet-ocfs2.c
>> @@ -776,13 +776,36 @@ struct dlm_master_requery {
>> guint32 pad3;
>> guint8 name[O2NM_MAX_NAME_LEN];
>> };
>> -struct dlm_query_join_request
>> -{
>> +
>> +#define O2NM_MAX_NODES 255
>> +#define BITS_PER_BYTE 8
>> +#define BITS_TO_BYTES(bits) (((bits)+BITS_PER_BYTE-1)/BITS_PER_BYTE)
>> +
>> +/* dlm_query_join_request for ocfs2-1.2.x */
>> +struct dlm_query_join_request_129 {
>> guint8 node_idx;
>> guint8 pad1[2]; // unused
>> guint8 name_len;
>> guint8 domain[O2NM_MAX_NAME_LEN];
>> + guint8 node_map[BITS_TO_BYTES(O2NM_MAX_NODES)];
>> };
>> +
>> +struct dlm_protocol_version {
>> + guint8 pv_major;
>> + guint8 pv_minor;
>> +};
>> +
>> +/* the latest msg layout */
>> +struct dlm_query_join_request {
>> + guint8 node_idx;
>> + guint8 pad1[2];
>> + guint8 name_len;
>> + struct dlm_protocol_version dlm_proto;
>> + struct dlm_protocol_version fs_proto;
>> + guint8 domain[O2NM_MAX_NAME_LEN];
>> + guint8 node_map[BITS_TO_BYTES(O2NM_MAX_NODES)];
>> +};
>> +
>> struct dlm_assert_joined
>> {
>> guint8 node_idx;
>> @@ -1148,6 +1171,77 @@ static void msg_struct_enumerate_fields(struct 
>> dlm_msg_struct_def *def, proto_tr
>> }
>> }
>>
>> +static void dissect_dlm_query_join_request(proto_tree *tree, 
>> tvbuff_t *tvb,
>> + int offset)
>> +{
>> + proto_item *item;
>> + guint8 cc, namelen;
>> + guint8 node_bits_array[256];
>> + guint8 node_map[BITS_TO_BYTES(O2NM_MAX_NODES)];
>> + guint16 dlm_proto, fs_proto;
>> + gint len;
>> + char line[128];
>> + int i, j;
>> +
>> + proto_tree_add_item(tree, hf_dlm_node_idx, tvb, offset, 1, FALSE);
>> +
>> + /* skip follow 2 padding bytes */
>> + offset += 3;
>> + namelen = tvb_get_guint8(tvb, offset);
>> + proto_tree_add_item(tree, hf_dlm_namelen, tvb, offset, 1, FALSE);
>> +
>> + ++offset;
>> + len = tvb_reported_length_remaining(tvb, offset);
>> +
>> + /* if the left message length more than namelen + node_map length,
>> + * its most likely ocfs2-1.4 or newer message comming,
>> + * or else ocfs2-1.2 if equal to */
>> + if (len == (sizeof(struct dlm_protocol_version) * 2 +
>> + O2NM_MAX_NAME_LEN +
>> + BITS_TO_BYTES(O2NM_MAX_NODES))) {
>> + dlm_proto = tvb_get_ntohs(tvb, offset);
>> + proto_tree_add_text(tree, tvb, offset, 2,
>> + "DLM Protocol: %d.%d",
>> + ((dlm_proto >> 8) & 0xff),
>> + (dlm_proto & 0xff));
>> +
>> + offset += 2;
>> + fs_proto = tvb_get_ntohs(tvb, offset);
>> + proto_tree_add_text(tree, tvb, offset, 2,
>> + "FS Protocol: %d.%d",
>> + ((fs_proto >> 8) & 0xff),
>> + (fs_proto & 0xff));
>> +
>> + offset += 2;
>> + proto_tree_add_item(tree, hf_dlm_domain_name, tvb,
>> + offset, namelen, FALSE);
>> + } else if (len == (O2NM_MAX_NAME_LEN + BITS_TO_BYTES(O2NM_MAX_NODES)))
>> + proto_tree_add_item(tree, hf_dlm_domain_name, tvb,
>> + offset, namelen, FALSE);
>> +
>> + offset += O2NM_MAX_NAME_LEN;
>> + tvb_memcpy(tvb, node_map, offset, sizeof(node_map));
>> +
>> + memset(node_bits_array, 0, sizeof(node_bits_array));
>> + for (i = 0; i < sizeof(node_map); i++) {
>> + cc = node_map[i];
>> + for (j = 0; j < 8; j++)
>> + node_bits_array[i * 8 + j] = (((cc >> j) & 1) ?
>> + '1' : '0');
>> + }
>> +
>> + i = 0;
>> + while (i < 256) {
>> + memset(line, 0, sizeof(line));
>> + /* print node map in binary char, 64 chars for each line */
>> + for (j = 0; j < 64; )
>> + line[j++] = node_bits_array[i++];
>> +
>> + item = proto_tree_add_text(tree, tvb, offset, 10, "Node Map: ");
>> + proto_item_append_text(item, "%s", line);
>> + }
>> +}
>> +
>> static int dissect_ocfs2(tvbuff_t *tvb, packet_info *pinfo, 
>> proto_tree *tree)
>> {
>> proto_tree *subtree = NULL;
>> @@ -1240,13 +1334,17 @@ static int dissect_ocfs2(tvbuff_t *tvb, 
>> packet_info *pinfo, proto_tree *tree)
>> }
>> }
>>
>> -
>> if (magic == O2NET_MSG_MAGIC) {
>> struct dlm_msg_struct_def *def;
>> def = msg_struct_lookup_by_type(msg_type);
>> if (def)
>> msg_struct_enumerate_fields(def, subtree, tvb, 
>> O2NET_MSG_HDR_OFF_PAYLOAD);
>> }
>> +
>> + if (msg_type == DLM_QUERY_JOIN_MSG)
>> + if (magic == O2NET_MSG_MAGIC)
>> + dissect_dlm_query_join_request(subtree,
>> + tvb, O2NET_MSG_HDR_OFF_PAYLOAD);
>> }
>> out:
>> return ret;
>




More information about the Ocfs2-tools-devel mailing list