diff options
author | Michael Mann <mmann78@netscape.net> | 2014-06-19 15:38:54 -0400 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2014-06-19 22:16:41 +0000 |
commit | 8b127685519195d1e57c2859ab86190ee412844c (patch) | |
tree | 617f30ad070a0fd2e17ebc7776aaf7bb4759421d | |
parent | 88b0d0a139bf71697f38a90bfcb870c62bbaae30 (diff) |
calling subdissectors shouldn't be conditional on a tree
Change-Id: I59ad726c16d4a85dd065f4a21bdf5d86e47c82cd
Reviewed-on: https://code.wireshark.org/review/2451
Reviewed-by: Martin Kaiser <wireshark@kaiser.cx>
Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r-- | epan/dissectors/packet-iwarp-ddp-rdmap.c | 263 |
1 files changed, 130 insertions, 133 deletions
diff --git a/epan/dissectors/packet-iwarp-ddp-rdmap.c b/epan/dissectors/packet-iwarp-ddp-rdmap.c index 2cc7424b60..225c3de9df 100644 --- a/epan/dissectors/packet-iwarp-ddp-rdmap.c +++ b/epan/dissectors/packet-iwarp-ddp-rdmap.c @@ -500,155 +500,152 @@ dissect_iwarp_ddp_rdmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) ddp_rdma_packetlist(pinfo, ddp_ctrl_field & DDP_LAST_FLAG, info.opcode); - if (tree) { + offset = 0; - offset = 0; + /* determine header length */ + if (is_tagged_buffer_model) { + header_end = DDP_TAGGED_HEADER_LEN; + } else { + header_end = DDP_UNTAGGED_HEADER_LEN; + } - /* determine header length */ - if (is_tagged_buffer_model) { - header_end = DDP_TAGGED_HEADER_LEN; - } else { - header_end = DDP_UNTAGGED_HEADER_LEN; - } + if (info.opcode == RDMA_READ_REQUEST + || info.opcode == RDMA_TERMINATE) { + header_end = -1; + } - if (info.opcode == RDMA_READ_REQUEST - || info.opcode == RDMA_TERMINATE) { - header_end = -1; - } + /* DDP/RDMA protocol tree */ + ddp_rdma_item = proto_tree_add_item(tree, proto_iwarp_ddp_rdmap, + tvb, offset, header_end, ENC_NA); + ddp_rdma_tree = proto_item_add_subtree(ddp_rdma_item, + ett_iwarp_ddp_rdmap); + + /* DDP protocol header subtree */ + ddp_item = proto_tree_add_item(ddp_rdma_tree, hf_iwarp_ddp, tvb, + offset, header_end, ENC_NA); + ddp_tree = proto_item_add_subtree(ddp_item, ett_iwarp_ddp); + + /* DDP control field */ + ddp_ctrl_field_item = proto_tree_add_item(ddp_tree, + hf_iwarp_ddp_control_field, tvb, offset, + DDP_CONTROL_FIELD_LEN, ENC_NA); + ddp_ctrl_field_tree = proto_item_add_subtree(ddp_ctrl_field_item, + ett_iwarp_ddp); + + proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_t_flag, tvb, + offset, DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); + proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_l_flag, tvb, + offset, DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); + proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_rsvd, tvb, + offset, DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); + proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_dv, tvb, offset, + DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); + offset += DDP_CONTROL_FIELD_LEN; + + + /* DDP header field RsvdULP */ + if (!is_tagged_buffer_model) { + proto_tree_add_item(ddp_tree, hf_iwarp_ddp_rsvdulp, tvb, + offset, DDP_UNTAGGED_RSVDULP_LEN, ENC_NA); + } - /* DDP/RDMA protocol tree */ - ddp_rdma_item = proto_tree_add_item(tree, proto_iwarp_ddp_rdmap, - tvb, offset, header_end, ENC_NA); - ddp_rdma_tree = proto_item_add_subtree(ddp_rdma_item, - ett_iwarp_ddp_rdmap); + /* RDMA protocol header subtree */ + if (is_tagged_buffer_model) { + header_end = RDMA_CONTROL_FIELD_LEN; + } else { + header_end = RDMA_CONTROL_FIELD_LEN + RDMA_RESERVED_FIELD_LEN; + } - /* DDP protocol header subtree */ - ddp_item = proto_tree_add_item(ddp_rdma_tree, hf_iwarp_ddp, tvb, + rdma_item = proto_tree_add_item(ddp_rdma_tree, hf_iwarp_rdma, tvb, offset, header_end, ENC_NA); - ddp_tree = proto_item_add_subtree(ddp_item, ett_iwarp_ddp); + rdma_tree = proto_item_add_subtree(rdma_item, ett_iwarp_rdma); + + /* RDMA Control Field */ + rdma_ctrl_field_item = proto_tree_add_item(rdma_tree, + hf_iwarp_rdma_control_field, tvb, offset, + RDMA_CONTROL_FIELD_LEN, ENC_NA); + rdma_ctrl_field_tree = proto_item_add_subtree(rdma_ctrl_field_item, + ett_iwarp_rdma); + + proto_tree_add_item(rdma_ctrl_field_tree, hf_iwarp_rdma_version, tvb, + offset, RDMA_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); + proto_tree_add_item(rdma_ctrl_field_tree, hf_iwarp_rdma_rsvd, tvb, + offset, RDMA_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); + proto_tree_add_item(rdma_ctrl_field_tree, hf_iwarp_rdma_opcode, tvb, + offset, RDMA_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); + offset += RDMA_CONTROL_FIELD_LEN; + + /* dissection of DDP rsvdULP[8:39] with respect to RDMAP */ + if (info.opcode == RDMA_READ_REQUEST + || info.opcode == RDMA_SEND + || info.opcode == RDMA_SEND_SE + || info.opcode == RDMA_TERMINATE) { + proto_tree_add_item(rdma_tree, hf_iwarp_rdma_reserved, + tvb, offset, RDMA_RESERVED_FIELD_LEN, ENC_NA); + } + + if (info.opcode == RDMA_SEND_INVALIDATE + || info.opcode == RDMA_SEND_SE_INVALIDATE) { + proto_tree_add_item(rdma_tree, hf_iwarp_rdma_inval_stag, + tvb, offset, RDMA_INVAL_STAG_LEN, ENC_BIG_ENDIAN); + } - /* DDP control field */ - ddp_ctrl_field_item = proto_tree_add_item(ddp_tree, - hf_iwarp_ddp_control_field, tvb, offset, - DDP_CONTROL_FIELD_LEN, ENC_NA); - ddp_ctrl_field_tree = proto_item_add_subtree(ddp_ctrl_field_item, + if (!is_tagged_buffer_model) { + offset += RDMA_RESERVED_FIELD_LEN; + } + + /* DDP Buffer Model dissection */ + if (is_tagged_buffer_model) { + + /* Tagged Buffer Model Case */ + ddp_buffer_model_item = proto_tree_add_item(ddp_tree, + hf_iwarp_ddp_tagged_header, tvb, offset, + DDP_BUFFER_MODEL_LEN, ENC_NA); + ddp_buffer_model_tree = proto_item_add_subtree(ddp_buffer_model_item, ett_iwarp_ddp); - proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_t_flag, tvb, - offset, DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_l_flag, tvb, - offset, DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_rsvd, tvb, - offset, DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(ddp_ctrl_field_tree, hf_iwarp_ddp_dv, tvb, offset, - DDP_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); - offset += DDP_CONTROL_FIELD_LEN; - - - /* DDP header field RsvdULP */ - if (!is_tagged_buffer_model) { - proto_tree_add_item(ddp_tree, hf_iwarp_ddp_rsvdulp, tvb, - offset, DDP_UNTAGGED_RSVDULP_LEN, ENC_NA); - } + proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_stag, tvb, + offset, DDP_STAG_LEN, ENC_NA); + offset += DDP_STAG_LEN; + proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_to, tvb, + offset, DDP_TO_LEN, ENC_NA); + offset += DDP_TO_LEN; - /* RDMA protocol header subtree */ - if (is_tagged_buffer_model) { - header_end = RDMA_CONTROL_FIELD_LEN; - } else { - header_end = RDMA_CONTROL_FIELD_LEN + RDMA_RESERVED_FIELD_LEN; - } + if( info.opcode == RDMA_READ_RESPONSE + || info.opcode == RDMA_WRITE) { - rdma_item = proto_tree_add_item(ddp_rdma_tree, hf_iwarp_rdma, tvb, - offset, header_end, ENC_NA); - rdma_tree = proto_item_add_subtree(rdma_item, ett_iwarp_rdma); - - /* RDMA Control Field */ - rdma_ctrl_field_item = proto_tree_add_item(rdma_tree, - hf_iwarp_rdma_control_field, tvb, offset, - RDMA_CONTROL_FIELD_LEN, ENC_NA); - rdma_ctrl_field_tree = proto_item_add_subtree(rdma_ctrl_field_item, - ett_iwarp_rdma); - - proto_tree_add_item(rdma_ctrl_field_tree, hf_iwarp_rdma_version, tvb, - offset, RDMA_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(rdma_ctrl_field_tree, hf_iwarp_rdma_rsvd, tvb, - offset, RDMA_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(rdma_ctrl_field_tree, hf_iwarp_rdma_opcode, tvb, - offset, RDMA_CONTROL_FIELD_LEN, ENC_BIG_ENDIAN); - offset += RDMA_CONTROL_FIELD_LEN; - - /* dissection of DDP rsvdULP[8:39] with respect to RDMAP */ - if (info.opcode == RDMA_READ_REQUEST - || info.opcode == RDMA_SEND - || info.opcode == RDMA_SEND_SE - || info.opcode == RDMA_TERMINATE) { - proto_tree_add_item(rdma_tree, hf_iwarp_rdma_reserved, - tvb, offset, RDMA_RESERVED_FIELD_LEN, ENC_NA); + /* display the payload */ + next_tvb = tvb_new_subset_remaining(tvb, DDP_TAGGED_HEADER_LEN); + dissect_rdmap_payload(next_tvb, pinfo, tree, &info); } - if (info.opcode == RDMA_SEND_INVALIDATE - || info.opcode == RDMA_SEND_SE_INVALIDATE) { - proto_tree_add_item(rdma_tree, hf_iwarp_rdma_inval_stag, - tvb, offset, RDMA_INVAL_STAG_LEN, ENC_BIG_ENDIAN); - } + } else { - if (!is_tagged_buffer_model) { - offset += RDMA_RESERVED_FIELD_LEN; - } + /* Untagged Buffer Model Case */ + ddp_buffer_model_item = proto_tree_add_item(ddp_tree, + hf_iwarp_ddp_untagged_header, tvb, offset, + DDP_BUFFER_MODEL_LEN, ENC_NA); + ddp_buffer_model_tree = proto_item_add_subtree(ddp_buffer_model_item, + ett_iwarp_ddp); - /* DDP Buffer Model dissection */ - if (is_tagged_buffer_model) { - - /* Tagged Buffer Model Case */ - ddp_buffer_model_item = proto_tree_add_item(ddp_tree, - hf_iwarp_ddp_tagged_header, tvb, offset, - DDP_BUFFER_MODEL_LEN, ENC_NA); - ddp_buffer_model_tree = proto_item_add_subtree(ddp_buffer_model_item, - ett_iwarp_ddp); - - proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_stag, tvb, - offset, DDP_STAG_LEN, ENC_NA); - offset += DDP_STAG_LEN; - proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_to, tvb, - offset, DDP_TO_LEN, ENC_NA); - offset += DDP_TO_LEN; - - if( info.opcode == RDMA_READ_RESPONSE - || info.opcode == RDMA_WRITE) { - - /* display the payload */ - next_tvb = tvb_new_subset_remaining(tvb, DDP_TAGGED_HEADER_LEN); - dissect_rdmap_payload(next_tvb, pinfo, tree, &info); - } + proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_qn, tvb, + offset, DDP_QN_LEN, ENC_BIG_ENDIAN); + offset += DDP_QN_LEN; + proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_msn, tvb, + offset, DDP_MSN_LEN, ENC_BIG_ENDIAN); + offset += DDP_MSN_LEN; + proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_mo, tvb, + offset, DDP_MO_LEN, ENC_BIG_ENDIAN); + offset += DDP_MO_LEN; + + if (info.opcode == RDMA_SEND + || info.opcode == RDMA_SEND_INVALIDATE + || info.opcode == RDMA_SEND_SE + || info.opcode == RDMA_SEND_SE_INVALIDATE) { - } else { - - /* Untagged Buffer Model Case */ - ddp_buffer_model_item = proto_tree_add_item(ddp_tree, - hf_iwarp_ddp_untagged_header, tvb, offset, - DDP_BUFFER_MODEL_LEN, ENC_NA); - ddp_buffer_model_tree = proto_item_add_subtree(ddp_buffer_model_item, - ett_iwarp_ddp); - - proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_qn, tvb, - offset, DDP_QN_LEN, ENC_BIG_ENDIAN); - offset += DDP_QN_LEN; - proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_msn, tvb, - offset, DDP_MSN_LEN, ENC_BIG_ENDIAN); - offset += DDP_MSN_LEN; - proto_tree_add_item(ddp_buffer_model_tree, hf_iwarp_ddp_mo, tvb, - offset, DDP_MO_LEN, ENC_BIG_ENDIAN); - offset += DDP_MO_LEN; - - if (info.opcode == RDMA_SEND - || info.opcode == RDMA_SEND_INVALIDATE - || info.opcode == RDMA_SEND_SE - || info.opcode == RDMA_SEND_SE_INVALIDATE) { - - /* display the payload */ - next_tvb = tvb_new_subset_remaining(tvb, DDP_UNTAGGED_HEADER_LEN); - dissect_rdmap_payload(next_tvb, pinfo, tree, &info); - } + /* display the payload */ + next_tvb = tvb_new_subset_remaining(tvb, DDP_UNTAGGED_HEADER_LEN); + dissect_rdmap_payload(next_tvb, pinfo, tree, &info); } } |