aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2014-06-19 15:38:54 -0400
committerMichael Mann <mmann78@netscape.net>2014-06-19 22:16:41 +0000
commit8b127685519195d1e57c2859ab86190ee412844c (patch)
tree617f30ad070a0fd2e17ebc7776aaf7bb4759421d
parent88b0d0a139bf71697f38a90bfcb870c62bbaae30 (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.c263
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);
}
}