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

Sunil Mushran sunil.mushran at oracle.com
Wed Aug 5 10:28:44 PDT 2009


struct dlm_protocol_version {
        u8 pv_major;
        u8 pv_minor;
};

Print them separately.

DLM Protocol: 1.0
FS Protocol: 1.0

That's ideal. But this could also do:

DLM Protocol: 256 (1.0)
FS Protocol: 256 (1.0)


jeff.liu wrote:
> Hi Sunil,
>
> There have 2 protocol version structures contains in 
> query_join_request message for the newer version(i.e. dlm_proto and 
> fs_proto)
>
> Is it ok to print them separately in two lines like below?
>
> Dlm Proto: 256 (1:0)
> Fs Proto: 256 (1:0)
>
> or just one line as:
> Protocol Version: 256 (1:0)
>
>
>
> Thanks,
> Jeff
>
> Sunil Mushran 写道:
>> Sorry for the delay.
>>
>> The patch looks good. But it is not printing the node map and
>> the protocol versions. It would be good to have those values too.
>>
>> The protocol versions could be major.minor.
>>
>> The node maps could be printed like 00110000110000 starting with
>> node 0.
>>
>> Jeff Liu wrote:
>>> this patch add dlm_query_join_request handler in dissector, it could 
>>> deal with the message variants
>>> for both ocfs2-1.2.x and the newer.
>>>
>>> Signed-off-by: Jeff Liu <jeff.liu at oracle.com>
>>> ---
>>> epan/dissectors/packet-ocfs2.c | 69 
>>> ++++++++++++++++++++++++++++++++++------
>>> 1 files changed, 59 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/epan/dissectors/packet-ocfs2.c 
>>> b/epan/dissectors/packet-ocfs2.c
>>> index ce57c3f..264294b 100644
>>> --- a/epan/dissectors/packet-ocfs2.c
>>> +++ b/epan/dissectors/packet-ocfs2.c
>>> @@ -235,7 +235,6 @@ enum dlm_query_join_response {
>>> JOIN_OK_NO_MAP,
>>> };
>>>
>>> -
>>> /* DLM lock modes */
>>> enum {
>>> LKM_IVMODE = -1,
>>> @@ -776,13 +775,35 @@ 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;
>>> @@ -946,12 +967,6 @@ static struct dlm_msg_struct_def 
>>> dlm_struct_defs[] = {
>>> { "dead_node", &hf_dlm_dead_node, FIELD_OFFSET_AND_SIZE(struct 
>>> dlm_begin_reco,dead_node), dlm_node_idx_handler},
>>> { DLM_MSG_STRUCT_DEF_END } }
>>> },
>>> -{ "dlm_query_join_request", "DLM Query Join Request", 
>>> DLM_QUERY_JOIN_MSG, &ett_dlm_query_join, {
>>> - { "node_idx", &hf_dlm_node_idx, FIELD_OFFSET_AND_SIZE(struct 
>>> dlm_query_join_request,node_idx), dlm_node_idx_handler},
>>> - { "name_len", &hf_dlm_domain_name_len,FIELD_OFFSET_AND_SIZE(struct 
>>> dlm_query_join_request,name_len), dlm_domain_namelen_handler},
>>> - { "domain", &hf_dlm_domain_name, FIELD_OFFSET_AND_SIZE(struct 
>>> dlm_query_join_request,domain), dlm_domain_name_handler},
>>> - { DLM_MSG_STRUCT_DEF_END } }
>>> -},
>>> { "dlm_assert_joined", "DLM Assert Joined", DLM_ASSERT_JOINED_MSG, 
>>> &ett_dlm_assert_joined, {
>>> { "node_idx", &hf_dlm_node_idx, FIELD_OFFSET_AND_SIZE(struct 
>>> dlm_assert_joined,node_idx), dlm_node_idx_handler},
>>> { "name_len", &hf_dlm_domain_name_len,FIELD_OFFSET_AND_SIZE(struct 
>>> dlm_assert_joined,name_len), dlm_domain_namelen_handler},
>>> @@ -1148,6 +1163,36 @@ 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)
>>> +{
>>> + guint8 namelen;
>>> + gint len;
>>> + int msg_len;
>>> +
>>> + 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);
>>> +
>>> + len = tvb_reported_length_remaining(tvb, offset);
>>> +
>>> + ++offset;
>>> + /* if the left message length more than namelen, its most likely
>>> + * ocfs2-1.4 or newer we are dealing with, or else ocfs2-1.2 or
>>> + * mismatch */
>>> + if (len > (namelen +
>>> + sizeof(((struct dlm_query_join_request *)0L)->node_map)))
>>> + proto_tree_add_item(tree, hf_dlm_domain_name, tvb,
>>> + offset + 4, namelen, FALSE);
>>> + else if (len == (namelen +
>>> + sizeof(((struct dlm_query_join_request_129 *)0L)->node_map)))
>>> + proto_tree_add_item(tree, hf_dlm_domain_name, tvb,
>>> + offset, namelen, FALSE);
>>> +}
>>> +
>>> static int dissect_ocfs2(tvbuff_t *tvb, packet_info *pinfo, 
>>> proto_tree *tree)
>>> {
>>> proto_tree *subtree = NULL;
>>> @@ -1240,13 +1285,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