Whamcloud - gitweb
LU-6353 contrib: Remove wireshark plugin
[fs/lustre-release.git] / lustre / contrib / wireshark / packet-lnet.c
diff --git a/lustre/contrib/wireshark/packet-lnet.c b/lustre/contrib/wireshark/packet-lnet.c
deleted file mode 100644 (file)
index 1462618..0000000
+++ /dev/null
@@ -1,1067 +0,0 @@
-/* packet-lnet.c
- * Lnet packet dissection
- * Author: Laurent George <george@ocre.cea.fr>
- * based on packet-agentx.c and packet-afs.c
- * 20080903
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1999 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Copyright (c) 2012, 2017, Intel Corporation.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <time.h>
-#include <string.h>
-#include <glib.h>
-
-#include <epan/packet.h>
-#include <epan/conversation.h>
-#include <epan/prefs.h>
-#include <epan/emem.h>
-#include <epan/to_str.h>
-#include <epan/dissectors/packet-tcp.h>
-#include <epan/dissectors/packet-infiniband.h>
-
-#include "wireshark-compat.h"
-
-/* This value inidcates whether we are processing an Infiniband packet, or
-   TCP.  It gets set to the extra bytes the IB header requires if IB,
-   or zero if TCP. */
-static guint ib_lnd_extra_bytes;
-
-/* How much data has at least to be available to be able to determine the
- * length of the lnet message.
- * Note: This is only used for TCP-based LNet packets.  Not used for Infiniband.
- */
-#define LNET_HEADER_LEN 52
-#define LNET_NID_DEST_OFFSET (24 + ib_lnd_extra_bytes)
-#define LNET_NID_SRC_OFFSET (32 + ib_lnd_extra_bytes)
-#define LNET_MSG_TYPE_OFFSET (48 + ib_lnd_extra_bytes)
-#define LNET_PTL_INDEX_OFFSET_PUT (88 + ib_lnd_extra_bytes)
-
-#define EXTRA_IB_HEADER_SIZE 24
-
-/* TCP ports used for LNet. */
-static guint global_lnet_tcp_port = 988;
-static guint lnet_tcp_port = 988;
-
-void proto_reg_handoff_lnet(void);
-
-/* Define the lnet proto */
-static int proto_lnet = -1;
-
-static int hf_lnet_src_nid = -1 ;
-static int hf_lnet_src_nid_addr = -1 ;
-static int hf_lnet_src_nid_lnet_type = -1;
-static int hf_lnet_src_nid_interface = -1  ;
-
-static int hf_lnet_ksm_type = -1;
-static int hf_lnet_ksm_csum = -1;
-static int hf_lnet_ksm_zc_req_cookie = -1;
-static int hf_lnet_ksm_zc_ack_cookie = -1;
-
-static int hf_lnet_ib_magic = -1;
-static int hf_lnet_ib_version = -1;
-static int hf_lnet_ib_type = -1;
-static int hf_lnet_ib_credits = -1;
-static int hf_lnet_ib_nob = -1;
-static int hf_lnet_ib_csum = -1;
-static int hf_lnet_ib_srcstamp = -1;
-static int hf_lnet_ib_dststamp = -1;
-
-static int hf_lnet_dest_nid = -1 ;
-static int hf_lnet_dest_nid_addr = -1 ;
-static int hf_lnet_dest_nid_lnet_type = -1 ; 
-static int hf_lnet_dest_nid_interface = -1 ;
-
-static int hf_lnet_dest_pid = -1 ; 
-static int hf_lnet_src_pid = -1 ;
-
-static int hf_lnet_msg_type = -1 ;
-static int hf_lnet_payload_length = -1;
-static int hf_lnet_payload = -1 ;
-static int hf_lnet_msg_header = -1 ; 
-static int hf_lnet_msg_filler = -1 ;
-
-static int hf_dst_wmd = -1 ;   
-static int hf_dst_wmd_interface = -1 ;   
-static int hf_dst_wmd_object = -1 ;   
-
-static int hf_match_bits = -1 ; 
-static int hf_mlength = -1 ; 
-
-static int hf_hdr_data = -1 ;
-static int hf_ptl_index = -1 ;
-static int hf_offset = -1 ;
-static gint ett_lnet = -1;
-
-static int hf_src_offset = -1;
-static int hf_sink_length = -1;
-
-static int hf_hello_incarnation = -1 ;
-static int hf_hello_type = -1 ; 
-
-static gint ett_lnet_dest_nid= -1;
-static gint ett_lnet_src_nid= -1;
-
-tvbuff_t *next_tvb;
-
-/* Breakdown of a NID. */
-typedef struct t_nid {
-       guint32 addr;
-       guint16 interface;
-       guint16 proto;
-} t_nid ;
-
-/*static heur_dissector_list_t heur_subdissector_list; */
-static dissector_table_t subdissector_table;
-
-static const value_string lndnames[] = {
-       { 1, "QSWLND   "},
-       { 2, "SOCKLND  "},
-       { 3, "GMLND    "},
-       { 4, "PTLLND   "},
-       { 5, "O2IBLND  "},
-       { 6, "CIBLND   "},
-       { 7, "OPENIBLND"}, 
-       { 8, "IIBLND   "},
-       { 9, "LOLND    "},
-       { 10,"RALND    "},
-       { 11,"VIBLND   "},
-       { 12,"MXLND    "} 
-};
-
-enum MSG_type{
-       LNET_MSG_ACK = 0,
-       LNET_MSG_PUT,
-       LNET_MSG_GET,
-       LNET_MSG_REPLY,
-       LNET_MSG_HELLO,
-} ;
-
-static const value_string lnet_msg_type_t[] = {
-       { LNET_MSG_ACK  , "ACK"},  
-       { LNET_MSG_PUT  , "PUT"},  
-       { LNET_MSG_GET  , "GET"},  
-       { LNET_MSG_REPLY, "REPLY"},  
-       { LNET_MSG_HELLO, "HELLO"} 
-};
-
-/* Port Index numbers.  Defined in lustre/include/lustre/lustre_idl.h */
-static const value_string portal_indices[] = {
-       { 0 , "LNET_RESERVED_PORTAL"},
-       { 1 , "CONNMGR_REQUEST_PORTAL"},
-       { 2 , "CONNMGR_REPLY_PORTAL"},
-       { 3 , "OSC_REQUEST_PORTAL(obsolete)"},
-       { 4 , "OSC_REPLY_PORTAL"},
-       { 5 , "OSC_BULK_PORTAL(obsolete)"},
-       { 6 , "OST_IO_PORTAL"},
-       { 7 , "OST_CREATE_PORTAL"},
-       { 8 , "OST_BULK_PORTAL"},
-       { 9 , "MDC_REQUEST_PORTAL(obsolete)"},
-       { 10 , "MDC_REPLY_PORTAL"},
-       { 11 , "MDC_BULK_PORTAL(obsolete)"},
-       { 12 , "MDS_REQUEST_PORTAL"},
-       { 13 , "MDS_REPLY_PORTAL(obsolete)"},
-       { 14 , "MDS_BULK_PORTAL"},
-       { 15 , "LDLM_CB_REQUEST_PORTAL"},
-       { 16 , "LDLM_CB_REPLY_PORTAL"},
-       { 17 , "LDLM_CANCEL_REQUEST_PORTAL"},
-       { 18 , "LDLM_CANCEL_REPLY_PORTAL"},
-       { 19 , "PTLBD_REQUEST_PORTAL(obsolete)"},
-       { 20 , "PTLBD_REPLY_PORTAL(obsolete)"},
-       { 21 , "PTLBD_BULK_PORTAL(obsolete)"},
-       { 22 , "MDS_SETATTR_PORTAL"},
-       { 23 , "MDS_READPAGE_PORTAL"},
-       { 24 , "MDS_MDS_PORTAL"},
-       { 25 , "MGC_REPLY_PORTAL"},
-       { 26 , "MGS_REQUEST_PORTAL"},
-       { 27 , "MGS_REPLY_PORTAL"},
-       { 28 , "OST_REQUEST_PORTAL"},
-       { 29 , "FLD_REQUEST_PORTAL"},
-       { 30 , "SEQ_METADATA_PORTAL"},
-       { 31 , "SEQ_DATA_PORTAL"},
-       { 32 , "SEQ_CONTROLLER_PORTAL"},
-       { 33 , "MGS_BULK_PORTAL"},
-       { 50 , "SRPC_REQUEST_PORTAL"},
-       { 51 , "SRPC_FRAMEWORK_REQUEST_PORTAL"},
-       { 52 , "SRPC_RDMA_PORTAL"}
-};
-
-/* SOCKLND constants. */
-#define KSOCK_MSG_NOOP          0xc0            /* ksm_u empty */ 
-#define KSOCK_MSG_LNET          0xc1            /* lnet msg */
-
-static const value_string ksm_type_t[] = {
-       {0xc0, "KSOCK_MSG_NOOP"},/* ksm_u empty */ 
-       {0xc1, "KSOCK_MSG_LNET"} /* lnet msg */
-};
-
-/* O2IBLND constants. */
-#define LNET_PROTO_IB_MAGIC    0x0be91b91
-
-static const value_string ib_version_t[] = {
-       {0x11, "1"},
-       {0x12, "2"}
-};
-
-#define IBLND_MSG_CONNREQ      0xc0    /* connection request */
-#define IBLND_MSG_CONNACK      0xc1    /* connection acknowledge */
-#define IBLND_MSG_NOOP         0xd0    /* nothing (just credits) */
-#define IBLND_MSG_IMMEDIATE    0xd1    /* immediate */
-#define IBLND_MSG_PUT_REQ      0xd2    /* putreq (src->sink) */
-#define IBLND_MSG_PUT_NAK      0xd3    /* completion (sink->src) */
-#define IBLND_MSG_PUT_ACK      0xd4    /* putack (sink->src) */
-#define IBLND_MSG_PUT_DONE     0xd5    /* completion (src->sink) */
-#define IBLND_MSG_GET_REQ      0xd6    /* getreq (sink->src) */
-#define IBLND_MSG_GET_DONE     0xd7    /* completion (src->sink: all OK) */
-
-static const value_string ib_type_t[] = {
-       {0xc0, "IBLND_MSG_CONNREQ"},
-       {0xc1, "IBLND_MSG_CONNACK"},
-       {0xd0, "IBLND_MSG_NOOP"},
-       {0xd1, "IBLND_MSG_IMMEDIATE"},
-       {0xd2, "IBLND_MSG_PUT_REQ"},
-       {0xd3, "IBLND_MSG_PUT_NAK"},
-       {0xd4, "IBLND_MSG_PUT_ACK"},
-       {0xd5, "IBLND_MSG_PUT_DONE"},
-       {0xd6, "IBLND_MSG_GET_REQ"},
-       {0xd7, "IBLND_MSG_GET_DONE"}
-};
-
-static gboolean little_endian = TRUE;
-
-#ifndef ENABLE_STATIC
-const gchar version[] = VERSION;
-
-/* Start the functions we need for the plugin stuff */
-
-void
-plugin_register(void)
-{
-       extern void proto_register_lnet(void);
-
-       proto_register_lnet();
-}
-
-void
-plugin_reg_handoff(void)
-{
-       extern void proto_reg_handoff_lnet(void);
-
-       proto_reg_handoff_lnet();
-}
-#endif
-
-static t_nid
-get_nid(tvbuff_t *tvb, gint offset)
-{
-       t_nid nid ;
-
-       nid.addr = g_htonl(tvb_get_ipv4(tvb, offset));
-       nid.interface = tvb_get_letohs(tvb, offset + 4);
-       nid.proto = tvb_get_letohs(tvb, offset + 6);
-       return nid ;
-}
-
-static int dissect_csum(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       guint32 csum;
-       csum = tvb_get_letohl(tvb, offset);
-       if (!csum)
-               proto_tree_add_text(tree, tvb, offset, 4, "Checksum Disabled");
-       else {
-               if (ib_lnd_extra_bytes)
-                       proto_tree_add_item(tree, hf_lnet_ib_csum, tvb, offset,
-                                           4, little_endian);
-               else
-                       proto_tree_add_item(tree, hf_lnet_ksm_csum, tvb, offset,
-                                           4, little_endian);
-       }
-
-       return offset + 4;
-}
-
-
-static int dissect_req_cookie(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       guint32 req;
-       req= tvb_get_letoh64(tvb, offset);
-       if (!req)
-               proto_tree_add_text(tree, tvb, offset, 8, "Ack not required");
-       else
-               proto_tree_add_item(tree, hf_lnet_ksm_zc_req_cookie, tvb, offset, 8, little_endian);
-       return offset + 8;
-}
-
-static int dissect_ack_cookie(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       guint32 ack;
-       ack= tvb_get_letoh64(tvb, offset);
-       if (!ack)
-               proto_tree_add_text(tree, tvb, offset, 8, "Not ack");
-       else
-               proto_tree_add_item(tree, hf_lnet_ksm_zc_ack_cookie, tvb, offset, 8, little_endian);
-       return offset + 8;
-}
-
-#ifdef WIRESHARK_COMPAT
-static void
-dissect_ksock_msg_noop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-#else
-static int
-dissect_ksock_msg_noop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                      void *ignored)
-#endif
-{
-       guint32 offset;
-       offset=0;
-       proto_tree_add_item(tree, hf_lnet_ksm_type, tvb, offset, 4, TRUE);offset+=4;
-       offset=dissect_csum(tvb,tree,offset);
-       offset=dissect_req_cookie(tvb, tree, offset);
-       offset=dissect_ack_cookie(tvb,tree,offset);
-#ifndef WIRESHARK_COMPAT
-       return offset;
-#endif
-}
-
-
-static int dissect_ksock_msg(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       proto_tree_add_item(tree, hf_lnet_ksm_type, tvb, offset, 4, TRUE);offset+=4;
-       offset=dissect_csum(tvb,tree,offset);
-       offset=dissect_req_cookie(tvb, tree, offset);
-       offset=dissect_ack_cookie(tvb,tree,offset);
-       return offset;
-}
-
-static int
-dissect_ib_msg(tvbuff_t *tvb, proto_tree *tree, int offset)
-{
-       /* typedef struct
-        * {
-        *      __u32             ibm_magic;            * I'm an ibnal message *
-        *      __u16             ibm_version;          * this is my version *
-
-        *      __u8              ibm_type;             * msg type *
-        *      __u8              ibm_credits;          * returned credits *
-        *      __u32             ibm_nob;              * # bytes in message *
-        *      __u32             ibm_cksum;            * checksum (0 == no
-        *                                                checksum) *
-        *      __u64             ibm_srcnid;           * sender's NID *
-        *      __u64             ibm_srcstamp;         * sender's incarnation *
-        *      __u64             ibm_dstnid;           * destination's NID *
-        *      __u64             ibm_dststamp;         * destination's
-        *                                                incarnation *
-
-        *      union {
-        *              kib_connparams_t      connparams;
-        *              kib_immediate_msg_t   immediate;
-        *              kib_putreq_msg_t      putreq;
-        *              kib_putack_msg_t      putack;
-        *              kib_get_msg_t         get;
-        *              kib_completion_msg_t  completion;
-        *      } WIRE_ATTR ibm_u;
-        *} WIRE_ATTR kib_msg_t;   */
-
-       t_nid src_nid;
-       t_nid dst_nid;
-       guint8 msg_type;
-
-       proto_tree_add_item(tree, hf_lnet_ib_magic, tvb, offset, 4,
-                           little_endian);
-       offset += 4;
-       proto_tree_add_item(tree, hf_lnet_ib_version, tvb, offset, 2,
-                           little_endian);
-       offset += 2;
-       msg_type = tvb_get_guint8(tvb, offset);
-       proto_tree_add_item(tree, hf_lnet_ib_type, tvb, offset, 1,
-                           little_endian);
-       offset += 1;
-       proto_tree_add_item(tree, hf_lnet_ib_credits, tvb, offset, 1,
-                           little_endian);
-       offset += 1;
-       proto_tree_add_item(tree, hf_lnet_ib_nob, tvb, offset, 4,
-                           little_endian);
-       offset += 4;
-       offset = dissect_csum(tvb, tree, offset);
-
-       src_nid = get_nid(tvb, offset);
-       proto_tree_add_text(tree, tvb, offset, 8, "src_nid = %s@tcp%d",
-                           ip_to_str((guint8 *) &src_nid.addr),
-                           src_nid.interface);
-       offset += 8;
-       proto_tree_add_item(tree, hf_lnet_ib_srcstamp, tvb, offset, 8,
-                           little_endian);
-       offset += 8;
-
-       dst_nid = get_nid(tvb, offset);
-       proto_tree_add_text(tree, tvb, offset, 8, "dst_nid = %s@tcp%d",
-                           ip_to_str((guint8 *) &dst_nid.addr),
-                           dst_nid.interface);
-       offset += 8;
-       proto_tree_add_item(tree, hf_lnet_ib_dststamp, tvb,offset, 8,
-                           little_endian);
-       offset += 8;
-
-       /* LNet payloads only exist when the LND msg type is IMMEDIATE.
-          Return a zero offset for all other types. */
-       return (msg_type == IBLND_MSG_IMMEDIATE) ? offset : 0;
-}
-
-static int dissect_dest_nid(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       proto_tree_add_item(tree, hf_lnet_dest_nid_addr, tvb, offset, 4, TRUE);offset+=4;
-       proto_tree_add_item(tree, hf_lnet_dest_nid_interface, tvb, offset, 2, TRUE);offset+=2;
-       proto_tree_add_item(tree, hf_lnet_dest_nid_lnet_type, tvb, offset, 2, TRUE);offset+=2;
-       return offset;
-}
-
-
-static int dissect_src_nid(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       proto_tree_add_item(tree, hf_lnet_src_nid_addr, tvb, offset, 4, TRUE);offset+=4;
-       proto_tree_add_item(tree, hf_lnet_src_nid_interface, tvb, offset, 2, TRUE);offset+=2;
-       proto_tree_add_item(tree, hf_lnet_src_nid_lnet_type, tvb, offset, 2, TRUE);offset+=2;
-       return offset;
-}
-
-static int dissect_lnet_put(tvbuff_t * tvb, proto_tree *tree, int offset, packet_info *pinfo _U_)
-{
-       /* typedef struct lnet_put {
-                lnet_handle_wire_t  ack_wmd;
-                __u64               match_bits;
-                __u64               hdr_data;
-                __u32               ptl_index;
-                __u32               offset;
-                } WIRE_ATTR lnet_put_t; */
-
-       proto_tree_add_item(tree,hf_dst_wmd_interface,tvb,offset,8,little_endian); offset+=8;
-       proto_tree_add_item(tree,hf_dst_wmd_object,tvb,offset,8,little_endian);offset+=8;
-
-       proto_tree_add_item(tree,hf_match_bits,tvb,offset,8,little_endian);offset+=8;
-       proto_tree_add_item(tree,hf_hdr_data,tvb,offset,8,little_endian);offset+=8;
-       col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
-                          val_to_str(tvb_get_letohl(tvb, offset),
-                                     portal_indices,
-                                     "Unknown")); /* add some nice value  */
-       proto_item_append_text(tree, ", %s" , val_to_str(tvb_get_letohl(tvb,
-                                                                       offset),
-                                                        portal_indices,
-                                                        "Unknown"));
-                                                        /* print ptl_index */
-       proto_tree_add_item(tree,hf_ptl_index,tvb,offset,4,little_endian);offset+=4;
-       proto_tree_add_item(tree,hf_offset,tvb,offset,4,little_endian);offset+=4;
-       return offset ; 
-}
-
-static int dissect_lnet_get(tvbuff_t * tvb, proto_tree *tree, int offset, packet_info *pinfo _U_)
-{
-       /* typedef struct lnet_get {
-          lnet_handle_wire_t  return_wmd;
-          __u64               match_bits;
-          __u32               ptl_index;
-          __u32               src_offset;
-          __u32               sink_length;
-          } WIRE_ATTR lnet_get_t;
-       */
-
-       proto_tree_add_item(tree, hf_dst_wmd_interface,
-                           tvb, offset, 8, little_endian);
-       offset += 8;
-       proto_tree_add_item(tree, hf_dst_wmd_object, tvb, offset, 8,
-                           little_endian);
-       offset += 8;
-       proto_tree_add_item(tree, hf_match_bits, tvb, offset, 8, little_endian);
-       offset += 8;
-       col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
-                          val_to_str(tvb_get_letohl(tvb, offset),
-                                     portal_indices, "Unknown"));
-       proto_item_append_text(tree, ", %s",
-                              val_to_str(tvb_get_letohl(tvb, offset),
-                                         portal_indices, "Unknown"));
-       proto_tree_add_item(tree, hf_ptl_index, tvb, offset, 4, little_endian);
-       offset += 4;
-       proto_tree_add_item(tree, hf_src_offset, tvb, offset, 4, little_endian);
-       offset += 4;
-       proto_tree_add_item(tree, hf_sink_length, tvb, offset, 4,
-                           little_endian);
-       offset += 4;
-       return offset;
-}
-
-static int dissect_lnet_reply(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       /* typedef struct lnet_reply {
-                lnet_handle_wire_t  dst_wmd;
-                } WIRE_ATTR lnet_reply_t; */
-
-       proto_tree_add_item(tree,hf_dst_wmd_interface,tvb,offset,8,little_endian);offset+=8; 
-       proto_tree_add_item(tree,hf_dst_wmd_object,tvb,offset,8,little_endian);offset+=8;
-
-       return offset;
-}
-
-
-static int dissect_lnet_hello(tvbuff_t * tvb, proto_tree *tree, int offset)
-{
-       /* typedef struct lnet_hello {
-                __u64              incarnation;
-                __u32              type;
-                } WIRE_ATTR lnet_hello_t; */
-
-       proto_tree_add_item(tree,hf_hello_incarnation,tvb,offset,8,little_endian); offset+=8;
-       proto_tree_add_item(tree,hf_hello_type,tvb,offset,4,little_endian); offset+=4;
-       return offset; 
-}
-
-static int dissect_lnet_ack(tvbuff_t * tvb, proto_tree *tree, int offset, packet_info *pinfo _U_)
-{
-       /* typedef struct lnet_ack {
-                lnet_handle_wire_t  dst_wmd;
-                __u64               match_bits;
-                __u32               mlength;
-                } WIRE_ATTR lnet_ack_t; */
-
-       proto_tree_add_item(tree,hf_dst_wmd_interface,tvb,offset,8,TRUE); offset+=8;
-       proto_tree_add_item(tree,hf_dst_wmd_object,tvb,offset,8,TRUE);offset+=8;
-       proto_tree_add_item(tree,hf_match_bits,tvb,offset,8, little_endian);offset+=8;
-       proto_tree_add_item(tree,hf_mlength, tvb,offset,4, little_endian); offset+=4;
-       return offset ; 
-} 
-
-#ifdef WIRESHARK_COMPAT
-static void dissect_lnet_message(tvbuff_t *, packet_info *, proto_tree *);
-#else
-static int dissect_lnet_message(tvbuff_t *, packet_info *, proto_tree *, void*);
-#endif
-
-/* The next two length getting routines are only used for KSOCK LNK messages. */
-static guint 
-get_lnet_message_len(packet_info  __attribute__((__unused__))*pinfo, tvbuff_t *tvb, int offset) 
-{ 
-       guint32 plen;
-
-       /* Get the payload length */
-       plen = tvb_get_letohl(tvb, offset + 28 + 24 + ib_lnd_extra_bytes);
-                                                 /* 24 = ksm header,
-                                                    28 = the rest of the
-                                                         headers */
-
-       /* That length doesn't include the header; add that in. */
-       return plen + 72 + 24 + ib_lnd_extra_bytes; /*  +24 == ksock msg
-                                                       header.. :D */
-
-}
-
-static guint
-get_noop_message_len(packet_info  __attribute__((__unused__))*pinfo, tvbuff_t *tvb, int offset)
-{
-       return 24;
-}
-
-static void 
-dissect_lnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)  
-{
-       /* TODO : correct this, now we do a difference between packet with
-          NOOP and others ..  but I don't find how to use pdu_dissect with
-          a variable length<=LNET_HEADER_LEN */
-       ib_lnd_extra_bytes = 0;
-       switch (tvb_get_letohl(tvb, 0)) {
-       case KSOCK_MSG_NOOP:
-#ifdef WIRESHARK_COMPAT
-               tcp_dissect_pdus(tvb, pinfo, tree, TRUE, 0,
-                                get_noop_message_len,
-                                dissect_ksock_msg_noop);
-#else
-               tcp_dissect_pdus(tvb, pinfo, tree, TRUE, 0,
-                                get_noop_message_len,
-                                dissect_ksock_msg_noop, NULL);
-#endif
-               break;
-       case KSOCK_MSG_LNET:
-#ifdef WIRESHARK_COMPAT
-               tcp_dissect_pdus(tvb, pinfo, tree, TRUE, LNET_HEADER_LEN,
-                                get_lnet_message_len,
-                                dissect_lnet_message);
-#else
-               tcp_dissect_pdus(tvb, pinfo, tree, TRUE, LNET_HEADER_LEN,
-                                get_lnet_message_len,
-                                dissect_lnet_message, NULL);
-#endif
-               break;
-       }
-}
-
-static int
-#ifdef WIRESHARK_COMPAT
-dissect_ib_lnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-#else
-dissect_ib_lnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
-#endif
-{
-       /* We can tell if this is an LNet payload by looking at the first
-        * 32-bit word for our magic number. */
-       if (tvb_get_letohl(tvb, 0) != LNET_PROTO_IB_MAGIC) {
-               /* Not an LNet payload. */
-               return 0;
-       }
-
-       ib_lnd_extra_bytes = EXTRA_IB_HEADER_SIZE;
-#ifdef WIRESHARK_COMPAT
-       tcp_dissect_pdus(tvb, pinfo, tree, TRUE, LNET_HEADER_LEN,
-                        get_lnet_message_len, dissect_lnet_message);
-#else
-       tcp_dissect_pdus(tvb, pinfo, tree, TRUE, LNET_HEADER_LEN,
-                        get_lnet_message_len, dissect_lnet_message, NULL);
-#endif
-       return tvb_length(tvb);
-}
-
-/*----------------------------------------------------------- */
-/* For the conversation */
-
-typedef struct {
-       guint64 match_bits;
-} my_entry_t;
-
-
-typedef struct lnet_request_key {
-       guint64 match_bits ;
-       guint32 conversation;
-} lnet_request_key_t;
-
-typedef struct lnet_request_val {
-       guint64 match_bits;
-       guint32 packet_num_parent;
-} lnet_request_val_t;
-
-
-static GHashTable *lnet_request_hash;
-
-/*
- * Hash Functions
- */
-static gint
-lnet_equal(gconstpointer v, gconstpointer w)
-{
-       const struct lnet_request_key *v1 = (const struct lnet_request_key *)v;
-       const struct lnet_request_key *v2 = (const struct lnet_request_key *)w;
-
-       if (v1 -> conversation == v2 -> conversation &&
-                       v1 -> match_bits == v2 -> match_bits)
-       {
-
-               return 1;
-       }
-
-       return 0;
-}
-
-static guint
-lnet_hash (gconstpointer v)
-{
-       const struct lnet_request_key *key = (const struct lnet_request_key *)v;
-       return key -> conversation + key -> match_bits;
-}
-
-
-static void
-lnet_init_protocol(void)
-{
-       if (lnet_request_hash)
-               g_hash_table_destroy(lnet_request_hash);
-
-       lnet_request_hash = g_hash_table_new(lnet_hash, lnet_equal);
-}
-
-
-static lnet_request_val_t*
-get_lnet_conv(packet_info * pinfo , GHashTable * lnet_hash_table,  guint64 match_bits )
-{
-       conversation_t *  conversation ; 
-       lnet_request_key_t request_key, *new_request_key;
-       lnet_request_val_t *request_val=NULL ;
-
-       conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0);
-
-
-       if (NULL == conversation)
-               /* It's not part of any conversation - create a new one. */
-               conversation = conversation_new(pinfo->fd->num,  &pinfo->src, &pinfo->dst, proto_lnet,
-                               pinfo->srcport, pinfo->destport, 0);
-
-       request_key.conversation = conversation->index;
-       request_key.match_bits = match_bits;
-
-       request_val = (struct lnet_request_val * ) g_hash_table_lookup(lnet_hash_table, &request_key);
-       if(!request_val){
-               new_request_key = se_alloc(sizeof(struct lnet_request_key));
-               *new_request_key = request_key;
-               request_val = se_alloc(sizeof(struct lnet_request_val));
-               request_val -> match_bits = match_bits;
-               request_val -> packet_num_parent = pinfo->fd->num ;
-               /*request_val -> filename = "test" ; */
-               g_hash_table_insert(lnet_hash_table, new_request_key, request_val);
-
-       }
-
-       return request_val ;
-
-}
-
-
-
-/*----------------------------------------------------------- */
-#ifdef WIRESHARK_COMPAT
-static void
-dissect_lnet_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-#else
-static int
-dissect_lnet_message(tvbuff_t *tvb, packet_info *pinfo,
-                    proto_tree *tree, void *data)
-#endif
-{
-       guint64 match;
-       guint32 msg_type;
-       gint offset = 0;
-       t_nid dest_nid; /* nid value */
-       t_nid src_nid;
-       proto_item *ti = NULL; /* principal  node */
-       proto_tree *lnet_tree = NULL; /* principal tree */
-       proto_tree *lnet_nid_src_tree = NULL; /*subtree for the nids*/
-       proto_tree *lnet_nid_dest_tree = NULL;
-       proto_item *ti_src_nid; /* node for the nids */
-       proto_item *ti_dest_nid;
-       guint32 payload_length;
-       guint32 msg_filler_length;
-
-       /* lnet_request_val_t* conversation_val ; */
-       col_set_str(pinfo->cinfo, COL_PROTOCOL, "Lnet");
-
-       msg_type = tvb_get_letohl(tvb, LNET_MSG_TYPE_OFFSET);
-       /* We delete the entire line and add LNET  + msg_type */
-       col_add_fstr(pinfo->cinfo, COL_INFO, "LNET_%s",
-                    (msg_type < sizeof(lnet_msg_type_t)/sizeof(value_string))
-                    ? lnet_msg_type_t[msg_type].strptr
-                    : "Unknown");
-
-       if (tree == NULL)
-               goto out;
-
-       /* principal node */
-       ti = proto_tree_add_item(tree, proto_lnet, tvb, 0, -1, FALSE);
-
-       lnet_tree = proto_item_add_subtree(ti, ett_lnet);
-
-       if (ib_lnd_extra_bytes) {
-               offset = dissect_ib_msg(tvb, lnet_tree, offset);
-               if (offset == 0) {
-                       /*  There was no LNet payload, only ob2lnd. */
-                       goto out;
-               }
-       } else {
-               /* dissect the first 24 bytes (ksock_msg_t in
-                * lnet/socklnd.h
-                */
-               offset = dissect_ksock_msg(tvb, lnet_tree, offset);
-       }
-
-       /* Dest nid */
-       dest_nid = get_nid(tvb, offset);
-       ti_dest_nid = proto_tree_add_text(lnet_tree, tvb, offset, 8,
-                                         "dest_nid = %s@tcp%d",
-                                         ip_to_str((guint8 *) &dest_nid.addr),
-                                         dest_nid.interface);
-       lnet_nid_dest_tree = proto_item_add_subtree(ti_dest_nid,
-                                                   ett_lnet_dest_nid);
-       offset = dissect_dest_nid(tvb, lnet_nid_dest_tree, offset);
-
-       /* Same for src_nid */
-       src_nid = get_nid(tvb, offset);
-       ti_src_nid = proto_tree_add_text(lnet_tree, tvb, offset, 8,
-                                        "src_nid = %s@tcp%d",
-                                        ip_to_str((guint8 *) &src_nid.addr),
-                                        src_nid.interface);
-       lnet_nid_src_tree = proto_item_add_subtree(ti_src_nid,
-                                                  ett_lnet_src_nid);
-       offset = dissect_src_nid(tvb, lnet_nid_src_tree, offset);
-
-       /* pid */
-       proto_tree_add_item(lnet_tree, hf_lnet_src_pid, tvb, offset, 4, TRUE);
-       offset += 4;
-       proto_tree_add_item(lnet_tree, hf_lnet_dest_pid, tvb, offset, 4, TRUE);
-       offset += 4;
-
-       /* message_type (32 bits) */
-       msg_type = tvb_get_letohl(tvb, offset+0);
-       /* put some nice info on lnet line */
-       proto_item_append_text(ti, " %s",
-                              (msg_type <
-                               sizeof(lnet_msg_type_t)/sizeof(value_string))
-                              ? lnet_msg_type_t[msg_type].strptr
-                              : "Unknow");
-       proto_tree_add_item(lnet_tree, hf_lnet_msg_type, tvb,
-                           offset, 4, TRUE);
-       offset += 4;
-
-       /* payload data (to follow) length :*/
-       payload_length = tvb_get_letohl(tvb, offset+0);
-       proto_tree_add_item(lnet_tree, hf_lnet_payload_length, tvb,
-                           offset, 4, TRUE);
-       offset += 4;
-
-       /* here offset = 24+8+8+4+4+4+4 = 56 */
-       match = 0;
-       switch (msg_type) {
-       case LNET_MSG_ACK:
-               offset = dissect_lnet_ack(tvb, lnet_tree, offset, pinfo);
-               match = tvb_get_letoh64(tvb, 72);
-               break;
-       case LNET_MSG_PUT:
-               offset = dissect_lnet_put(tvb, lnet_tree, offset, pinfo);
-               match = tvb_get_letoh64(tvb, 72);
-               break;
-       case LNET_MSG_GET:
-               offset = dissect_lnet_get(tvb, lnet_tree, offset, pinfo);
-               match = tvb_get_letoh64(tvb, 72);
-               break;
-       case LNET_MSG_REPLY:
-               offset = dissect_lnet_reply(tvb, lnet_tree, offset);
-               break;
-       case LNET_MSG_HELLO:
-               offset = dissect_lnet_hello(tvb, lnet_tree, offset);
-               break;
-       default:
-               break;
-       }
-
-       /* conversation_val = */
-       get_lnet_conv(pinfo, lnet_request_hash, match);
-       /*      proto_tree_add_text(tree, tvb, 0 , 0, "match = %"
-        *      G_GINT64_MODIFIER "u parent = %d",
-        *      conversation_val -> match_bits ,
-        *      conversation_val -> packet_num_parent);
-        */
-
-       /* padding */
-       msg_filler_length = 72 - offset + 24 + ib_lnd_extra_bytes;
-       if (msg_filler_length > 72)
-               goto out;
-       /*  +24 : ksosck_message take 24bytes, and allready in offset  */
-
-       proto_tree_add_item(lnet_tree, hf_lnet_msg_filler, tvb, offset,
-                           msg_filler_length, little_endian);
-       offset += msg_filler_length;
-
-       if (payload_length > 0) {
-               /* display of payload */
-               proto_tree_add_item(lnet_tree, hf_lnet_payload, tvb,
-                                   offset, payload_length,
-                                   little_endian);
-
-               next_tvb = tvb_new_subset(tvb, offset,
-                                         payload_length, payload_length);
-               if (msg_type == LNET_MSG_PUT)
-                       dissector_try_uint(subdissector_table,
-                               tvb_get_letohl(tvb, LNET_PTL_INDEX_OFFSET_PUT),
-                               next_tvb, pinfo, tree);
-
-       }
-
-       offset += payload_length;
-
-out:
-#ifdef WIRESHARK_COMPAT
-       return;
-#else
-       return offset;
-#endif
-}
-
-void
-proto_register_lnet(void)
-{
-       static hf_register_info hf[] = {
-               { &hf_lnet_ksm_type           , 
-                       { "Type of socklnd message"   , "lnet.ksm_type"                , FT_UINT32 , BASE_HEX     , VALS(ksm_type_t)      , 0x0 , ""         , HFILL }} , 
-               { &hf_lnet_ksm_csum           , 
-                       { "Checksum"                  , "lnet.ksm_csum"                , FT_UINT32 , BASE_DEC     , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_lnet_ksm_zc_req_cookie  , 
-                       { "Ack required"              , "lnet.ksm_zc_req_cookie"       , FT_UINT64 , BASE_HEX     , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_lnet_ksm_zc_ack_cookie  , 
-                       { "Ack"                       , "lnet.ksm_zc_ack_cookie"       , FT_UINT64 , BASE_HEX     , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_lnet_ib_magic,
-                       { "Magic of IB message", "lnet.ib.magic", FT_UINT32,
-                         BASE_HEX, NULL, 0x0, "", HFILL} },
-               { &hf_lnet_ib_version,
-                       { "Version", "lnet.ib.version", FT_UINT16, BASE_HEX,
-                         VALS(ib_version_t), 0x0, "", HFILL} },
-               { &hf_lnet_ib_type,
-                       { "Type of IB message", "lnet.ib.type", FT_UINT8,
-                         BASE_HEX, VALS(ib_type_t), 0x0, "", HFILL} },
-               { &hf_lnet_ib_credits,
-                       { "Returned Credits", "lnet.ib.credits", FT_UINT8,
-                         BASE_DEC, NULL, 0x0, "", HFILL} },
-               { &hf_lnet_ib_nob,
-                       { "Number of Bytes", "lnet.ib.nob", FT_UINT32,
-                         BASE_DEC, NULL, 0x0, "", HFILL} },
-               { &hf_lnet_ib_csum,
-                       { "Checksum", "lnet.ib_csum", FT_UINT32, BASE_DEC,
-                         NULL, 0x0, "", HFILL} },
-               { &hf_lnet_ib_srcstamp,
-                       { "Sender Timestamp", "lnet.ib.srcstamp",
-                         FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0,
-                         "", HFILL} },
-               { &hf_lnet_ib_dststamp,
-                       { "Destination Timestamp", "lnet.ib.dststamp",
-                         FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0,
-                         "", HFILL} },
-
-               { &hf_lnet_src_nid            , 
-                       { "Src nid"                   , "lnet.src_nid"                 , FT_UINT64 , BASE_HEX     , NULL                  , 0x0 , "src nid"  , HFILL }} , 
-               { &hf_lnet_src_nid_addr       , 
-                       { "Src nid"                   , "lnet.src_nid_addr"            , FT_IPv4   , BASE_NONE    , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_lnet_src_nid_lnet_type  , 
-                       { "lnd network type"          , "lnet.src_nid_type"            , FT_UINT16 , BASE_DEC     , VALS(lndnames)       , 0x0 , ""         , HFILL} },
-               { &hf_lnet_src_nid_interface  , 
-                       { "lnd network interface"     , "lnet.src_nid_net_interface"   , FT_UINT16 , BASE_DEC     , NULL                  , 0x0 , NULL       , HFILL }} , 
-
-               { &hf_lnet_dest_nid           , 
-                       { "Dest nid"                  , "lnet.dest_nid"                , FT_UINT64 , BASE_HEX     , NULL                  , 0x0 , ""         , HFILL }} , 
-
-               { &hf_lnet_dest_nid_addr      , 
-                       { "Destination nid"           , "lnet.dest_nid_addr"           , FT_IPv4   , BASE_NONE    , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_lnet_dest_nid_lnet_type , 
-                       { "lnd network type"          , "lnet.dest_nid_type"           , FT_UINT16 , BASE_DEC     , VALS(lndnames)       , 0x0 , ""         , HFILL} },
-               { &hf_lnet_dest_nid_interface , 
-                       { "lnd network interface"     , "lnet.dest_nid_net_interface"  , FT_UINT16 , BASE_DEC     , NULL                  , 0x0 , NULL       , HFILL }} , 
-
-               { &hf_lnet_dest_pid           , 
-                       { "Dest pid"                  , "lnet.dest_pid"                , FT_UINT32 , BASE_DEC_HEX , NULL                  , 0x0 , "dest pid" , HFILL }} , 
-               { &hf_lnet_src_pid            , 
-                       { "Src pid"                   , "lnet.src_pid"                 , FT_UINT32 , BASE_DEC_HEX , NULL                  , 0x0 , "src nid"  , HFILL }} , 
-
-               { &hf_lnet_msg_type           , 
-                       { "Message type"              , "lnet.msg_type"                , FT_UINT32 , BASE_DEC     , VALS(lnet_msg_type_t) , 0x0 , "msg type" , HFILL }} , 
-               { &hf_lnet_payload_length     , 
-                       { "Payload length"            , "lnet.payload_length"          , FT_UINT32 , BASE_DEC     , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_lnet_payload            , 
-                       { "Payload"                   , "lnet.payload"                 , FT_NONE   , BASE_NONE    , NULL                  , 0x0 , ""         , HFILL }} , 
-
-               {&hf_dst_wmd                  , 
-                       { "DST MD index "             , "lnet.msg_dst_cookie"          , FT_BYTES  , BASE_NONE    , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_dst_wmd_interface       , 
-                       { "DST MD index interface"    , "lnet.msg_dst_inteface_cookie" , FT_UINT64 , BASE_HEX_DEC , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_dst_wmd_object          , 
-                       { "DST MD index object"       , "lnet.msg_dst_object_cookie"   , FT_UINT64 , BASE_HEX_DEC , NULL                  , 0x0 , ""         , HFILL }} , 
-               { &hf_match_bits              , 
-                       { "Match bits"                , "lnet.msg_dst_match_bits"      , FT_UINT64 , BASE_HEX_DEC , NULL                  , 0x0 , ""         , HFILL}}  , 
-               { &hf_mlength                 , 
-                       { "Message length"            , "lnet.msg_length"              , FT_UINT32 , BASE_DEC     , NULL                  , 0x0 , ""         , HFILL}}  , 
-
-
-               /* Put */
-               { &hf_hdr_data                , 
-                       { "hdr data"                  , "lnet.msg_hdr_data"            , FT_UINT64 , BASE_HEX_DEC , NULL                  , 0x0 , ""         , HFILL}}  , 
-               { &hf_ptl_index               , 
-                       { "ptl index"                 , "lnet.ptl_index"               , FT_UINT32 , BASE_DEC     , VALS(portal_indices)  , 0x0 , ""         , HFILL}}  , 
-               { &hf_offset                  , 
-                       { "offset"                    , "lnet.offset"                  , FT_UINT32 , BASE_DEC     , NULL                  , 0x0 , ""         , HFILL}}  , 
-
-               /* Get*/
-               { &hf_src_offset              , 
-                       { "src offset"                , "lnet.src_offset"              , FT_UINT32 , BASE_DEC     , NULL                  , 0x0 , ""         , HFILL}}  , 
-               { &hf_sink_length             , 
-                       { "sink length"               , "lnet.sink_length"             , FT_UINT32 , BASE_DEC     , NULL                  , 0x0 , ""         , HFILL}}  , 
-
-               /* Hello*/
-               { &hf_hello_incarnation       , 
-                       { "hello incarnation "        , "lnet.hello_incarnation"       , FT_UINT64 , BASE_HEX_DEC , NULL                  , 0x0 , ""         , HFILL}}  , 
-               { &hf_hello_type              , 
-                       { "hello type"                , "lnet.hello_type"              , FT_UINT32 , BASE_DEC     , NULL                  , 0x0 , ""         , HFILL}}  , 
-
-               { &hf_lnet_msg_header         , 
-                       { "ptl header"                , "lnet.ptl_header"              , FT_NONE   , BASE_NONE    , NULL                  , 0x0 , ""         , HFILL}}  , 
-
-               { &hf_lnet_msg_filler         , 
-                       { "msg filler (padding)"      , "lnet.ptl_filler"              , FT_NONE   , BASE_NONE    , NULL                  , 0x0 , ""         , HFILL}}  , 
-
-               /* Add more fields here */
-       };
-
-       static gint *ett[] = {
-               &ett_lnet,
-               &ett_lnet_dest_nid,
-               &ett_lnet_src_nid
-       };
-
-
-       module_t *lnet_module;
-
-       proto_lnet = proto_register_protocol("Lnet", /*name*/
-                       "Lnet",  /*short name*/
-                       "lnet"); /*abbrev*/
-
-       proto_register_field_array(proto_lnet, hf, array_length(hf));
-       proto_register_subtree_array(ett, array_length(ett));
-
-       lnet_module = prefs_register_protocol(proto_lnet, proto_reg_handoff_lnet);
-
-       prefs_register_uint_preference(lnet_module, "tcp.lnet_port",
-                       "Lnet listener TCP Port",
-                       "Set the TCP port for Lnet"
-                       "(if other than the default of 988)",
-                       10, &global_lnet_tcp_port);
-
-       subdissector_table = register_dissector_table("lnet.ptl_index", "lnet portal index", FT_UINT32 , BASE_DEC);
-
-       register_init_routine(&lnet_init_protocol);
-
-}
-
-
-/* The registration hand-off routine */
-void
-proto_reg_handoff_lnet(void)
-{
-       static int lnet_prefs_initialized = FALSE;
-       static dissector_handle_t lnet_handle;
-
-       if(!lnet_prefs_initialized) {
-               heur_dissector_add("infiniband.payload", dissect_ib_lnet,
-                                  proto_lnet);
-               heur_dissector_add("infiniband.mad.cm.private",
-                                  dissect_ib_lnet, proto_lnet);
-               lnet_handle = create_dissector_handle(dissect_lnet, proto_lnet);
-               lnet_prefs_initialized = TRUE;
-       }
-       else
-               dissector_delete_uint("tcp.port", global_lnet_tcp_port, lnet_handle);
-
-       lnet_tcp_port = global_lnet_tcp_port;
-
-       dissector_add_uint("tcp.port", lnet_tcp_port, lnet_handle);
-}