diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-01-31 16:16:48 +0100 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2014-02-26 09:08:47 +0000 |
commit | 6efd2c732a1e5203d29d50f19c32b666c1ebdc6c (patch) | |
tree | 2795246dd3677fcaf62169c14c6371f178267cb3 /epan/dissectors | |
parent | 98cc3d61dccece289a15b710b8f2e37b910d7374 (diff) |
packet-iwarp-ddp-rdmap: pass struct rdmapinfo with opcode to the subdissectors
Change-Id: I51bb8a3047bbc16d55d0c089fe869c7534d4c0b5
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-on: https://code.wireshark.org/review/355
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/Makefile.common | 1 | ||||
-rw-r--r-- | epan/dissectors/packet-iwarp-ddp-rdmap.c | 52 | ||||
-rw-r--r-- | epan/dissectors/packet-iwarp-ddp-rdmap.h | 46 |
3 files changed, 75 insertions, 24 deletions
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common index 927e8c1b3c..fc8aaa9531 100644 --- a/epan/dissectors/Makefile.common +++ b/epan/dissectors/Makefile.common @@ -1470,6 +1470,7 @@ DISSECTOR_INCLUDES = \ packet-isis-clv.h \ packet-isl.h \ packet-isup.h \ + packet-iwarp-ddp-rdmap.h \ packet-jxta.h \ packet-kerberos.h \ packet-klm.h \ diff --git a/epan/dissectors/packet-iwarp-ddp-rdmap.c b/epan/dissectors/packet-iwarp-ddp-rdmap.c index 4252229744..b028de5ec3 100644 --- a/epan/dissectors/packet-iwarp-ddp-rdmap.c +++ b/epan/dissectors/packet-iwarp-ddp-rdmap.c @@ -34,6 +34,8 @@ #include <epan/packet.h> +#include "packet-iwarp-ddp-rdmap.h" + void proto_register_iwarp_ddp_rdmap(void); void proto_reg_handoff_iwarp_ddp_rdmap(void); @@ -261,10 +263,11 @@ static const value_string ddp_errcode_untagged_names[] = { static heur_dissector_list_t rdmap_heur_subdissector_list; static void -dissect_rdmap_payload(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +dissect_rdmap_payload(tvbuff_t *tvb, packet_info *pinfo, + proto_tree *tree, struct rdmapinfo *info) { if (!dissector_try_heuristic(rdmap_heur_subdissector_list, - tvb, pinfo, tree, NULL)) { + tvb, pinfo, tree, info)) { call_dissector(data_handle, tvb, pinfo, tree); } } @@ -485,16 +488,17 @@ dissect_iwarp_ddp_rdmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) tvbuff_t *next_tvb = NULL; gboolean is_tagged_buffer_model; - guint8 ddp_ctrl_field, rdma_ctrl_field, rdma_msg_opcode; + guint8 ddp_ctrl_field, rdma_ctrl_field; + struct rdmapinfo info = { 0, }; guint32 header_end; guint32 offset = 0; ddp_ctrl_field = tvb_get_guint8(tvb, 0); rdma_ctrl_field = tvb_get_guint8(tvb, 1); - rdma_msg_opcode = rdma_ctrl_field & RDMA_OPCODE; + info.opcode = rdma_ctrl_field & RDMA_OPCODE; is_tagged_buffer_model = ddp_ctrl_field & DDP_TAGGED_FLAG; - ddp_rdma_packetlist(pinfo, ddp_ctrl_field & DDP_LAST_FLAG, rdma_msg_opcode); + ddp_rdma_packetlist(pinfo, ddp_ctrl_field & DDP_LAST_FLAG, info.opcode); if (tree) { @@ -507,8 +511,8 @@ dissect_iwarp_ddp_rdmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) header_end = DDP_UNTAGGED_HEADER_LEN; } - if (rdma_msg_opcode == RDMA_READ_REQUEST - || rdma_msg_opcode == RDMA_TERMINATE) { + if (info.opcode == RDMA_READ_REQUEST + || info.opcode == RDMA_TERMINATE) { header_end = -1; } @@ -574,16 +578,16 @@ dissect_iwarp_ddp_rdmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += RDMA_CONTROL_FIELD_LEN; /* dissection of DDP rsvdULP[8:39] with respect to RDMAP */ - if (rdma_msg_opcode == RDMA_READ_REQUEST - || rdma_msg_opcode == RDMA_SEND - || rdma_msg_opcode == RDMA_SEND_SE - || rdma_msg_opcode == RDMA_TERMINATE) { + 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 (rdma_msg_opcode == RDMA_SEND_INVALIDATE - || rdma_msg_opcode == RDMA_SEND_SE_INVALIDATE) { + 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); } @@ -609,12 +613,12 @@ dissect_iwarp_ddp_rdmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset, DDP_TO_LEN, ENC_NA); offset += DDP_TO_LEN; - if( rdma_msg_opcode == RDMA_READ_RESPONSE - || rdma_msg_opcode == RDMA_WRITE) { + 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); + dissect_rdmap_payload(next_tvb, pinfo, tree, &info); } } else { @@ -636,22 +640,22 @@ dissect_iwarp_ddp_rdmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset, DDP_MO_LEN, ENC_BIG_ENDIAN); offset += DDP_MO_LEN; - if (rdma_msg_opcode == RDMA_SEND - || rdma_msg_opcode == RDMA_SEND_INVALIDATE - || rdma_msg_opcode == RDMA_SEND_SE - || rdma_msg_opcode == RDMA_SEND_SE_INVALIDATE) { + 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); + dissect_rdmap_payload(next_tvb, pinfo, tree, &info); } } } /* do further dissection for RDMA messages RDMA Read Request & Terminate */ - if (rdma_msg_opcode == RDMA_READ_REQUEST - || rdma_msg_opcode == RDMA_TERMINATE) { - dissect_iwarp_rdmap(tvb, rdma_tree, offset, rdma_msg_opcode); + if (info.opcode == RDMA_READ_REQUEST + || info.opcode == RDMA_TERMINATE) { + dissect_iwarp_rdmap(tvb, rdma_tree, offset, info.opcode); } } diff --git a/epan/dissectors/packet-iwarp-ddp-rdmap.h b/epan/dissectors/packet-iwarp-ddp-rdmap.h new file mode 100644 index 0000000000..1db74ff12b --- /dev/null +++ b/epan/dissectors/packet-iwarp-ddp-rdmap.h @@ -0,0 +1,46 @@ +/* packet-iwarp-ddp-rdmap.c + * Routines for Direct Data Placement (DDP) and + * Remote Direct Memory Access Protocol (RDMAP) dissection + * According to IETF RFC 5041 and RFC 5040 + * Copyright 2008, Yves Geissbuehler <yves.geissbuehler@gmx.net> + * Copyright 2008, Philip Frey <frey.philip@gmail.com> + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#ifndef __PACKET_IWARP_DDP_RDMAP_H_ +#define __PACKET_IWARP_DDP_RDMAP_H_ + +/* RDMA messages */ +#define RDMA_WRITE 0x00 +#define RDMA_READ_REQUEST 0x01 +#define RDMA_READ_RESPONSE 0x02 +#define RDMA_SEND 0x03 +#define RDMA_SEND_INVALIDATE 0x04 +#define RDMA_SEND_SE 0x05 +#define RDMA_SEND_SE_INVALIDATE 0x06 +#define RDMA_TERMINATE 0x07 + +struct rdmapinfo { + guint8 opcode; +}; + +#endif /* __PACKET_IWARP_DDP_RDMAP_H_ */ |