Whamcloud - gitweb
LU-4378 wireshark: Add parsing for HSM commands 52/14552/9
authorNathaniel Clark <nathaniel.l.clark@intel.com>
Mon, 16 Dec 2013 19:44:02 +0000 (14:44 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Sat, 3 Jun 2017 04:00:06 +0000 (04:00 +0000)
Add HSM MDS parsing along with several other minor commands.
Add OSD CONNECT parsing.
Fixup formatting to be inline with Linux Kernel style for altered
lines.
Make compatible with wireshark 1.12.

Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
Change-Id: I5e96f5d0d4ea3953203f28d430a77741179bea70
Reviewed-on: https://review.whamcloud.com/14552
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Doug Oucharek <doug.s.oucharek@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/contrib/wireshark/packet-lnet.c
lustre/contrib/wireshark/packet-lustre.c
lustre/contrib/wireshark/wireshark-compat.h [new file with mode: 0644]
lustre/contrib/wireshark/wsconfig.sh [changed mode: 0644->0755]

index 9fc4307..397d888 100644 (file)
@@ -1,5 +1,5 @@
-/* packet-lnet.c 
- * Lnet packet dissection 
+/* packet-lnet.c
+ * Lnet packet dissection
  * Author: Laurent George <george@ocre.cea.fr>
  * based on packet-agentx.c and packet-afs.c
  * 20080903
 #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. */
@@ -325,8 +327,14 @@ static int dissect_ack_cookie(tvbuff_t * tvb, proto_tree *tree, int offset)
        return offset + 8;
 }
 
-static void 
-dissect_ksock_msg_noop( tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree)
+#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;
@@ -334,6 +342,9 @@ dissect_ksock_msg_noop( tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree)
        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
 }
 
 
@@ -452,10 +463,10 @@ static int dissect_lnet_put(tvbuff_t * tvb, proto_tree *tree, int offset, packet
 
        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;
-       if (check_col(pinfo->cinfo, COL_INFO)) 
-               col_append_sep_str(pinfo->cinfo, COL_INFO, ", ",
-               val_to_str(tvb_get_letohl(tvb, offset), portal_indices,
-                          "Unknown")); /* add some nice value  */
+       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,
@@ -469,26 +480,36 @@ static int dissect_lnet_put(tvbuff_t * tvb, proto_tree *tree, int offset, packet
 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;
-       /*if (check_col(pinfo->cinfo, COL_INFO))*/
-       /*        col_prepend_fence_fstr(pinfo->cinfo, COL_INFO, " %" G_GINT64_MODIFIER "u ", tvb_get_letoh64(tvb,offset) );*/
-
-       proto_tree_add_item(tree,hf_match_bits,tvb,offset,8,little_endian);offset+=8;
-       if (check_col(pinfo->cinfo, COL_INFO)) 
-               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; 
+          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)
@@ -531,7 +552,11 @@ static int dissect_lnet_ack(tvbuff_t * tvb, proto_tree *tree, int offset, packet
        return offset ; 
 } 
 
-static void dissect_lnet_message(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree); 
+#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 
@@ -564,19 +589,38 @@ dissect_lnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
           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:
-                       tcp_dissect_pdus(tvb,pinfo,tree,TRUE,0, get_noop_message_len,dissect_ksock_msg_noop);
-                       break;
-               case KSOCK_MSG_LNET:
-                       tcp_dissect_pdus(tvb,pinfo,tree,TRUE,LNET_HEADER_LEN, get_lnet_message_len,dissect_lnet_message);
-                       break;
+       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
-dissect_ib_lnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*data)
+#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. */
@@ -586,8 +630,13 @@ dissect_ib_lnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*data)
        }
 
        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);
 }
 
@@ -686,159 +735,170 @@ get_lnet_conv(packet_info * pinfo , GHashTable * lnet_hash_table,  guint64 match
 
 
 /*----------------------------------------------------------- */
+#ifdef WIRESHARK_COMPAT
 static void
-dissect_lnet_message(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree)
+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;
-/*
-       lnet_request_val_t* conversation_val ;
-
-*/
-       if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
-               col_set_str(pinfo->cinfo, COL_PROTOCOL, "Lnet");
-       }
-
-       if (check_col(pinfo->cinfo, COL_INFO)) {
-               /* t_nid dest_nid ; */
-               /*t_nid src_nid ; */
-               /*guint32 msg_type;*/
-               /*[> col_clear(pinfo->cinfo, COL_INFO); <]*/
-               /*dest_nid = get_nid(tvb, LNET_NID_DEST_OFFSET);*/
-               /*src_nid = get_nid(tvb, LNET_NID_SRC_OFFSET);*/
-
-               /*[> col_add_fstr(pinfo->cinfo, COL_INFO, "%s@tcp%d > %s@tcp%d",
-                       ip_to_str((guint8 *) &src_nid.addr), src_nid.interface,
-                       ip_to_str((guint8 *) & dest_nid.addr), dest_nid.interface); */
-
-               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) {
-               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 ; 
-
-               gint offset = 0 ; 
-
-               guint32 msg_type ;
-               guint32 payload_length; 
-               guint32 msg_filler_length;
-
-
-               ti = proto_tree_add_item(tree,proto_lnet,tvb,0,-1,FALSE); /* principal node */ 
-               /*      ti=proto_tree_add_protocol_format(tree, proto_lnet, tvb, 0, -1, "Lnet"); */
-
-               lnet_tree = proto_item_add_subtree(ti,ett_lnet); /* add the subtree*/
-
-               if (ib_lnd_extra_bytes) {
-                       offset = dissect_ib_msg(tvb, lnet_tree, offset);
-                       if (offset == 0) {
-                               /*  There was no LNet payload, only ob2lnd. */
-                               return;
-                       }
-               } 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") ;  /* rajout de l'info dans l'arbre */
-               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;
+       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;
 
-               /* 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)
-                       return ;
-               /*  +24 : ksosck_message take 24bytes, and allready in offset  */
+       /* 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;
 
-               proto_tree_add_item(lnet_tree, hf_lnet_msg_filler, tvb, offset,
-                                   msg_filler_length, little_endian);
-               offset+=msg_filler_length;
+       /* 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;
 
-               if (payload_length>0)
-               {
+       /* 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;
+       }
 
-                       /* display of payload */ 
-                       proto_tree_add_item(lnet_tree, hf_lnet_payload, tvb,
-                                           offset, payload_length,
-                                           little_endian);
+       /* 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);
 
-                       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;
 
-               offset+=payload_length;
-       } 
+out:
+#ifdef WIRESHARK_COMPAT
+       return;
+#else
+       return offset;
+#endif
 }
 
 void
index b8397e7..6f30806 100644 (file)
@@ -36,6 +36,8 @@
 #include <string.h>
 #include <epan/packet.h>
 
+#include "wireshark-compat.h"
+
 #include <epan/dissectors/packet-windows-common.h>
 #include "lustre_dlm_flags.h"
 
@@ -265,6 +267,7 @@ enum ldlm_cmd {
   LDLM_BL_CALLBACK = 104,
   LDLM_CP_CALLBACK = 105,
   LDLM_GL_CALLBACK = 106,
+  LDLM_SET_INFO    = 107,
   LDLM_LAST_OPC
 };
 #define LDLM_FIRST_OPC LDLM_ENQUEUE
@@ -360,6 +363,43 @@ typedef enum {
 #define PTL_RPC_MSG_ERR 4712
 #define PTL_RPC_MSG_REPLY 4713
 
+/* Connect flags from lustre_idl.h */
+#define OBD_CONNECT_RDONLY                0x1ULL /*client has read-only access*/
+#define OBD_CONNECT_INDEX                 0x2ULL /*connect specific LOV idx */
+#define OBD_CONNECT_MDS                   0x4ULL /*connect from MDT to OST */
+#define OBD_CONNECT_GRANT                 0x8ULL /*OSC gets grant at connect */
+#define OBD_CONNECT_SRVLOCK              0x10ULL /*server takes locks for cli */
+#define OBD_CONNECT_VERSION              0x20ULL /*Lustre versions in ocd */
+#define OBD_CONNECT_REQPORTAL            0x40ULL /*Separate non-IO req portal */
+#define OBD_CONNECT_ACL                  0x80ULL /*access control lists */
+#define OBD_CONNECT_XATTR               0x100ULL /*client use extended attr */
+#define OBD_CONNECT_CROW                0x200ULL /*MDS+OST create obj on write*/
+#define OBD_CONNECT_TRUNCLOCK           0x400ULL /*locks on server for punch */
+#define OBD_CONNECT_TRANSNO             0x800ULL /*replay sends init transno */
+#define OBD_CONNECT_IBITS              0x1000ULL /*support for inodebits locks*/
+#define OBD_CONNECT_JOIN               0x2000ULL /*files can be concatenated.
+                                                 *We do not support JOIN FILE
+                                                 *anymore, reserve this flags
+                                                 *just for preventing such bit
+                                                 *to be reused.*/
+#define OBD_CONNECT_ATTRFID            0x4000ULL /*Server can GetAttr By Fid*/
+#define OBD_CONNECT_NODEVOH            0x8000ULL /*No open hndl on specl nodes*/
+#define OBD_CONNECT_RMT_CLIENT        0x10000ULL /*Remote client */
+#define OBD_CONNECT_RMT_CLIENT_FORCE  0x20000ULL /*Remote client by force */
+#define OBD_CONNECT_BRW_SIZE          0x40000ULL /*Max bytes per rpc */
+#define OBD_CONNECT_QUOTA64           0x80000ULL /*Not used since 2.4 */
+#define OBD_CONNECT_MDS_CAPA         0x100000ULL /*MDS capability */
+#define OBD_CONNECT_OSS_CAPA         0x200000ULL /*OSS capability */
+#define OBD_CONNECT_CANCELSET        0x400000ULL /*Early batched cancels. */
+#define OBD_CONNECT_SOM              0x800000ULL /*Size on MDS */
+#define OBD_CONNECT_AT              0x1000000ULL /*client uses AT */
+#define OBD_CONNECT_LRU_RESIZE      0x2000000ULL /*LRU resize feature. */
+#define OBD_CONNECT_MDS_MDS         0x4000000ULL /*MDS-MDS connection */
+#define OBD_CONNECT_REAL            0x8000000ULL /*real connection */
+#define OBD_CONNECT_CHANGE_QS      0x10000000ULL /*Not used since 2.4 */
+#define OBD_CONNECT_CKSUM          0x20000000ULL /*support several cksum algos*/
+#define OBD_CONNECT_FID            0x40000000ULL /*FID is supported by server */
+#define OBD_CONNECT_VBR            0x80000000ULL /*version based recovery */
 
 /* Ett declarations */
 static gint ett_lustre_llog_log_llh_flags = -1 ;
@@ -431,8 +471,14 @@ static gint ett_lustre_seq_range = -1;
 static gint ett_lustre_fld_range = -1;
 static gint ett_lustre_mdt_ioepoch = -1;
 static gint ett_lustre_capa = -1;
+static gint ett_lustre_close_data = -1;
 static gint ett_lustre_acl = -1;
 static gint ett_lustre_ladvise = -1;
+static gint ett_lustre_hsm_request = -1;
+static gint ett_lustre_hsm_user_item = -1;
+static gint ett_lustre_hsm_extent = -1;
+static gint ett_lustre_hsm_progress = -1;
+static gint ett_lustre_hsm_user_state = -1;
 
 /* -----------------------------------------------*/
 /* Header field declarations */
@@ -680,6 +726,15 @@ static int hf_lustre_mdt_rec_setxattr_sx_padding_9 = -1;
 static int hf_lustre_mdt_rec_setxattr_sx_padding_10 = -1;
 static int hf_lustre_mdt_rec_setxattr_sx_padding_11 = -1;
 
+static int hf_lustre_mdt_getinfo_key = -1;
+static int hf_lustre_mdt_getinfo_vallen = -1;
+static int hf_lustre_mdt_getinfo_data = -1;
+
+static int hf_lustre_close_data = -1;
+static int hf_lustre_close_fid = -1;
+static int hf_lustre_close_data_ver = -1;
+static int hf_lustre_close_reserved = -1;
+
 static int hf_lustre_seq_opc = -1;
 static int hf_lustre_seq_range = -1;
 static int hf_lustre_seq_range_start = -1;
@@ -790,6 +845,10 @@ static int hf_lustre_lustre_msg_v1_lm_version = -1;
 static int hf_lustre_obd_statfs_os_spare7 = -1;
 static int hf_lustre_obd_statfs_os_fsid = -1;
 static int hf_lustre_obd_connect_data_ocd_cksum_types = -1;
+static int hf_lustre_obd_connect_data_ocd_max_easize = -1;
+static int hf_lustre_obd_connect_data_ocd_instance = -1;
+static int hf_lustre_obd_connect_data_ocd_maxbytes = -1;
+static int hf_lustre_obd_connect_data_ocd_maxmodrpcs = -1;
 static int hf_lustre_ost_lvb_lvb_size = -1;
 static int hf_lustre_obd_statfs_os_type = -1;
 static int hf_lustre_obd_statfs_os_spare6 = -1;
@@ -805,9 +864,7 @@ static int hf_lustre_niobuf_remote_flags = -1;
 static int hf_lustre_ll_fid_id = -1;
 static int hf_lustre_ost_lvb_lvb_blocks = -1;
 static int hf_lustre_lustre_msg_v2_lm_padding_2 = -1;
-static int hf_lustre_obd_connect_data_padding1 = -1;
 static int hf_lustre_lov_ost_data_v1_l_ost_idx = -1;
-static int hf_lustre_obd_connect_data_padding2 = -1;
 static int hf_lustre_obd_ioobj_ioo_seq = -1;
 static int hf_lustre_niobuf_remote_offset=-1;
 static int hf_lustre_obd_statfs_os_spare2 = -1;
@@ -1029,6 +1086,42 @@ static int hf_lustre_lu_ladvise_lla_start = -1;
 static int hf_lustre_lu_ladvise_lla_end = -1;
 static int hf_lustre_lu_ladvise_lla_advice = -1;
 static int hf_lustre_lu_ladvise_lla_padding = -1;
+
+static int hf_lustre_ldlm_key = -1;
+static int hf_lustre_ldlm_value = -1;
+
+static int hf_lustre_hsm_request = -1;
+static int hf_lustre_hsm_req_action = -1;
+static int hf_lustre_hsm_req_archive_id = -1;
+static int hf_lustre_hsm_req_flags = -1;
+static int hf_lustre_hsm_req_itemcount = -1;
+static int hf_lustre_hsm_req_data_len = -1;
+
+static int hf_lustre_hsm_user_item = -1;
+static int hf_lustre_hsm_user_item_fid = -1;
+static int hf_lustre_hsm_user_item_extent = -1;
+
+static int hf_lustre_hsm_extent = -1;
+static int hf_lustre_hsm_extent_offset = -1;
+static int hf_lustre_hsm_extent_length = -1;
+
+static int hf_lustre_hsm_progress = -1;
+static int hf_lustre_hsm_prog_fid = -1;
+static int hf_lustre_hsm_prog_cookie = -1;
+static int hf_lustre_hsm_prog_extent = -1;
+static int hf_lustre_hsm_prog_flags = -1;
+static int hf_lustre_hsm_prog_errval = -1;
+static int hf_lustre_hsm_prog_data_ver = -1;
+
+static int hf_lustre_hsm_state_get = -1;
+static int hf_lustre_hsm_us_states = -1;
+static int hf_lustre_hsm_us_archive_id = -1;
+static int hf_lustre_hsm_us_in_prog_state = -1;
+static int hf_lustre_hsm_us_in_prog_action = -1;
+static int hf_lustre_hsm_us_in_prog_location = -1;
+static int hf_lustre_hsm_us_ext_info = -1;
+
+static int hf_lustre_generic_data = -1;
 /* --------------------------------------------------------------------*/
 
 
@@ -1195,7 +1288,8 @@ const value_string lustre_op_codes[] = {
   {104 , "LDLM_BL_CALLBACK"},
   {105 , "LDLM_CP_CALLBACK"},
   {106 , "LDLM_GL_CALLBACK"},
-  {107 , "LDLM_LAST_OPC"},
+  {107 , "LDLM_SET_INFO"},
+  {108 , "LDLM_LAST_OPC"},
   /*MGS Opcodes*/
   {250 , "MGS_CONNECT"},
   {251 , "MGS_DISCONNECT"},
@@ -1228,17 +1322,6 @@ const value_string lustre_op_codes[] = {
   { 901, "FLD_LAST_OPC"},
   { 0, NULL }
 };
-/*const value_string lustre_ldlm_mode_vals[] = {*/
-/*    { LCK_MINMODE, "MINMODE" },*/
-/*    { LCK_EX, "EX" },*/
-/*    { LCK_PW, "PW" },*/
-/*    { LCK_PR, "PR" },*/
-/*    { LCK_CW, "CW" },*/
-/*    { LCK_CR, "CR" },*/
-/*    { LCK_NL, "NL" },*/
-/*    { LCK_GROUP, "GROUP" },*/
-/*    { 0, NULL }*/
-/*};*/
 
 /* detailled version the information came from : http://wiki.lustre.org/images/e/e5/LustreInternals_Architecture.pdf */
 const value_string lustre_ldlm_mode_vals[] = {
@@ -1275,6 +1358,54 @@ const value_string lustre_llog_cmd_t_vals[] = {
   { 0, NULL }
 };
 
+/* from lustre_user.h */
+enum hsm_user_action {
+        HUA_NONE    =  1, /* no action (noop) */
+        HUA_ARCHIVE = 10, /* copy to hsm */
+        HUA_RESTORE = 11, /* prestage */
+        HUA_RELEASE = 12, /* drop ost objects */
+        HUA_REMOVE  = 13, /* remove from archive */
+        HUA_CANCEL  = 14  /* cancel a request */
+};
+const value_string lustre_hsm_user_action_t_vals[] = {
+  { HUA_NONE,          "NOOP" },
+  { HUA_ARCHIVE,       "ARCHIVE" },
+  { HUA_RESTORE,       "RESTORE" },
+  { HUA_RELEASE,       "RELEASE" },
+  { HUA_REMOVE,                "REMOVE" },
+  { HUA_CANCEL,                "CANCEL" },
+};
+
+enum hsm_states {
+       HS_EXISTS       = 0x00000001,
+       HS_DIRTY        = 0x00000002,
+       HS_RELEASED     = 0x00000004,
+       HS_ARCHIVED     = 0x00000008,
+       HS_NORELEASE    = 0x00000010,
+       HS_NOARCHIVE    = 0x00000020,
+       HS_LOST         = 0x00000040,
+};
+const value_string lustre_hsm_states_t_vals[] = {
+  { HS_EXISTS,         "EXISTS" },
+  { HS_DIRTY,          "DIRTY" },
+  { HS_RELEASED,       "RELEASED" },
+  { HS_ARCHIVED,       "ARCHIVED" },
+  { HS_NORELEASE,      "NORELEASED" },
+  { HS_NOARCHIVE,      "NOARCHIVED" },
+  { HS_LOST,           "LOST" },
+};
+
+enum hsm_progress_states {
+       HPS_WAITING     = 1,
+       HPS_RUNNING     = 2,
+       HPS_DONE        = 3,
+};
+const value_string lustre_hsm_progress_state_t_vals[] = {
+  { HPS_WAITING,       "WAITING" },
+  { HPS_RUNNING,       "RUNNING" },
+  { HPS_DONE,          "DONE" },
+};
+
 #ifndef ENABLE_STATIC
 const gchar version[] = VERSION;
 
@@ -1306,48 +1437,38 @@ plugin_reg_handoff(void)
 static void display_info_str(proto_item *pi, column_info *cinfo, gint col,
                             const gchar *str)
 {
-  if (NULL !=pi)
-    proto_item_append_text(pi, str);
+       if (NULL != pi)
+               proto_item_append_text(pi, str);
 
-  if (NULL !=cinfo)
-    if (check_col(cinfo, col))
-      col_append_str(cinfo, col, str);
+       if (NULL != cinfo)
+               col_append_str(cinfo, col, str);
 }
 
 /*
  * Need to be (re)written
  */
-static void display_info_fstr(proto_item *pi, column_info *cinfo, gint col, const char* format, const gchar * str){
-
-  if (NULL !=pi){
-    //va_start(ap, format);
-    proto_item_append_text(pi, format, str);
-    //va_end(ap);
-  }
+static void display_info_fstr(proto_item *pi, column_info *cinfo, gint col,
+                             const char *format, const gchar *str)
+{
+       if (NULL != pi)
+               proto_item_append_text(pi, format, str);
 
-  if (NULL !=cinfo){
-    if (check_col(cinfo, col)){
-      //   va_list ap;
-      //  va_start(ap, format);
-      col_append_fstr(cinfo, col,  format, str);
-      // va_end(ap);
-    }
-  }
+       if (NULL != cinfo)
+               col_append_fstr(cinfo, col, format, str);
 }
 
 
-/* ------------------------------ basic dissect functions ------------------------      */
-static int
-dissect_uint64
-(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, int hfindex)
+/* -------------------------- basic dissect functions -------------------     */
+static int dissect_uint64(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
+                         proto_tree *tree, int hfindex)
 {
   proto_tree_add_item(tree, hfindex, tvb, offset, 8, TRUE);
   return offset+8;
 }
 
 static int
-dissect_uint32
-(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, int hfindex)
+dissect_uint32(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
+              proto_tree *tree, int hfindex)
 {
   proto_tree_add_item(tree, hfindex, tvb, offset, 4, TRUE);
   return offset+4;
@@ -1396,6 +1517,25 @@ lustre_dissect_element_data(tvbuff_t *tvb _U_, int offset _U_,
   return offset;
 }
 
+static int
+lustre_dissect_struct_element_data(tvbuff_t *tvb _U_, int offset _U_,
+                                  packet_info *pinfo _U_, proto_tree *parent_tree _U_,
+                                  int hf_index _U_, guint32 data_len)
+{
+  proto_item *item = NULL;
+
+  if (data_len == 0)
+    return offset;
+
+  proto_tree_add_item(parent_tree, hf_index, tvb, offset, data_len, TRUE);
+
+  offset += data_len;
+  proto_item_set_len(item, data_len);
+  offset = add_extra_padding(tvb, offset, pinfo, parent_tree);
+
+  return offset;
+}
+
 int
 lustre_dissect_struct_hmac(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
                           proto_tree *parent_tree _U_, int hf_index _U_, int max_length)
@@ -1473,16 +1613,33 @@ static int
 lustre_dissect_element_obd_connect_data_ocd_connect_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
   offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_connect_flags);
-
   return offset;
 }
 
 static int
 lustre_dissect_element_obd_connect_data_ocd_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_version);
+       guint32 version;
+       guint32 major, minor, patch, fix;
+       proto_item *item;
 
-  return offset;
+       version = tvb_get_letohl(tvb, offset);
+       fix = version & 0xff;
+       version >>= 8;
+       patch = version & 0xff;
+       version >>= 8;
+       minor = version & 0xff;
+       version >>= 8;
+       major = version & 0xff;
+
+       item = proto_tree_add_item(tree, hf_lustre_obd_connect_data_ocd_version,
+                                  tvb, offset, 0, TRUE);
+       proto_item_append_text(item,  ": %d.%d.%d.%d",
+                              major, minor, patch, fix);
+       proto_item_set_len(item, 4);
+
+       offset += 4;
+       return offset;
 }
 
 static int
@@ -1526,30 +1683,6 @@ lustre_dissect_element_obd_connect_data_ocd_nllu(tvbuff_t *tvb _U_, int offset _
 }
 
 static int
-lustre_dissect_element_obd_connect_data_ocd_nllg(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_nllg);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_obd_connect_data_ocd_transno(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_transno);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_obd_connect_data_ocd_group(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_group);
-
-  return offset;
-}
-
-static int
 lustre_dissect_element_obd_connect_data_ocd_cksum_types(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
   offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_cksum_types);
@@ -1558,67 +1691,89 @@ lustre_dissect_element_obd_connect_data_ocd_cksum_types(tvbuff_t *tvb _U_, int o
 }
 
 static int
-lustre_dissect_element_obd_connect_data_padding1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_padding1);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_obd_connect_data_padding2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_struct_obd_connect_data(tvbuff_t *tvb _U_, int offset _U_,
+                                      packet_info *pinfo _U_,
+                                      proto_tree *parent_tree _U_,
+                                      int hf_index _U_, guint32 buf_num)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_padding2);
+       proto_item *item = NULL;
+       proto_tree *tree = NULL;
+       int old_offset;
+       int data_len;
 
-  return offset;
-}
+       data_len = LUSTRE_BUFFER_LEN(buf_num);
+       if (data_len == 0)
+               return offset;
 
-static int
-lustre_dissect_struct_obd_connect_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
-{
-  proto_item *item = NULL;
-  proto_tree *tree = NULL;
-  int old_offset;
+       old_offset = offset;
 
+       if (parent_tree) {
+               item = proto_tree_add_item(parent_tree, hf_index, tvb,
+                                          offset, -1, TRUE);
+               tree = proto_item_add_subtree(item,
+                                             ett_lustre_obd_connect_data);
+       }
 
+       /* ocd_connect_flags = get_... */
+       offset = lustre_dissect_element_obd_connect_data_ocd_connect_flags(tvb,
+                       offset, pinfo, tree);
 
-  old_offset=offset;
+       offset = lustre_dissect_element_obd_connect_data_ocd_version(tvb,
+                       offset, pinfo, tree);
 
-  if (parent_tree) {
-    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-    tree = proto_item_add_subtree(item, ett_lustre_obd_connect_data);
-  }
-
-  offset=lustre_dissect_element_obd_connect_data_ocd_connect_flags(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_obd_connect_data_ocd_version(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_obd_connect_data_ocd_grant(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_obd_connect_data_ocd_index(tvb, offset, pinfo, tree);
+       offset = lustre_dissect_element_obd_connect_data_ocd_grant(tvb,
+                       offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_brw_size(tvb, offset, pinfo, tree);
+       offset = lustre_dissect_element_obd_connect_data_ocd_index(tvb,
+                       offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_ibits_known(tvb, offset, pinfo, tree);
+       offset = lustre_dissect_element_obd_connect_data_ocd_brw_size(tvb,
+                       offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_nllu(tvb, offset, pinfo, tree);
+       offset = lustre_dissect_element_obd_connect_data_ocd_ibits_known(tvb,
+                       offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_nllg(tvb, offset, pinfo, tree);
+       if (data_len == 72) {
+               offset = lustre_dissect_element_obd_connect_data_ocd_nllu(tvb,
+                               offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_transno(tvb, offset, pinfo, tree);
+       } else { /* if data_len == 192 */
+               /* Actually blocksize, inodespace, grant_extent */
+               offset = lustre_dissect_element_obd_connect_data_ocd_nllu(tvb,
+                               offset, pinfo, tree);
+       }
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_group(tvb, offset, pinfo, tree);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                       hf_lustre_obd_connect_data_ocd_nllg);
+       offset = dissect_uint64(tvb, offset, pinfo, tree,
+                       hf_lustre_obd_connect_data_ocd_transno);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                       hf_lustre_obd_connect_data_ocd_group);
+       offset = lustre_dissect_element_obd_connect_data_ocd_cksum_types(tvb,
+                       offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_cksum_types(tvb, offset, pinfo, tree);
+       /* if (ocd_connect_flags & OBD_CONNECT_MAX_EASIZE) */
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                       hf_lustre_obd_connect_data_ocd_max_easize);
 
-  offset=lustre_dissect_element_obd_connect_data_padding1(tvb, offset, pinfo, tree);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                       hf_lustre_obd_connect_data_ocd_instance);
+       /* if (ocd_connect_flags & OBD_CONNECT_MAXBYTES) */
+       offset = dissect_uint64(tvb, offset, pinfo, tree,
+                       hf_lustre_obd_connect_data_ocd_maxbytes);
+       if (data_len >= 74) /* && (flags & OBD_CONNECT_MULTIMODRPCS) */
+               offset = dissect_uint16(tvb, offset, pinfo, tree,
+                               hf_lustre_obd_connect_data_ocd_maxmodrpcs);
 
-  offset=lustre_dissect_element_obd_connect_data_padding2(tvb, offset, pinfo, tree);
+       if (old_offset+data_len > offset) {
+               proto_tree_add_item(tree, hf_lustre_extra_padding,
+                       tvb, offset, (old_offset+data_len)-offset, TRUE);
+               offset = old_offset+data_len;
+       }
 
+       proto_item_set_len(item, offset-old_offset);
 
-  proto_item_set_len(item, offset-old_offset);
-
-  return offset;
+       return offset;
 }
 
 
@@ -5634,7 +5789,6 @@ lustre_dissect_element_ldlm_request_lock_desc(tvbuff_t *tvb _U_, int offset _U_,
 static int
 lustre_dissect_element_ldlm_request_lock_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  /*if (check_col(pinfo->cinfo, COL_INFO)) */
   /*    col_append_fstr(pinfo->cinfo, COL_INFO, " ldlm cookie : %" G_GINT64_MODIFIER "u", tvb_get_letoh64(tvb,offset) );*/
 
   offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_ldlm_request_lock_handle);
@@ -5705,7 +5859,6 @@ lustre_dissect_element_ldlm_reply_lock_desc(tvbuff_t *tvb _U_, int offset _U_, p
 static int
 lustre_dissect_element_ldlm_reply_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  /*if (check_col(pinfo->cinfo, COL_INFO)) */
   /*        col_append_fstr(pinfo->cinfo, COL_INFO, " ldlm cookie : %" G_GINT64_MODIFIER "u", tvb_get_letoh64(tvb,offset) );*/
 
   offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_ldlm_reply_lock_handle);
@@ -5825,41 +5978,57 @@ lustre_dissect_struct_mgs_send_param(tvbuff_t *tvb _U_, int offset _U_, packet_i
 int
 lustre_dissect_element_mgs_config_body_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
 {
-    int string_len = 64;
-    proto_tree_add_item(parent_tree, hf_index, tvb, offset, string_len, TRUE);
-    display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO, " name : %s",
-                     (const gchar *) tvb_get_string(tvb,offset,string_len) );
-    offset+=string_len;
+       int string_len = 64;
+       proto_tree_add_item(parent_tree, hf_index, tvb,
+                           offset, string_len, TRUE);
+#ifdef WIRESHARK_COMPAT
+       display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO, " name : %s",
+                         (const gchar *)tvb_get_string(tvb, offset,
+                                                       string_len));
+#else
+       display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO, " name : %s",
+                         (const gchar *)tvb_get_string_enc(wmem_packet_scope(),
+                                                           tvb, offset,
+                                                           string_len,
+                                                           ENC_ASCII));
+#endif
+       offset += string_len;
 
-    return offset;
+       return offset;
 }
 
 int
 lustre_dissect_struct_mgs_config_body(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
 {
-  proto_item *item = NULL;
-  proto_tree *tree = NULL;
-  int old_offset;
+       proto_item *item = NULL;
+       proto_tree *tree = NULL;
+       int old_offset;
 
+       old_offset = offset;
 
-  old_offset=offset;
+       if (parent_tree) {
+               item = proto_tree_add_item(parent_tree, hf_index, tvb,
+                                          offset, -1, TRUE);
+               tree = proto_item_add_subtree(item, ett_lustre_mgs_config_body);
+       }
 
-  if (parent_tree) {
-    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-    tree = proto_item_add_subtree(item, ett_lustre_mgs_config_body);
-  }
-
-  offset=lustre_dissect_element_mgs_config_body_name(tvb, offset, pinfo, tree, hf_lustre_mgs_config_body_name);
+       offset = lustre_dissect_element_mgs_config_body_name(tvb, offset, pinfo,
+                       tree, hf_lustre_mgs_config_body_name);
 
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mgs_config_body_offset);
-  offset=dissect_uint16(tvb, offset, pinfo, tree, hf_lustre_mgs_config_body_type);
-  offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_mgs_config_body_reserved);
-  offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_mgs_config_body_bits);
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mgs_config_body_units);
+       offset = dissect_uint64(tvb, offset, pinfo, tree,
+                               hf_lustre_mgs_config_body_offset);
+       offset = dissect_uint16(tvb, offset, pinfo, tree,
+                               hf_lustre_mgs_config_body_type);
+       offset = dissect_uint8(tvb, offset, pinfo, tree,
+                              hf_lustre_mgs_config_body_reserved);
+       offset = dissect_uint8(tvb, offset, pinfo, tree,
+                              hf_lustre_mgs_config_body_bits);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                               hf_lustre_mgs_config_body_units);
 
-  proto_item_set_len(item, offset-old_offset);
+       proto_item_set_len(item, offset-old_offset);
 
-  return offset;
+       return offset;
 }
 
 /* IDL: struct mgs_config_res {
@@ -7135,8 +7304,6 @@ lustre_dissect_struct_llog_log_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_inf
   proto_tree *tree = NULL;
   int old_offset;
 
-
-
   old_offset=offset;
 
   if (parent_tree) {
@@ -7166,7 +7333,6 @@ lustre_dissect_struct_llog_log_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 
   offset=lustre_dissect_element_llog_log_hdr_llh_tail(tvb, offset, pinfo, tree);
 
-
   proto_item_set_len(item, offset-old_offset);
 
   return offset;
@@ -8228,6 +8394,288 @@ lustre_dissect_struct_acl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
   return offset;
 }
 
+/* struct close_data { */
+/*     struct lustre_handle    cd_handle; */
+/*     struct lu_fid           cd_fid; */
+/*     __u64                   cd_data_version; */
+/*     __u64                   cd_reserved[8]; */
+/* }; */
+static int
+lustre_dissect_struct_close_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
+{
+  proto_item *item = NULL;
+  proto_tree *tree = NULL;
+  int old_offset;
+  int data_len;
+
+  old_offset=offset;
+
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
+  if (data_len == 0)
+    return offset;
+
+  if (parent_tree) {
+    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_close_data);
+  }
+
+  offset=lustre_dissect_element_handle_cookie(tvb,offset,pinfo,tree);
+  offset=lustre_dissect_struct_lu_fid(tvb,offset,pinfo,tree,hf_lustre_close_fid);
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_close_data_ver);
+  offset=lustre_dissect_struct_element_data(tvb,offset,pinfo,tree,hf_lustre_close_reserved,8*sizeof(guint64));
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+
+  return offset;
+}
+
+static int
+lustre_dissect_element_mds_getinfo_vallen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_, guint32 buf_num)
+{
+  int data_len;
+
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
+  if (data_len == 0)
+    return offset;
+
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_index);
+
+  offset=add_extra_padding(tvb,offset,pinfo,tree);
+
+  return offset;
+}
+
+
+/* ------------------------------------------------------------------------- *
+ * HSM Dissection
+ *
+ * struct hsm_request {
+ * __u32 hr_action;    /\* enum hsm_user_action *\/
+ * __u32 hr_archive_id;        /\* archive id, used only with HUA_ARCHIVE *\/
+ * __u64 hr_flags;             /\* request flags *\/
+ * __u32 hr_itemcount; /\* item count in hur_user_item vector *\/
+ * __u32 hr_data_len;
+ */
+
+int
+lustre_dissect_element_hsm_req_action(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_)
+{
+  offset=dissect_uint32(tvb,offset,pinfo,parent_tree,hf_lustre_hsm_req_action);
+  return offset;
+}
+
+int
+lustre_dissect_element_hsm_req_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_)
+{
+  /* TODO - pick apart request flags - HSM_FORCE_ACTION, HSM_GHOST_COPY */
+  offset=dissect_uint64(tvb,offset,pinfo,parent_tree,hf_lustre_hsm_req_flags);
+  return offset;
+}
+
+static int
+lustre_dissect_struct_hsm_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                 proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
+{
+  proto_item *item = NULL;
+  proto_tree *tree = NULL;
+  int old_offset;
+  int data_len;
+  guint32 action;
+
+  old_offset=offset;
+
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
+  if (data_len == 0)
+    return offset;
+
+  if (parent_tree) {
+    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_hsm_request);
+  }
+
+  action=tvb_get_letohl(tvb,offset);
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(action, lustre_hsm_user_action_t_vals, "Unknown cr_opc"));
+
+  offset=lustre_dissect_element_hsm_req_action(tvb,offset,pinfo,tree);
+
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_hsm_req_archive_id);
+
+  offset=lustre_dissect_element_hsm_req_flags(tvb,offset,pinfo,tree);
+
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_hsm_req_itemcount);
+
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_hsm_req_data_len);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+  return offset;
+}
+
+/* struct hsm_extent { */
+/*     __u64 offset; */
+/*     __u64 length; */
+/* } */
+static int
+lustre_dissect_struct_hsm_extent(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                   proto_tree *parent_tree _U_, int hf_index _U_)
+{
+  proto_item *item = NULL;
+  proto_tree *tree = NULL;
+  int old_offset;
+
+  old_offset=offset;
+
+  if (parent_tree) {
+    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_hsm_extent);
+  }
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_hsm_extent_offset);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_hsm_extent_length);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+  return offset;
+}
+
+/* struct hsm_user_item { */
+/*        lustre_fid        hui_fid; */
+/*        struct hsm_extent hui_extent; */
+/* } __attribute__((packed)); */
+static int
+lustre_dissect_struct_hsm_user_item(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                   proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
+{
+  proto_item *item = NULL;
+  proto_tree *tree = NULL;
+  int old_offset;
+  int data_len;
+
+  old_offset=offset;
+
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
+  if (data_len == 0)
+    return offset;
+
+  if (parent_tree) {
+    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_hsm_user_item);
+  }
+
+  offset=lustre_dissect_struct_lu_fid(tvb,offset,pinfo,tree,hf_lustre_hsm_user_item_fid);
+
+  offset=lustre_dissect_struct_hsm_extent(tvb,offset,pinfo,tree,hf_lustre_hsm_user_item_extent);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+  return offset;
+}
+
+/* struct hsm_progress_kernel { */
+/*     lustre_fid              hpk_fid; */
+/*     __u64                   hpk_cookie; */
+/*     struct hsm_extent       hpk_extent; */
+/*     __u16                   hpk_flags; */
+/*     __u16                   hpk_errval; */
+/*     __u32                   hpk_padding1; */
+/*     __u64                   hpk_data_version; */
+/*     __u64                   hpk_padding2; */
+/* } __attribute__((packed)); */
+static int
+lustre_dissect_struct_hsm_progress(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                 proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
+{
+  proto_item *item = NULL;
+  proto_tree *tree = NULL;
+  int old_offset;
+  int data_len;
+
+  old_offset=offset;
+
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
+  if (data_len == 0)
+    return offset;
+
+  if (parent_tree) {
+    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_hsm_progress);
+  }
+
+  offset=lustre_dissect_struct_lu_fid(tvb,offset,pinfo,tree,hf_lustre_hsm_prog_fid);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_hsm_prog_cookie);
+
+  offset=lustre_dissect_struct_hsm_extent(tvb,offset,pinfo,tree,hf_lustre_hsm_prog_extent);
+
+  offset=dissect_uint16(tvb,offset,pinfo,tree,hf_lustre_hsm_prog_flags);
+
+  offset=dissect_uint16(tvb,offset,pinfo,tree,hf_lustre_hsm_prog_errval);
+
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_extra_padding);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_hsm_prog_data_ver);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_extra_padding);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+  return offset;
+}
+
+static int
+lustre_dissect_struct_element_states(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                    proto_tree *parent_tree _U_, int hf_index _U_)
+{
+  offset=dissect_uint32(tvb,offset,pinfo,parent_tree,hf_index);
+  return offset;
+}
+
+/* struct hsm_user_state { */
+/*     ** Current HSM states, from enum hsm_states. */
+/*     __u32                   hus_states; */
+/*     __u32                   hus_archive_id; */
+/*     **  The current undergoing action, if there is one */
+/*     __u32                   hus_in_progress_state; */
+/*     __u32                   hus_in_progress_action; */
+/*     struct hsm_extent       hus_in_progress_location; */
+/*     char                    hus_extended_info[]; */
+/* }; */
+static int
+lustre_dissect_struct_hsm_user_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                    proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
+{
+  proto_item *item = NULL;
+  proto_tree *tree = NULL;
+  int old_offset;
+  int data_len;
+
+  old_offset=offset;
+
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
+  if (data_len == 0)
+    return offset;
+
+  if (parent_tree) {
+    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_hsm_user_state);
+  }
+
+  offset=lustre_dissect_struct_element_states(tvb,offset,pinfo,tree,hf_lustre_hsm_us_states);
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_hsm_us_archive_id);
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_hsm_us_in_prog_state);
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_hsm_us_in_prog_action);
+  offset=lustre_dissect_struct_hsm_extent(tvb,offset,pinfo,tree,hf_lustre_hsm_us_in_prog_location);
+  offset=lustre_dissect_struct_element_data(tvb,offset,pinfo,tree,hf_lustre_hsm_us_ext_info,
+                                           (data_len-(offset-old_offset)));
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+  return offset;
+}
+
 
 /* ------------------------------------------------------------------------- */
 /* dissect string .
@@ -8241,6 +8689,44 @@ lustre_dissect_struct_acl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
  * determine the string length), must respect : 0<bufnum<=bufmax_in_paquet
  */
 static int
+lustre_dissect_element_filename (tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
+{
+       proto_item *item = NULL;
+       int old_offset;
+       guint32 string_len;
+
+       old_offset = offset;
+
+       string_len = LUSTRE_BUFFER_LEN(buf_num);
+       if (string_len == 0)
+               return offset;
+
+       proto_tree_add_item(parent_tree, hf_index, tvb,
+                           offset, string_len, TRUE);
+       if (string_len > 1) {
+#ifdef WIRESHARK_COMPAT
+               display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO,
+                                 " filename : %s",
+                                 (const gchar *)tvb_get_string(tvb, offset,
+                                                               string_len));
+#else
+               display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO,
+                                 " filename : %s",
+                                 (const gchar *)tvb_get_string_enc(wmem_packet_scope(),
+                                                                   tvb, offset,
+                                                                   string_len,
+                                                                   ENC_ASCII));
+#endif
+       }
+
+       offset += string_len;
+       proto_item_set_len(item, offset-old_offset);
+       offset = add_extra_padding(tvb, offset, pinfo, parent_tree);
+
+       return offset;
+}
+
+static int
 lustre_dissect_element_string (tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
 {
   proto_item *item = NULL;
@@ -8249,24 +8735,11 @@ lustre_dissect_element_string (tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 
   old_offset=offset;
 
-  /* if (parent_tree) {
-   *   item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-   *   tree = proto_item_add_subtree(item, ett_lustre);
-   * }
-   */
-
   string_len = LUSTRE_BUFFER_LEN(buf_num);
   if(string_len == 0)
     return offset;
 
-  /*    g_print("buf_num:%d (max:%d) BUFLEN_OFF:%#x strlen:%d\n",
-       buf_num, LUSTRE_BUFCOUNT,
-       LUSTRE_BUFLEN_OFF, string_len);*/
-
   proto_tree_add_item(parent_tree, hf_index, tvb, offset, string_len, TRUE);
-  if(string_len>1)
-    display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO, " filename : %s",
-                     (const gchar *) tvb_get_string(tvb,offset,string_len) );
 
   offset+=string_len;
   proto_item_set_len(item, offset-old_offset);
@@ -8274,7 +8747,6 @@ lustre_dissect_element_string (tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 
   return offset;
 }
-
 /* ------------------------------------------------------------------------- */
 
 
@@ -8310,8 +8782,8 @@ static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *
       /* [rec_create][filename][tgt.. Ã  0 pour l'instant][ldlm_request] */
       offset=lustre_dissect_struct_mdt_rec_create(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_create);
       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+2);
-      /* REINT_CREATE_SLAVE / SYM */
+      offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+2);
+      /* REINT_CREATE_SLAVE / SYM / RMT_ACL */
       if (LUSTRE_BUFCOUNT > 4) {
        /* for CREATE_SYM this is actually name of target - encoded in mdt_rec_create.cr_mode */
        offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+3);
@@ -8324,7 +8796,7 @@ static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *
       offset=lustre_dissect_struct_mdt_rec_link(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_link);
       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+2);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_old_name, LUSTRE_REQ_REC_OFF+3);
+      offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_old_name, LUSTRE_REQ_REC_OFF+3);
       if (LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF+4) > 0)
       offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
       break;
@@ -8337,7 +8809,7 @@ static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *
         offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl);
 
       } else {
-        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+2);
+        offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+2);
         offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
       }
       break;
@@ -8345,14 +8817,14 @@ static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *
       offset=lustre_dissect_struct_mdt_rec_rename(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_rename);
       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+2);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_old_name, LUSTRE_REQ_REC_OFF+3);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_new_name, LUSTRE_REQ_REC_OFF+4);
+      offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_old_name, LUSTRE_REQ_REC_OFF+3);
+      offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_new_name, LUSTRE_REQ_REC_OFF+4);
       if (LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF+5) > 0)
        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
       break;
     case  REINT_OPEN: /* [rec_create][filename][eadata] */
       offset=lustre_dissect_struct_mdt_rec_create(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_create);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+1);
+      offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+1);
       offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata, LUSTRE_REQ_REC_OFF+2);
       break;
     case  REINT_SETXATTR:
@@ -8384,12 +8856,16 @@ static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 static int
 lustre_dissect_generic_connect(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  /*TODO : add a cuuid and target uid */
-  offset=lustre_dissect_struct_obd_uuid(tvb, offset, pinfo, tree, hf_lustre_obd_uuid);
-  offset=lustre_dissect_struct_obd_uuid(tvb, offset, pinfo, tree, hf_lustre_obd_uuid);
-  offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_mdt_body_handle);
-  offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data);
-  return offset;
+       /*TODO : add a cuuid and target uid */
+       offset = lustre_dissect_struct_obd_uuid(tvb, offset, pinfo, tree,
+                                               hf_lustre_obd_uuid);
+       offset = lustre_dissect_struct_obd_uuid(tvb, offset, pinfo, tree,
+                                               hf_lustre_obd_uuid);
+       offset = lustre_dissect_struct_handle_cookie(tvb, offset, pinfo, tree,
+                                                    hf_lustre_mdt_body_handle);
+       offset = lustre_dissect_struct_obd_connect_data(tvb, offset, pinfo,
+                       tree, hf_lustre_obd_connect_data, 4);
+       return offset;
 }
 
 int
@@ -8480,15 +8956,16 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       break;
     case OST_GET_INFO:
       if(pb_type==PTL_RPC_MSG_REQUEST) /* [key] */
-        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_ost_key, LUSTRE_REQ_REC_OFF);
+        offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_ost_key, LUSTRE_REQ_REC_OFF);
       if (pb_type==PTL_RPC_MSG_REPLY)
-        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_ost_val, LUSTRE_REQ_REC_OFF); /* val */
+        offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_ost_val, LUSTRE_REQ_REC_OFF); /* val */
       break;
     case OST_CONNECT:
       if (pb_type==PTL_RPC_MSG_REQUEST) /* [targetuuid][clientuuid][lustre_handle][obd_connect_data] */
         offset=lustre_dissect_generic_connect(tvb,offset,pinfo,tree);
       if (pb_type==PTL_RPC_MSG_REPLY)
-        offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data);
+       offset = lustre_dissect_struct_obd_connect_data(tvb, offset, pinfo,
+                       tree, hf_lustre_obd_connect_data, 1);
       break;
     case OST_DISCONNECT: /* [nothing] */
       break;
@@ -8514,7 +8991,7 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     case OST_SET_INFO:
       if(pb_type==PTL_RPC_MSG_REQUEST)
       {
-        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_ost_key, LUSTRE_REQ_REC_OFF); /* key  */
+        offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_ost_key, LUSTRE_REQ_REC_OFF); /* key  */
         offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_ost_val, LUSTRE_REQ_REC_OFF+1); /* val */
       }
       /* if Key = "evict_by_nid" --> need to be process.. TODO */
@@ -8545,6 +9022,7 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 static int
 lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type)
 {
+  int i;
   switch (opc){
     case MDS_DISCONNECT:
       /*[nothing]*/
@@ -8617,6 +9095,7 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
          offset=lustre_dissect_struct_mdt_rec_setattr(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_setattr);
 
        offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+2);
+       offset=lustre_dissect_struct_close_data(tvb,offset,pinfo,tree, hf_lustre_close_data, LUSTRE_REQ_REC_OFF+3);
       }
       if(pb_type==PTL_RPC_MSG_REPLY)
       { /* [mdt_body][md][cookie][capa1][capa2] */
@@ -8685,8 +9164,40 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       if (pb_type==PTL_RPC_MSG_REQUEST) /* [targetuuid][clientuuid][lustre_handle][obd_connect_data] */
         offset=lustre_dissect_generic_connect(tvb,offset,pinfo,tree);
       if (pb_type==PTL_RPC_MSG_REPLY || pb_type == PTL_RPC_MSG_ERR) /*[obd_connect_data]*/
-        offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data);
+       offset = lustre_dissect_struct_obd_connect_data(tvb, offset, pinfo,
+                       tree, hf_lustre_obd_connect_data, 1);
+      break;
+    case MDS_HSM_REQUEST:
+      /* [mdt_body][hsm_request][array of hsm_user_item][generic_data] */
+      if (pb_type==PTL_RPC_MSG_REQUEST) {
+       offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body);
+       offset=lustre_dissect_struct_hsm_request(tvb, offset, pinfo, tree, hf_lustre_hsm_request, LUSTRE_REQ_REC_OFF+1);
+       for(i = LUSTRE_REQ_REC_OFF+2; i < LUSTRE_BUFCOUNT-1; ++i) {
+         offset=lustre_dissect_struct_hsm_user_item(tvb, offset, pinfo, tree, hf_lustre_hsm_user_item, i);
+       }
+       offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_generic_data, LUSTRE_REQ_REC_OFF+3);
+      }
       break;
+    case MDS_HSM_PROGRESS:
+      /* [mdt_body][hsm_progress] */
+      if (pb_type==PTL_RPC_MSG_REQUEST) {
+       offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body);
+       offset=lustre_dissect_struct_hsm_progress(tvb, offset, pinfo, tree, hf_lustre_hsm_request, LUSTRE_REQ_REC_OFF+1);
+      }
+      break;
+    case MDS_HSM_STATE_GET:
+      offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body);
+      if (pb_type==PTL_RPC_MSG_REPLY)
+       /* ...[hsm_user_state] */
+       offset=lustre_dissect_struct_hsm_user_state(tvb, offset, pinfo, tree, hf_lustre_hsm_state_get, LUSTRE_REQ_REC_OFF+1);
+      break;
+    case MDS_GET_INFO:
+      if (pb_type == PTL_RPC_MSG_REQUEST) {
+       offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_mdt_getinfo_key, LUSTRE_REQ_REC_OFF);
+       offset=lustre_dissect_element_mds_getinfo_vallen(tvb, offset, pinfo, tree, hf_lustre_mdt_getinfo_vallen, LUSTRE_REQ_REC_OFF+1);
+      }
+      if (pb_type == PTL_RPC_MSG_REPLY)
+       offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_mdt_getinfo_data, LUSTRE_REQ_REC_OFF);
     default:
       break;
   };
@@ -8792,6 +9303,13 @@ lustre_ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree, hf_lustre_ost_lvb);
     break;
 
+  case LDLM_SET_INFO:
+    /* ? [key-string][value-data] */
+    if(pb_type==PTL_RPC_MSG_REQUEST) {
+        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_ldlm_key, LUSTRE_REQ_REC_OFF); /* key  */
+       offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_ldlm_value, LUSTRE_REQ_REC_OFF+1); /* value  */
+    }
+    break;
   default :
     break;
   }
@@ -8804,9 +9322,10 @@ lustre_mgs_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
   switch (opc){
     case MGS_CONNECT :
       if (pb_type==PTL_RPC_MSG_REQUEST) /* [targetuuid][clientuuid][lustre_handle][obd_connect_data] */
-        offset=lustre_dissect_generic_connect(tvb,offset,pinfo,tree);
+       offset = lustre_dissect_generic_connect(tvb, offset, pinfo, tree);
       if (pb_type==PTL_RPC_MSG_REPLY) /*[obd_connect_data]*/
-        offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data);
+       offset = lustre_dissect_struct_obd_connect_data(tvb, offset, pinfo,
+                       tree, hf_lustre_obd_connect_data, 1);
       break;
     case MGS_DISCONNECT :
       /*[nothing]*/
@@ -8867,7 +9386,7 @@ lustre_llog_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       offset=lustre_dissect_struct_llogd_body(tvb, offset, pinfo, tree, hf_lustre_llogd_body);
       if(pb_type==PTL_RPC_MSG_REQUEST) /* [filename] */
         if (LUSTRE_BUFCOUNT>2)
-          offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_llogd_name,
+          offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_llogd_name,
                                               LUSTRE_REQ_REC_OFF+1);
       break;
     case LLOG_ORIGIN_HANDLE_NEXT_BLOCK :/* in handler.c */
@@ -8903,14 +9422,25 @@ lustre_llog_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
         /* [keyword][if keyword=config  [char*] else [nothing]] */
        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_llogd_keyword,
                                             LUSTRE_REQ_REC_OFF);
-       if (strcmp((const char *)tvb_get_string(tvb, LUSTRE_REQ_REC_OFF,
+       /* if (keyword == "config") */
+       if (strcmp(
+#ifdef WIRESHARK_COMPAT
+                  (const char *)tvb_get_string(tvb, LUSTRE_REQ_REC_OFF,
                                                tvb_get_letohl(tvb,
                                                               LUSTRE_BUFLEN_OFF + 4 *
                                                               LUSTRE_REQ_REC_OFF)),
+#else
+                  (const char *)tvb_get_string_enc(wmem_packet_scope(), tvb,
+                                                   LUSTRE_REQ_REC_OFF,
+                                                   tvb_get_letohl(tvb,
+                                                       LUSTRE_BUFLEN_OFF + 4 *
+                                                       LUSTRE_REQ_REC_OFF),
+                                                   ENC_ASCII),
+#endif
                   "config") == 0)
-         /* if(keyword == "config") */
-          offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_llogd_client,
-                                              LUSTRE_REQ_REC_OFF+1);
+               offset = lustre_dissect_element_string(tvb, offset, pinfo, tree,
+                                                      hf_lustre_llogd_client,
+                                                      LUSTRE_REQ_REC_OFF+1);
       }
       if(pb_type==PTL_RPC_MSG_REPLY)
         /*[buf] sizeof =  llog_chunk_size*/
@@ -8941,42 +9471,44 @@ static int
 lustre_seq_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
                          proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type)
 {
-  switch (opc) {
-  case SEQ_QUERY:
-    if (pb_type == PTL_RPC_MSG_REQUEST)
-      offset=lustre_dissect_struct_seq(tvb, offset, pinfo, tree, hf_lustre_seq_opc);
-    offset=lustre_dissect_struct_seq_range(tvb, offset, pinfo, tree);
-    break;
-
-  default:
-    g_print("error: SEQ Opcode: %d unknown\n", opc);
-    if (check_col(pinfo->cinfo, COL_INFO))
-      col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
-    break;
-  };
+       switch (opc) {
+       case SEQ_QUERY:
+               if (pb_type == PTL_RPC_MSG_REQUEST)
+                       offset = lustre_dissect_struct_seq(tvb, offset, pinfo,
+                                       tree, hf_lustre_seq_opc);
+               offset = lustre_dissect_struct_seq_range(tvb, offset,
+                                                        pinfo, tree);
+               break;
+
+       default:
+               g_print("error: SEQ Opcode: %d unknown\n", opc);
+               col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
+               break;
+       };
 
-  return offset;
+       return offset;
 }
 
 static int
 lustre_fld_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
                          proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type)
 {
-  switch (opc) {
-  case FLD_QUERY:
-    if (pb_type == PTL_RPC_MSG_REQUEST)
-      offset=lustre_dissect_struct_seq(tvb, offset, pinfo, tree, hf_lustre_fld_opc);
-    offset=lustre_dissect_struct_seq_range(tvb, offset, pinfo, tree);
-    break;
-
-  default:
-    g_print("error: FLD Opcode: %d unknown\n", opc);
-    if (check_col(pinfo->cinfo, COL_INFO))
-      col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
-    break;
-  };
+       switch (opc) {
+       case FLD_QUERY:
+               if (pb_type == PTL_RPC_MSG_REQUEST)
+                       offset = lustre_dissect_struct_seq(tvb, offset, pinfo,
+                                       tree, hf_lustre_fld_opc);
+               offset = lustre_dissect_struct_seq_range(tvb, offset,
+                                                        pinfo, tree);
+               break;
+
+       default:
+               g_print("error: FLD Opcode: %d unknown\n", opc);
+               col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
+               break;
+       };
 
-  return offset;
+       return offset;
 }
 
 
@@ -9043,7 +9575,7 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
     /* mdc_intent_open_pack(), d'où [opcode][mdc_rec_create][capa1][capa2][name][eada] */
     offset=lustre_dissect_struct_mdt_rec_create(tvb, offset, pinfo, tree,
                                                hf_lustre_mdt_rec_create);
-    offset=lustre_dissect_element_string(tvb, offset, pinfo, tree,
+    offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree,
                                         hf_lustre_reint_name,
                                         LUSTRE_DLM_INTENT_REC_OFF+3);
     offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
@@ -9057,7 +9589,7 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
                                                hf_lustre_mdt_rec_unlink);
     offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa,
                                      LUSTRE_DLM_INTENT_REC_OFF+1);
-    offset=lustre_dissect_element_string(tvb, offset, pinfo, tree,
+    offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree,
                                         hf_lustre_reint_name,
                                         LUSTRE_DLM_INTENT_REC_OFF+2);
   }
@@ -9066,7 +9598,7 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
     offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
     offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa,
                                      LUSTRE_DLM_INTENT_REC_OFF+1);
-    offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name,
+    offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_name,
                                         LUSTRE_DLM_INTENT_REC_OFF+2);
   }
 
@@ -9075,7 +9607,7 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
     offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body);
     offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa,
                                      LUSTRE_DLM_INTENT_REC_OFF+1);
-    offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name,
+    offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_name,
                                         LUSTRE_DLM_INTENT_REC_OFF+2);
   }
   return offset;
@@ -9103,13 +9635,8 @@ sanity_check(tvbuff_t *tvb, packet_info *pinfo, guint32 val_offset _U_)
                                                                             count in buflen
                                                                             */
 
-  if(val_offset!=somme_buflen){
-    /*g_print("somme_buflen=%d, val_offset = %d \n",somme_buflen,val_offset);*/
-    if (check_col(pinfo->cinfo, COL_INFO)) {
-      col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
-    }
-  }
-
+       if (val_offset != somme_buflen)
+               col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
 }
 
 
@@ -9736,12 +10263,10 @@ lustre_dissect_struct_msg_v2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 static void
 dissect_lustre(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
-  if (check_col(pinfo->cinfo, COL_PROTOCOL))
-    col_set_str(pinfo->cinfo, COL_PROTOCOL, "Lustre");
+       col_set_str(pinfo->cinfo, COL_PROTOCOL, "Lustre");
 
-  /*light display*/
-  if (check_col(pinfo->cinfo, COL_INFO))
-    col_set_str(pinfo->cinfo, COL_INFO, "");
+       /*light display*/
+       col_set_str(pinfo->cinfo, COL_INFO, "");
   /*    guint32 magic_number ; */
   /*    magic_number = tvb_get_letohl(tvb, LUSTRE_MAGIC_OFFSET);   */
   /*    switch (magic_number)*/
@@ -9904,7 +10429,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_setattr_sa_ctime,
       { "Sa Ctime", "lustre.mdt_rec_setattr.sa_ctime",FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_rec_setattr_sa_attr_flags,
-      { "Sa Attr Flags", "lustre.mdt_rec_setattr.sa_attr_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Sa Attr Flags", "lustre.mdt_rec_setattr.sa_attr_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setattr_sa_mode,
       { "Sa Mode", "lustre.mdt_rec_setattr.sa_mode", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setattr_sa_padding_2,
@@ -10163,7 +10688,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_setxattr_sx_size,
       { "Sx Size", "lustre.mdt_rec_setxattr.sx_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_flags,
-      { "Sx Flags", "lustre.mdt_rec_setxattr.sx_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Sx Flags", "lustre.mdt_rec_setxattr.sx_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_padding_8,
       { "Sx Padding 8", "lustre.mdt_rec_setxattr.sx_padding_8", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_padding_9,
@@ -10174,7 +10699,8 @@ void proto_register_dcerpc_lustre(void)
       { "Sx Padding 11", "lustre.mdt_rec_setxattr.sx_padding_11", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
 
     { &hf_lustre_lustre_handle_cookie,
-      { "Cookie", "lustre.lustre_handle.cookie", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+       { "Cookie", "lustre.lustre_handle.cookie", FT_UINT64, BASE_HEX,
+         NULL, 0, "", HFILL } },
     { &hf_lustre_ptlrpc_body_pb_last_committed,
       { "Pb Last Committed", "lustre.ptlrpc_body.pb_last_committed", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ptlrpc_body_pb_version,
@@ -10194,11 +10720,11 @@ void proto_register_dcerpc_lustre(void)
       { "Pb JobId", "lustre.ptlrpc_body.pb_jobid", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
 
     { &hf_lustre_lustre_msg_v1_lm_handle,
-      { "Lm Handle", "lustre.lustre_msg_v1.lm_handle", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
-    { &hf_lustre_ost_lvb_lvb_atime,
-      { "Lvb Atime", "lustre.ost_lvb.lvb_atime",FT_ABSOLUTE_TIME,
-                   ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
+       { "Lm Handle", "lustre.lustre_msg_v1.lm_handle", FT_NONE, BASE_NONE,
+         NULL, 0, "", HFILL } },
+       { &hf_lustre_ost_lvb_lvb_atime,
+         { "Lvb Atime", "lustre.ost_lvb.lvb_atime",
+           FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
     { &hf_lustre_ptlrpc_body_pb_timeout,
       { "Pb Timeout", "lustre.ptlrpc_body.pb_timeout", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_bavail,
@@ -10212,7 +10738,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_lustre_msg_v1_lm_last_xid,
       { "Lm Last Xid", "lustre.lustre_msg_v1.lm_last_xid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ll_fid_f_type,
-      { "F Type", "lustre.ll_fid.f_type", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "F Type", "lustre.ll_fid.f_type", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v2_lm_cksum,
       { "Lm Cksum", "lustre.lustre_msg_v2.lm_cksum", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v2_lm_buflens,
@@ -10226,7 +10752,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_lov_mds_md_v1_lmm_magic,
       { "Lmm Magic", "lustre.lov_mds_md_v1.lmm_magic", FT_UINT32, BASE_HEX, VALS(lustre_lov_magic) , 0, "", HFILL }},
     { &hf_lustre_ptlrpc_body_pb_op_flags,
-      { "Pb Op Flags", "lustre.ptlrpc_body.pb_op_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Pb Op Flags", "lustre.ptlrpc_body.pb_op_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ost_lvb_lvb_ctime,
       { "Lvb Ctime", "lustre.ost_lvb.lvb_ctime",FT_ABSOLUTE_TIME,
                    ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
@@ -10237,7 +10763,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_obd_connect_data_ocd_nllu,
       { "Ocd Nllu", "lustre.obd_connect_data.ocd_nllu", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ll_fid_generation,
-      { "Generation", "lustre.ll_fid.generation", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Generation", "lustre.ll_fid.generation", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ost_lvb_lvb_mtime,
       { "Lvb Mtime", "lustre.ost_lvb.lvb_mtime",FT_ABSOLUTE_TIME,
                    ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
@@ -10246,7 +10772,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_lustre_msg_v2_lm_padding_3,
       { "Lm Padding 3", "lustre.lustre_msg_v2.lm_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ptlrpc_body_pb_flags,
-      { "Pb Flags", "lustre.ptlrpc_body.pb_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Pb Flags", "lustre.ptlrpc_body.pb_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_spare4,
       { "Os Spare4", "lustre.obd_statfs.os_spare4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_connect_data_ocd_group,
@@ -10264,7 +10790,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_obd_statfs_os_spare5,
       { "Os Spare5", "lustre.obd_statfs.os_spare5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v2_lm_flags,
-      { "Lm Flags", "lustre.lustre_msg_v2.lm_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Lm Flags", "lustre.lustre_msg_v2.lm_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_ffree,
       { "Os Ffree", "lustre.obd_statfs.os_ffree", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_files,
@@ -10272,7 +10798,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_lov_mds_md_v1_lmm_stripe_count,
       { "Lmm Stripe Count", "lustre.lov_mds_md_v1.lmm_stripe_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v1_lm_flags,
-      { "Lm Flags", "lustre.lustre_msg_v1.lm_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Lm Flags", "lustre.lustre_msg_v1.lm_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v1_lm_last_committed,
       { "Lm Last Committed", "lustre.lustre_msg_v1.lm_last_committed", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_spare9,
@@ -10296,18 +10822,20 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_ptlrpc_body_pb_opc,
       { "Pb Opc", "lustre.ptlrpc_body.pb_opc", FT_UINT32, BASE_DEC, VALS(lustre_op_codes), 0, "", HFILL }},
     { &hf_lustre_obd_connect_data_ocd_connect_flags,
-      { "Ocd Connect Flags", "lustre.obd_connect_data.ocd_connect_flags", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+       { "Ocd Connect Flags", "lustre.obd_connect_data.ocd_connect_flags",
+         FT_UINT64 , BASE_HEX, NULL, 0, "", HFILL } },
     { &hf_lustre_lov_ost_data_v1_l_object_id,
       { "L Object Id", "lustre.lov_ost_data_v1.l_object_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lov_ost_data_v1_l_ost_gen,
       { "L Ost Gen", "lustre.lov_ost_data_v1.l_ost_gen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_bfree,
       { "Os Bfree", "lustre.obd_statfs.os_bfree", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_obd_connect_data_ocd_version,
-      { "Ocd Version", "lustre.obd_connect_data.ocd_version", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_lov_mds_md_v1_lmm_objects,
-      { "Lmm Objects", "lustre.lov_mds_md_v1.lmm_objects", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
+       { &hf_lustre_obd_connect_data_ocd_version,
+         { "Ocd Version", "lustre.obd_connect_data.ocd_version",
+           FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+       { &hf_lustre_lov_mds_md_v1_lmm_objects,
+         { "Lmm Objects", "lustre.lov_mds_md_v1.lmm_objects", FT_NONE,
+           BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_obd_statfs_os_namelen,
       { "Os Namelen", "lustre.obd_statfs.os_namelen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_blocks,
@@ -10331,7 +10859,23 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_obd_statfs_os_fsid,
       { "Os Fsid", "lustre.obd_statfs.os_fsid", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_connect_data_ocd_cksum_types,
-      { "Ocd Cksum Types", "lustre.obd_connect_data.ocd_cksum_types", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+       { "Ocd Cksum Types", "lustre.obd_connect_data.ocd_cksum_types",
+         FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+       { &hf_lustre_obd_connect_data_ocd_max_easize,
+         { "Ocd Max LOV EA Size", "lustre.obd_connect_data.ocd_max_easize",
+           FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+       { &hf_lustre_obd_connect_data_ocd_instance,
+         { "Ocd Instance", "lustre.obd_connect_data.ocd_instance",
+           FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+       { &hf_lustre_obd_connect_data_ocd_maxbytes,
+         { "Ocd Max Stripe Size (Bytes)",
+           "lustre.obd_connect_data.ocd_maxbytes",
+           FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+       { &hf_lustre_obd_connect_data_ocd_maxmodrpcs,
+         { "Ocd Max Parallel Modify RPCs",
+           "lustre.obd_connect_data.ocd_maxmodrpcs",
+           FT_UINT16, BASE_DEC, NULL, 0, "", HFILL } },
+
     { &hf_lustre_ost_lvb_lvb_size,
       { "Lvb Size", "lustre.ost_lvb.lvb_size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_type,
@@ -10356,19 +10900,15 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_ptlrpc_body_pb_status,
       { "Pb Status", "lustre.ptlrpc_body.pb_status", FT_INT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_niobuf_remote_flags,
-      { "Flags", "lustre.niobuf_remote.flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Flags", "lustre.niobuf_remote.flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ll_fid_id,
-      { "Id", "lustre.ll_fid.id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Id", "lustre.ll_fid.id", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ost_lvb_lvb_blocks,
       { "Lvb Blocks", "lustre.ost_lvb.lvb_blocks", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v2_lm_padding_2,
       { "Lm Padding 2", "lustre.lustre_msg_v2.lm_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_obd_connect_data_padding1,
-      { "Padding1", "lustre.obd_connect_data.padding1", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lov_ost_data_v1_l_ost_idx,
       { "L Ost Idx", "lustre.lov_ost_data_v1.l_ost_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_obd_connect_data_padding2,
-      { "Padding2", "lustre.obd_connect_data.padding2", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_ioobj_ioo_seq,
       { "Ioo Gr", "lustre.obd_ioobj.ioo_seq", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_niobuf_remote_offset,
@@ -10434,7 +10974,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_llog_size_change_rec_lsc_io_epoch,
       { "Lsc Io Epoch", "lustre.llog_size_change_rec.lsc_io_epoch", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mgs_target_info_mti_flags,
-      { "Mti Flags", "lustre.mgs_target_info.mti_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Mti Flags", "lustre.mgs_target_info.mti_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_reply_lock_policy_res1,
       { "Lock Policy Res1", "lustre.ldlm_reply.lock_policy_res1", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llogd_body_lgd_len,
@@ -10477,9 +11017,9 @@ void proto_register_dcerpc_lustre(void)
 
 
     { &hf_lustre_obdo_o_valid,
-      { "O Valid", "lustre.obdo.o_valid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+      { "O Valid", "lustre.obdo.o_valid", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_reply_lock_flags,
-      { "Lock Flags", "lustre.ldlm_reply.lock_flags", FT_UINT32,BASE_HEX, NULL, 0, "", HFILL }},
+      { "Lock Flags", "lustre.ldlm_reply.lock_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
 
 #define  WSHARK_INIT_DATA
 #include "lustre_dlm_flags_wshark.c"
@@ -10611,7 +11151,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_qunit_data_padding,
       { "Padding", "lustre.qunit_data.padding", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_quota_adjust_qunit_qaq_flags,
-      { "Qaq Flags", "lustre.quota_adjust_qunit.qaq_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Qaq Flags", "lustre.quota_adjust_qunit.qaq_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_lock_desc_l_granted_mode,
       { "L Granted Mode", "lustre.ldlm_lock_desc.l_granted_mode", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_mode_vals), 0, "", HFILL }},
     { &hf_lustre_obdo_o_seq,
@@ -10648,13 +11188,19 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_llog_logid_rec_padding3,
       { "Padding3", "lustre.llog_logid_rec.padding3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_log_hdr_llh_flags,
-      { "Llh Flags", "lustre.llog_log_hdr.llh_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    {&hf_lustre_llog_hdr_llh_flag_zap_when_empty,
-      {"LLOG_F_ZAP_WHEN_EMPTY","lustre.lustre.llog_log_hdr.llh_flag_zap",FT_BOOLEAN,32,TFS(&lnet_flags_set_truth),LLOG_F_ZAP_WHEN_EMPTY,"",HFILL } },
-    {&hf_lustre_llog_hdr_llh_flag_is_cat,
-      {"LLOG_F_IS_CAT","lustre.lustre.llog_log_hdr.llh_flag_cat",FT_BOOLEAN,32,TFS(&lnet_flags_set_truth),LLOG_F_IS_CAT,"",HFILL } },
-    {&hf_lustre_llog_hdr_llh_flag_is_play,
-      {"LOG_F_IS_PLAIN","lustre.lustre.llog_log_hdr.llh_flag_play",FT_BOOLEAN,32,TFS(&lnet_flags_set_truth),LLOG_F_IS_PLAIN,"",HFILL } },
+      { "Llh Flags", "lustre.llog_log_hdr.llh_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
+       { &hf_lustre_llog_hdr_llh_flag_zap_when_empty,
+         {"LLOG_F_ZAP_WHEN_EMPTY", "lustre.lustre.llog_log_hdr.llh_flag_zap",
+          FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth),
+          LLOG_F_ZAP_WHEN_EMPTY, "", HFILL } },
+       { &hf_lustre_llog_hdr_llh_flag_is_cat,
+         { "LLOG_F_IS_CAT", "lustre.lustre.llog_log_hdr.llh_flag_cat",
+           FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth),
+           LLOG_F_IS_CAT, "", HFILL } },
+       { &hf_lustre_llog_hdr_llh_flag_is_play,
+         { "LLOG_F_IS_PLAIN", "lustre.lustre.llog_log_hdr.llh_flag_play",
+           FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth),
+           LLOG_F_IS_PLAIN, "", HFILL } },
 
     { &hf_lustre_llog_setattr_rec_lsr_oid,
       { "Lsr Oid", "lustre.llog_setattr_rec.lsr_oid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
@@ -10702,14 +11248,14 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_llog_unlink_rec_lur_ogen,
       { "Lur Ogen", "lustre.llog_unlink_rec.lur_ogen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_cfg_marker_cm_flags,
-      { "Cm Flags", "lustre.cfg_marker.cm_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Cm Flags", "lustre.cfg_marker.cm_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_obdo_o_padding_3,
       { "O Padding 3", "lustre.obdo.o_padding_3", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_request_lock_desc,
       { "Lock Desc", "lustre.ldlm_request.lock_desc", FT_NONE,
                    BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_obdo_o_flags,
-      { "O Flags", "lustre.obdo.o_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "O Flags", "lustre.obdo.o_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_mgs_target_info_mti_params,
       { "Mti Params", "lustre.mgs_target_info.mti_params", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_logid_lgl_ogen,
@@ -10759,7 +11305,7 @@ void proto_register_dcerpc_lustre(void)
       { "Lgr Hdr", "lustre.llog_gen_rec.lgr_hdr", FT_NONE,
                    BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_llogd_body_lgd_llh_flags,
-      { "Lgd Llh Flags", "lustre.llogd_body.lgd_llh_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Lgd Llh Flags", "lustre.llogd_body.lgd_llh_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_log_hdr_llh_cat_idx,
       { "Llh Cat Idx", "lustre.llog_log_hdr.llh_cat_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_log_hdr_llh_bitmap_offset,
@@ -10794,7 +11340,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_opnum,
       { "Operation", "lustre.opnum", FT_UINT16, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_qunit_data_old2_qd_flags,
-      { "Qd Flags", "lustre.qunit_data_old2.qd_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Qd Flags", "lustre.qunit_data_old2.qd_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_flock_start,
       { "Start", "lustre.ldlm_flock.start", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_quota_adjust_qunit_qaq_bunit_sz,
@@ -10803,9 +11349,9 @@ void proto_register_dcerpc_lustre(void)
       { "Pid", "lustre.ldlm_flock.pid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lov_desc_ld_default_stripe_size,
       { "Ld Default Stripe Size", "lustre.lov_desc.ld_default_stripe_size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_log_hdr_llh_tgtuuid,
-      { "Llh Tgtuuid", "lustre.llog_log_hdr.llh_tgtuuid", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
+       { &hf_lustre_llog_log_hdr_llh_tgtuuid,
+         { "Llh Tgtuuid", "lustre.llog_log_hdr.llh_tgtuuid",
+           FT_STRING, BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_cfg_marker_cm_step,
       { "Cm Step", "lustre.cfg_marker.cm_step", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mgs_send_param_mgs_param,
@@ -10940,7 +11486,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_obd_dqblk_dqb_bsoftlimit,
       { "Dqb Bsoftlimit", "lustre.obd_dqblk.dqb_bsoftlimit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_dqinfo_dqi_flags,
-      { "Dqi Flags", "lustre.obd_dqinfo.dqi_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Dqi Flags", "lustre.obd_dqinfo.dqi_flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_dqblk_dqb_btime,
       { "Dqb Btime", "lustre.obd_dqblk.dqb_btime", FT_ABSOLUTE_TIME,
                    ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
@@ -10983,7 +11529,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_ioepoch_ioepoch,
       { "ioepoch", "lustre.mdt_ioepoch.ioepoch", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_ioepoch_flags,
-      { "flags", "lustre.mdt_ioepoch.flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+      { "flags", "lustre.mdt_ioepoch.flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_ioepoch_padding,
       { "Padding", "lustre.mdt_ioepoch.padding", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
 
@@ -11012,6 +11558,91 @@ void proto_register_dcerpc_lustre(void)
     /* ACL */
     { &hf_lustre_acl,
       { "ACL", "lustre.acl", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    /* MDT Getinfo */
+    { &hf_lustre_mdt_getinfo_key,
+      { "MDT getinfo key", "lustre.mdt_getinfo.key", FT_STRING, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_mdt_getinfo_vallen,
+      { "MDT getinfo Val Len", "lustre.mdt_getinfo.vallen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_mdt_getinfo_data,
+      { "MDT getinfo data", "lustre.mdt_getinfo.data", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    /* Close Data */
+    { &hf_lustre_close_data,
+      { "MDT Close", "lustre.mdt_close", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_close_fid,
+      { "Close FID", "lustre.mdt_close.fid", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_close_data_ver,
+      { "Close data version", "lustre.mdt_close.data_ver", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_close_reserved,
+      { "Close Reserved Space", "lustre.mdt_close.reserved", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    /* LDLM SET INFO */
+    { &hf_lustre_ldlm_key,
+      { "LDLM Set Info Key", "lustre.ldlm.key", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_ldlm_value,
+      { "LDLM Set Info Value", "lustre.ldlm.value", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    /* HSM Request */
+    { &hf_lustre_hsm_request,
+      { "HSM Request", "lustre.hsm_req", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_req_action,
+      { "HSM Req Action", "lustre.hsm_req.action", FT_UINT32, BASE_HEX, VALS(lustre_hsm_user_action_t_vals), 0, "", HFILL } },
+    { &hf_lustre_hsm_req_archive_id,
+      { "HSM Req Archive ID", "lustre.hsm_req.archive_id", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_req_flags,
+      { "HSM Req Flags", "lustre.hsm_req.flags", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_req_itemcount,
+      { "HSM Req Itemcount", "lustre.hsm_req.itemcount", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_req_data_len,
+      { "HSM Req Data Length", "lustre.hsm_req.data_len", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_hsm_user_item,
+      { "HSM User Item", "lustre.user_item", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_user_item_fid,
+      { "HSM User Item FID", "lustre.user_item.fid", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_user_item_extent,
+      { "HSM User Item Extent", "lustre.user_item.extent", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_hsm_extent,
+      { "HSM Extent", "lustre.hsm_extent", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_extent_offset,
+      { "HSM Extent Offset", "lustre.hsm_extent.offset", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_extent_length,
+      { "HSM Extent Length", "lustre.hsm_extent.len", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_hsm_progress,
+      { "HSM Progress", "lustre.hsm_progress", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_prog_fid,
+      { "HSM Prog FID", "lustre.hsm_progress.fid", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_prog_cookie,
+      { "HSM Prog Cookie", "lustre.hsm_progress.cookie", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_prog_extent,
+      { "HSM Prog Extent", "lustre.hsm_progress.extent", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_prog_flags,
+      { "HSM Prog Flags", "lustre.hsm_progress.flags", FT_UINT16, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_prog_errval,
+      { "HSM Prog Error Val", "lustre.hsm_progress.errval", FT_UINT16, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_prog_data_ver,
+      { "HSM Prog Data Version", "lustre.hsm_progress.data_ver", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_hsm_state_get,
+      { "HSM State GET", "lustre.hsm_state_get", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_us_states,
+      { "States", "lustre.hsm_state_get.states", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_us_archive_id,
+      { "Archive ID", "lustre.hsm_state_get.archive_id", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_us_in_prog_state,
+      { "In Progress State", "lustre.hsm_state_get.in_prog.state", FT_UINT32, BASE_HEX, VALS(lustre_hsm_progress_state_t_vals), 0, "", HFILL } },
+    { &hf_lustre_hsm_us_in_prog_action,
+      { "In Progress Action", "lustre.hsm_state_get.in_prog.action", FT_UINT32, BASE_HEX, VALS(lustre_hsm_user_action_t_vals), 0, "", HFILL } },
+    { &hf_lustre_hsm_us_in_prog_location,
+      { "In Progress Extent", "lustre.hsm_state_get.in_prog.location", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_hsm_us_ext_info,
+      { "Extended Info", "lustre.hsm_state_get.ext_info", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_generic_data,
+      { "generic data", "lustre.generic_data", FT_NONE, BASE_NONE, NULL, 0, "", HFILL}},
   };
 
 
@@ -11085,8 +11716,14 @@ void proto_register_dcerpc_lustre(void)
     &ett_lustre_fld_range,
     &ett_lustre_mdt_ioepoch,
     &ett_lustre_capa,
+    &ett_lustre_close_data,
     &ett_lustre_acl,
     &ett_lustre_ladvise,
+    &ett_lustre_hsm_request,
+    &ett_lustre_hsm_user_item,
+    &ett_lustre_hsm_extent,
+    &ett_lustre_hsm_progress,
+    &ett_lustre_hsm_user_state,
        };
 
   proto_lustre = proto_register_protocol("Lustre", "lustre", "lustre");
diff --git a/lustre/contrib/wireshark/wireshark-compat.h b/lustre/contrib/wireshark/wireshark-compat.h
new file mode 100644 (file)
index 0000000..4d5e970
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ *
+ * Copyright (c) 2012, 2013, Intel Corporation.
+ */
+
+#include <wireshark/config.h>
+
+#define WIRESHARK_VERSION                      \
+       ((VERSION_MAJOR * 1000 * 1000) +        \
+        (VERSION_MINOR * 1000) +               \
+        (VERSION_MICRO))
+
+/* Wireshark 1.12 brings API change */
+#if WIRESHARK_VERSION < 1012000
+# define WIRESHARK_COMPAT
+#endif
old mode 100644 (file)
new mode 100755 (executable)