Whamcloud - gitweb
LU-10347 tests: suspend the copytool in sanity-hsm/test_252
[fs/lustre-release.git] / lustre / contrib / wireshark / packet-lustre.c
index 686c433..0d1f578 100644 (file)
@@ -8,6 +8,8 @@
  * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1999 Gerald Combs
  *
+ * C-Syle: 2 space indents
+ *
  * 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
@@ -22,7 +24,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2017, Intel Corporation.
  */
 
 #ifdef HAVE_CONFIG_H
 #include <string.h>
 #include <epan/packet.h>
 
+#include "wireshark-compat.h"
+
 #include <epan/dissectors/packet-windows-common.h>
+#include "lustre_dlm_flags.h"
 
 const true_false_string lnet_flags_set_truth = { "Set", "Unset" };
 
@@ -53,6 +58,11 @@ const true_false_string lnet_flags_set_truth = { "Set", "Unset" };
  */
 #define LUSTRE_BUFLEN_OFF ((tvb_get_letohl(tvb, LUSTRE_MAGIC_OFFSET)== LUSTRE_MSG_MAGIC_V2) ? 32 : 60)
 
+/* LUSTRE_BUFFER_LEN(buffnum) */
+#define LUSTRE_BUFFER_LEN(_n) (LUSTRE_BUFCOUNT <= (_n) ? 0 \
+                              : tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF+\
+                                               sizeof(guint32)*(_n)))
+
 #define LUSTRE_REQ_REC_OFF                     1 /* normal request record offset */
 #define LUSTRE_REPLY_REC_OFF                   1 /* normal reply record offset */
 
@@ -74,9 +84,11 @@ const true_false_string lnet_flags_set_truth = { "Set", "Unset" };
 
 
 
-#define LOV_MAGIC_V1      0x0BD10BD0
-#define LOV_MAGIC         LOV_MAGIC_V1
-#define LOV_MAGIC_JOIN_V1 0x0BD20BD0
+#define LOV_MAGIC_V1    0x0BD10BD0
+#define LOV_MAGIC_V3   0x0BD30BD0
+
+/* defined in lustre/include/lustre/lustre_user.h */
+#define LOV_MAXPOOLNAME 15
 
 /* defined in lustre/include/lustre/lustre_idl.h */
 typedef enum {
@@ -173,6 +185,7 @@ typedef enum {
   OST_QUOTACHECK = 18,
   OST_QUOTACTL   = 19,
   OST_QUOTA_ADJUST_QUNIT = 20,
+  OST_LADVISE = 21,
   OST_LAST_OPC
 } ost_cmd_t ;
 
@@ -185,47 +198,82 @@ typedef enum {
 } obd_cmd_t;
 #define OBD_FIRST_OPC OBD_PING
 
+/* must be coherent with same declaration
+ * in lustre/include/lustre/lustre_idl.h
+ */
 typedef enum {
-  MDS_GETATTR      = 33,
-  MDS_GETATTR_NAME = 34,
-  MDS_CLOSE        = 35,
-  MDS_REINT        = 36,
-  MDS_READPAGE     = 37,
-  MDS_CONNECT      = 38,
-  MDS_DISCONNECT   = 39,
-  MDS_GETSTATUS    = 40,
-  MDS_STATFS       = 41,
-  MDS_PIN          = 42,
-  MDS_UNPIN        = 43,
-  MDS_SYNC         = 44,
-  MDS_DONE_WRITING = 45,
-  MDS_SET_INFO     = 46,
-  MDS_QUOTACHECK   = 47,
-  MDS_QUOTACTL     = 48,
-  MDS_GETXATTR     = 49,
-  MDS_SETXATTR     = 50,
-  MDS_WRITEPAGE    = 51,
-  MDS_IS_SUBDIR    = 52,
-  MDS_GET_INFO     = 53,
-  MDS_LAST_OPC
+       MDS_GETATTR             = 33,
+       MDS_GETATTR_NAME        = 34,
+       MDS_CLOSE               = 35,
+       MDS_REINT               = 36,
+       MDS_READPAGE            = 37,
+       MDS_CONNECT             = 38,
+       MDS_DISCONNECT          = 39,
+       MDS_GET_ROOT            = 40,
+       MDS_STATFS              = 41,
+       MDS_PIN                 = 42,
+       MDS_UNPIN               = 43,
+       MDS_SYNC                = 44,
+       MDS_DONE_WRITING        = 45,
+       MDS_SET_INFO            = 46,
+       MDS_QUOTACHECK          = 47,
+       MDS_QUOTACTL            = 48,
+       MDS_GETXATTR            = 49,
+       MDS_SETXATTR            = 50,
+       MDS_WRITEPAGE           = 51,
+       MDS_IS_SUBDIR           = 52,
+       MDS_GET_INFO            = 53,
+       MDS_HSM_STATE_GET       = 54,
+       MDS_HSM_STATE_SET       = 55,
+       MDS_HSM_ACTION          = 56,
+       MDS_HSM_PROGRESS        = 57,
+       MDS_HSM_REQUEST         = 58,
+       MDS_HSM_CT_REGISTER     = 59,
+       MDS_HSM_CT_UNREGISTER   = 60,
+       MDS_SWAP_LAYOUTS        = 61,
+       MDS_LAST_OPC
 } mds_cmd_t;
+#define MDS_FIRST_OPC MDS_GETATTR
+
+enum {
+       LAYOUT_INTENT_ACCESS    = 0,
+       LAYOUT_INTENT_READ      = 1,
+       LAYOUT_INTENT_WRITE     = 2,
+       LAYOUT_INTENT_GLIMPSE   = 3,
+       LAYOUT_INTENT_TRUNC     = 4,
+       LAYOUT_INTENT_RELEASE   = 5,
+       LAYOUT_INTENT_RESTORE   = 6
+};
 
+static const value_string lustre_layout_intent_opc_values[] = {
+       { LAYOUT_INTENT_ACCESS,         "ACCESS"},
+       { LAYOUT_INTENT_READ,           "READ"},
+       { LAYOUT_INTENT_WRITE,          "WRITE"},
+       { LAYOUT_INTENT_GLIMPSE,        "GLIMPSE"},
+       { LAYOUT_INTENT_TRUNC,          "TRUNC"},
+       { LAYOUT_INTENT_RELEASE,        "RELEASE"},
+       { LAYOUT_INTENT_RESTORE,        "RESTORE"},
+       { 0, NULL },
+};
+
+/* From lustre/include/obd.h */
 #define IT_OPEN     0x0001
 #define IT_CREAT    0x0002
 #define IT_READDIR  0x0004
 #define IT_GETATTR  0x0008
 #define IT_LOOKUP   0x0010
 #define IT_UNLINK   0x0020
-#define IT_GETXATTR 0x0040
-#define IT_EXEC     0x0080
-#define IT_PIN      0x0100
-
-
-
-#define MDS_FIRST_OPC MDS_GETATTR
-#define LDLM_FIRST_OPC LDLM_ENQUEUE
-
-typedef enum {
+#define IT_TRUNC       0x0040
+#define IT_GETXATTR    0x0080
+#define IT_EXEC                0x0100
+#define IT_PIN         0x0200
+#define IT_LAYOUT      0x0400
+#define IT_QUOTA_DQACQ 0x0800
+#define IT_QUOTA_CONN  0x1000
+#define IT_SETXATTR    0x2000
+
+/* lustre/include/uapi/linux/lustre/lustre_idl.h */
+enum mds_reint_op {
   REINT_SETATTR  = 1,
   REINT_CREATE   = 2,
   REINT_LINK     = 3,
@@ -233,54 +281,34 @@ typedef enum {
   REINT_RENAME   = 5,
   REINT_OPEN     = 6,
   REINT_SETXATTR = 7,
-  //      REINT_CLOSE    = 8,
-  //      REINT_WRITE    = 9,
+  REINT_RMENTRY  = 8,
+  REINT_MIGRATE  = 9,
   REINT_MAX
-} mds_reint_t;
+};
 
-typedef enum {
+enum ldlm_cmd {
   LDLM_ENQUEUE     = 101,
   LDLM_CONVERT     = 102,
   LDLM_CANCEL      = 103,
   LDLM_BL_CALLBACK = 104,
   LDLM_CP_CALLBACK = 105,
   LDLM_GL_CALLBACK = 106,
+  LDLM_SET_INFO    = 107,
   LDLM_LAST_OPC
-} ldlm_cmd_t;
+};
 #define LDLM_FIRST_OPC LDLM_ENQUEUE
 
-#define LDLM_FL_LOCK_CHANGED                      0x000001
-#define LDLM_FL_BLOCK_GRANTED                     0x000002
-#define LDLM_FL_BLOCK_CONV                        0x000004
-#define LDLM_FL_BLOCK_WAIT                        0x000008
-#define LDLM_FL_CBPENDING              0x000010
-#define LDLM_FL_AST_SENT                          0x000020
-#define LDLM_FL_WAIT_NOREPROC          0x000040
-#define LDLM_FL_CANCEL                 0x000080
-#define LDLM_FL_REPLAY                            0x000100
-#define LDLM_FL_INTENT_ONLY                       0x000200
-#define LDLM_FL_LOCAL_ONLY             0x000400
-#define LDLM_FL_FAILED                 0x000800
-#define LDLM_FL_HAS_INTENT                        0x001000
-#define LDLM_FL_CANCELING              0x002000
-#define LDLM_FL_LOCAL                  0x004000
-#define LDLM_FL_WARN                   0x008000
-#define LDLM_FL_DISCARD_DATA                      0x010000
-#define LDLM_FL_NO_TIMEOUT                        0x020000
-#define LDLM_FL_BLOCK_NOWAIT                      0x040000
-#define LDLM_FL_TEST_LOCK                         0x080000
-#define LDLM_FL_LVB_READY              0x100000
-#define LDLM_FL_KMS_IGNORE             0x200000
-#define LDLM_FL_NO_LRU                 0x400000
-#define LDLM_FL_CANCEL_ON_BLOCK                   0x800000
-#define LDLM_FL_CP_REQD                        0x1000000
-#define LDLM_FL_CLEANED                        0x2000000
-#define LDLM_FL_ATOMIC_CB              0x4000000
-#define LDLM_FL_BL_AST                 0x10000000
-#define LDLM_FL_BL_DONE                        0x20000000
-#define LDLM_FL_DENY_ON_CONTENTION              0x40000000
-#define LDLM_AST_DISCARD_DATA                   0x80000000
+enum seq_rpc_opc {
+  SEQ_QUERY        = 700,
+  SEQ_LAST_OPC,
+  SEQ_FIRST_OPC    = SEQ_QUERY
+};
 
+enum fld_rpc_opc {
+  FLD_QUERY        = 900,
+  FLD_LAST_OPC,
+  FLD_FIRST_OPC    = FLD_QUERY
+};
 
 #define LDLM_ENQUEUE (101)
 #define LDLM_CONVERT (102)
@@ -313,6 +341,7 @@ typedef enum {
   MGS_TARGET_REG,        /* whenever target starts up */
   MGS_TARGET_DEL,
   MGS_SET_INFO,
+  MGS_CONFIG_READ,
   MGS_LAST_OPC
 } mgs_cmd_t;
 #define MGS_FIRST_OPC MGS_CONNECT
@@ -360,6 +389,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 ;
@@ -372,6 +438,7 @@ static gint ett_lustre_ptlrpc_body = -1;
 static gint ett_lustre_lustre_handle_v2 = -1;
 static gint ett_lustre_obd_connect_data = -1;
 static gint ett_lustre_lov_mds_md_v1 = -1;
+static gint ett_lustre_lov_mds_md_v3 = -1;
 static gint ett_lustre_lov_ost_data_v1 = -1;
 static gint ett_lustre_obd_statfs = -1;
 static gint ett_lustre_obd_ioobj = -1;
@@ -403,6 +470,8 @@ static gint ett_lustre_lustre_handle = -1;
 static gint ett_lustre_ldlm_reply = -1;
 static gint ett_lustre_mgs_send_param = -1;
 static gint ett_lustre_mgs_target_info = -1;
+static gint ett_lustre_mgs_config_body = -1;
+static gint ett_lustre_mgs_config_res = -1;
 static gint ett_lustre_cfg_marker = -1;
 static gint ett_lustre_llog_catid = -1;
 static gint ett_lustre_llog_rec_hdr = -1;
@@ -410,8 +479,6 @@ static gint ett_lustre_llog_logid_rec = -1;
 static gint ett_lustre_llog_logid = -1;
 static gint ett_lustre_llog_rec_tail = -1;
 static gint ett_lustre_lov_mds_md = -1;
-static gint ett_lustre_llog_create_rec = -1;
-static gint ett_lustre_llog_orphan_rec = -1;
 static gint ett_lustre_llog_unlink_rec = -1;
 static gint ett_lustre_llog_setattr_rec = -1;
 static gint ett_lustre_llog_size_change_rec = -1;
@@ -427,6 +494,23 @@ static gint ett_lustre_qunit_data = -1;
 static gint ett_lustre_qunit_data_old2 = -1;
 static gint ett_lustre_qunit_data_old = -1;
 static gint ett_lustre_ldlm_lock_flags = -1 ;
+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;
+static gint ett_lustre_quota_body = -1;
+static gint ett_lustre_lquota_id = -1;
+static gint ett_lustre_layout_intent = -1;
+static gint ett_lustre_xattrs = -1;
+static gint ett_lustre_ost_id = -1;
 
 /* -----------------------------------------------*/
 /* Header field declarations */
@@ -460,6 +544,7 @@ static int hf_lustre_llog_cookie= -1;
 static int hf_lustre_mds_md_data= -1;
 static int hf_lustre_mds_reint_opcode= -1;
 static int hf_lustre_mds_xattr_eadata = -1;
+static int hf_lustre_mds_xattr_eadata_str = -1;
 
 static int hf_lustre_reint_name= -1;
 static int hf_lustre_reint_old_name= -1;
@@ -468,39 +553,21 @@ static int hf_lustre_reint_new_name= -1;
 static int hf_lustre_mgs_target_info = -1 ;
 static int hf_lustre_mgs_send_param = -1;
 
+static int hf_lustre_mgs_config_body = -1;
+static int hf_lustre_mgs_config_body_name = -1;
+static int hf_lustre_mgs_config_body_offset = -1;
+static int hf_lustre_mgs_config_body_type = -1;
+static int hf_lustre_mgs_config_body_reserved = -1;
+static int hf_lustre_mgs_config_body_bits = -1;
+static int hf_lustre_mgs_config_body_units = -1;
+
+static int hf_lustre_mgs_config_res = -1;
+static int hf_lustre_mgs_config_res_offset = -1;
+static int hf_lustre_mgs_config_res_size = -1;
+
 static int hf_lustre_ost_lvb = -1 ;
 
-static int hf_lustre_ldlm_fl_lock_changed        = -1;
-static int hf_lustre_ldlm_fl_block_granted       = -1;
-static int hf_lustre_ldlm_fl_block_conv          = -1;
-static int hf_lustre_ldlm_fl_block_wait          = -1;
-static int hf_lustre_ldlm_fl_cbpending           = -1;
-static int hf_lustre_ldlm_fl_ast_sent            = -1;
-static int hf_lustre_ldlm_fl_wait_noreproc       = -1;
-static int hf_lustre_ldlm_fl_cancel              = -1;
-static int hf_lustre_ldlm_fl_replay              = -1;
-static int hf_lustre_ldlm_fl_intent_only         = -1;
-static int hf_lustre_ldlm_fl_local_only          = -1;
-static int hf_lustre_ldlm_fl_failed              = -1;
-static int hf_lustre_ldlm_fl_has_intent          = -1;
-static int hf_lustre_ldlm_fl_canceling           = -1;
-static int hf_lustre_ldlm_fl_local               = -1;
-static int hf_lustre_ldlm_fl_warn                = -1;
-static int hf_lustre_ldlm_fl_discard_data        = -1;
-static int hf_lustre_ldlm_fl_no_timeout          = -1;
-static int hf_lustre_ldlm_fl_block_nowait        = -1;
-static int hf_lustre_ldlm_fl_test_lock           = -1;
-static int hf_lustre_ldlm_fl_lvb_ready           = -1;
-static int hf_lustre_ldlm_fl_kms_ignore          = -1;
-static int hf_lustre_ldlm_fl_no_lru              = -1;
-static int hf_lustre_ldlm_fl_cancel_on_block     = -1;
-static int hf_lustre_ldlm_fl_cp_reqd             = -1;
-static int hf_lustre_ldlm_fl_cleaned             = -1;
-static int hf_lustre_ldlm_fl_atomic_cb           = -1;
-static int hf_lustre_ldlm_fl_bl_ast              = -1;
-static int hf_lustre_ldlm_fl_bl_done             = -1;
-static int hf_lustre_ldlm_fl_deny_on_contention  = -1;
-static int hf_lustre_ldlm_ast_discard_data       = -1;
+#define hf_lustre_ldlm_ast_discard_data hf_lustre_ldlm_fl_ast_discard_data
 
 static int hf_lustre_mdt_body = -1 ;
 static int hf_lustre_mdt_body_fid1 = -1;
@@ -561,7 +628,7 @@ static int hf_lustre_mdt_rec_setattr_sa_ctime = -1;
 static int hf_lustre_mdt_rec_setattr_sa_attr_flags = -1;
 static int hf_lustre_mdt_rec_setattr_sa_mode = -1;
 static int hf_lustre_mdt_rec_setattr_sa_padding_2 = -1;
-static int hf_lustre_mdt_rec_setattr_sa_padding_3 = -1;
+static int hf_lustre_mdt_rec_setattr_sa_projid = -1;
 static int hf_lustre_mdt_rec_setattr_sa_padding_4 = -1;
 static int hf_lustre_mdt_rec_setattr_sa_padding_5 = -1;
 
@@ -587,7 +654,7 @@ static int hf_lustre_mdt_rec_create_cr_mode = -1;
 static int hf_lustre_mdt_rec_create_cr_bias = -1;
 static int hf_lustre_mdt_rec_create_cr_flags_l = -1;
 static int hf_lustre_mdt_rec_create_cr_flags_h = -1;
-static int hf_lustre_mdt_rec_create_cr_padding_3 = -1;
+static int hf_lustre_mdt_rec_create_cr_umask = -1;
 static int hf_lustre_mdt_rec_create_cr_padding_4 = -1;
 
 static int hf_lustre_mdt_rec_link = -1 ;
@@ -692,19 +759,77 @@ 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;
+static int hf_lustre_seq_range_end = -1;
+static int hf_lustre_seq_range_index = -1;
+static int hf_lustre_seq_range_flags = -1;
+
+static int hf_lustre_fld_opc = -1;
+static int hf_lustre_fld_range = -1;
+static int hf_lustre_fld_range_start = -1;
+static int hf_lustre_fld_range_end = -1;
+static int hf_lustre_fld_range_index = -1;
+static int hf_lustre_fld_range_flags = -1;
+
+static int hf_lustre_mdt_ioepoch = -1;
+static int hf_lustre_mdt_ioepoch_handle = -1;
+static int hf_lustre_mdt_ioepoch_ioepoch = -1;
+static int hf_lustre_mdt_ioepoch_flags = -1;
+static int hf_lustre_mdt_ioepoch_padding = -1;
+
+static int hf_lustre_capa = -1;
+static int hf_lustre_capa_fid = -1;
+static int hf_lustre_capa_opc = -1;
+static int hf_lustre_capa_uid = -1;
+static int hf_lustre_capa_gid = -1;
+static int hf_lustre_capa_flags = -1;
+static int hf_lustre_capa_keyid = -1;
+static int hf_lustre_capa_timeout = -1;
+static int hf_lustre_capa_expiry = -1;
+static int hf_lustre_capa_hmac = -1;
+
+static int hf_lustre_acl = -1;
+
+static int hf_lustre_ost_lvb_lvb_size = -1;
+static int hf_lustre_ost_lvb_lvb_mtime = -1;
+static int hf_lustre_ost_lvb_lvb_atime = -1;
+static int hf_lustre_ost_lvb_lvb_ctime = -1;
+static int hf_lustre_ost_lvb_lvb_blocks = -1;
+static int hf_lustre_ost_lvb_lvb_mtime_ns = -1;
+static int hf_lustre_ost_lvb_lvb_atime_ns = -1;
+static int hf_lustre_ost_lvb_lvb_ctime_ns = -1;
+static int hf_lustre_ost_lvb_lvb_padding = -1;
+
+static int hf_lustre_xattrs = -1;
+static int hf_lustre_xattrs_name = -1;
+static int hf_lustre_xattrs_data = -1;
+static int hf_lustre_xattrs_size = -1;
+
 static int hf_lustre_lustre_handle_cookie = -1;
 static int hf_lustre_ptlrpc_body_pb_last_committed = -1;
 static int hf_lustre_ptlrpc_body_pb_version = -1;
 static int hf_lustre_lustre_msg_v1_lm_bufcount = -1;
 static int hf_lustre_obd_ioobj_ioo_id = -1;
 static int hf_lustre_ptlrpc_body_pb_slv = -1;
+static int hf_lustre_ptlrpc_body_pb_pre_version = -1;
+static int hf_lustre_ptlrpc_body_pb_padding = -1;
+static int hf_lustre_ptlrpc_body_pb_jobid = -1;
 static int hf_lustre_lustre_msg_v1_lm_handle = -1;
-static int hf_lustre_ost_lvb_lvb_atime = -1;
 static int hf_lustre_ptlrpc_body_pb_timeout = -1;
 static int hf_lustre_obd_statfs_os_bavail = -1;
 static int hf_lustre_obd_statfs_os_bsize = -1;
 static int hf_lustre_lustre_msg_v2_lm_repsize = -1;
-static int hf_lustre_lov_mds_md_v1_lmm_stripe_size = -1;
 static int hf_lustre_lustre_msg_v1_lm_last_xid = -1;
 static int hf_lustre_ll_fid_f_type = -1;
 static int hf_lustre_lustre_msg_v2_lm_cksum = -1;
@@ -712,21 +837,17 @@ static int hf_lustre_lustre_msg_v2_lm_buflens = -1;
 static int hf_lustre_lustre_msg_v1_lm_status = -1;
 static int hf_lustre_lustre_msg_v1_lm_type = -1;
 static int hf_lustre_niobuf_remote_len = -1;
-static int hf_lustre_lov_mds_md_v1_lmm_magic = -1;
 static int hf_lustre_ptlrpc_body_pb_op_flags = -1;
-static int hf_lustre_ost_lvb_lvb_ctime = -1;
 static int hf_lustre_ptlrpc_body_pb_type = -1;
 static int hf_lustre_obd_connect_data_ocd_nllg = -1;
 static int hf_lustre_obd_connect_data_ocd_nllu = -1;
 static int hf_lustre_ll_fid_generation = -1;
-static int hf_lustre_ost_lvb_lvb_mtime = -1;
 static int hf_lustre_obd_connect_data_ocd_ibits_known = -1;
 static int hf_lustre_lustre_msg_v2_lm_padding_3 = -1;
 static int hf_lustre_ptlrpc_body_pb_flags = -1;
 static int hf_lustre_obd_statfs_os_spare4 = -1;
 static int hf_lustre_obd_connect_data_ocd_group = -1;
 static int hf_lustre_lov_ost_data_v1_l_object_seq = -1;
-static int hf_lustre_lov_mds_md_v1_lmm_object_seq = -1;
 static int hf_lustre_obd_connect_data_ocd_brw_size = -1;
 static int hf_lustre_ptlrpc_body_pb_limit = -1;
 static int hf_lustre_obd_statfs_os_maxbytes = -1;
@@ -734,7 +855,6 @@ static int hf_lustre_obd_statfs_os_spare5 = -1;
 static int hf_lustre_lustre_msg_v2_lm_flags = -1;
 static int hf_lustre_obd_statfs_os_ffree = -1;
 static int hf_lustre_obd_statfs_os_files = -1;
-static int hf_lustre_lov_mds_md_v1_lmm_stripe_count = -1;
 static int hf_lustre_lustre_msg_v1_lm_flags = -1;
 static int hf_lustre_lustre_msg_v1_lm_last_committed = -1;
 static int hf_lustre_obd_statfs_os_spare9 = -1;
@@ -753,12 +873,10 @@ static int hf_lustre_lov_ost_data_v1_l_object_id = -1;
 static int hf_lustre_lov_ost_data_v1_l_ost_gen = -1;
 static int hf_lustre_obd_statfs_os_bfree = -1;
 static int hf_lustre_obd_connect_data_ocd_version = -1;
-static int hf_lustre_lov_mds_md_v1_lmm_objects = -1;
 static int hf_lustre_obd_statfs_os_namelen = -1;
 static int hf_lustre_obd_statfs_os_blocks = -1;
 static int hf_lustre_lustre_msg_v2_lm_secflvr = -1;
 static int hf_lustre_lustre_msg_v1_lm_transno = -1;
-static int hf_lustre_lov_mds_md_v1_lmm_pattern = -1;
 static int hf_lustre_lustre_msg_v1_lm_opc = -1;
 static int hf_lustre_obd_connect_data_ocd_grant = -1;
 static int hf_lustre_obd_ioobj_ioo_bufcnt = -1;
@@ -766,24 +884,23 @@ 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_ost_lvb_lvb_size = -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_obd_statfs_os_type = -1;
 static int hf_lustre_obd_statfs_os_spare6 = -1;
 static int hf_lustre_obd_statfs_os_state = -1;
 static int hf_lustre_obd_statfs_os_spare3 = -1;
 static int hf_lustre_lustre_msg_v2_lm_magic = -1;
-static int hf_lustre_lov_mds_md_v1_lmm_object_id = -1;
 static int hf_lustre_ptlrpc_body_pb_last_seen = -1;
-static int hf_lustre_obd_ioobj_ioo_type = -1;
+static int hf_lustre_obd_ioobj_ioo_max_brw = -1;
 static int hf_lustre_ptlrpc_body_pb_last_xid = -1;
 static int hf_lustre_ptlrpc_body_pb_status = -1;
 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;
@@ -822,7 +939,6 @@ static int hf_lustre_llog_log_hdr_llh_bitmap = -1;
 static int hf_lustre_obd_quotactl_qc_stat = -1;
 static int hf_lustre_qunit_data_old2_qd_id = -1;
 static int hf_lustre_llog_logid_rec_padding2 = -1;
-static int hf_lustre_llog_orphan_rec_lor_tail = -1;
 static int hf_lustre_llog_logid_rec_padding5 = -1;
 static int hf_lustre_ldlm_intent_opc = -1;
 static int hf_lustre_llog_rec_hdr_lrh_type = -1;
@@ -837,9 +953,7 @@ static int hf_lustre_llog_log_hdr_llh_tail = -1;
 static int hf_lustre_obdo_o_size = -1;
 static int hf_lustre_ldlm_extent_start = -1;
 static int hf_lustre_llog_size_change_rec_lsc_hdr = -1;
-static int hf_lustre_llog_create_rec_lcr_tail = -1;
 static int hf_lustre_llog_logid_lgl_oseq = -1;
-static int hf_lustre_llog_create_rec_lcr_hdr = -1;
 static int hf_lustre_llog_cookie_lgc_padding = -1;
 static int hf_lustre_qunit_data_old_qd_type = -1;
 static int hf_lustre_ldlm_flock_blocking_export = -1;
@@ -851,7 +965,6 @@ static int hf_lustre_obdo_o_mode = -1;
 static int hf_lustre_mgs_target_info_mti_svname = -1;
 static int hf_lustre_llogd_body_lgd_logid = -1;
 static int hf_lustre_llog_log_hdr_llh_size = -1;
-static int hf_lustre_llog_create_rec_padding = -1;
 static int hf_lustre_obdo_o_handle = -1;
 static int hf_lustre_obdo_o_atime = -1;
 static int hf_lustre_quota_adjust_qunit_qaq_id = -1;
@@ -894,15 +1007,12 @@ static int hf_lustre_llog_gen_conn_cnt = -1;
 static int hf_lustre_obdo_o_padding_6 = -1;
 static int hf_lustre_llog_cookie_lgc_index = -1;
 static int hf_lustre_lov_desc_ld_uuid = -1;
-static int hf_lustre_llog_create_rec_lcr_oid = -1;
 static int hf_lustre_ldlm_reply_lock_desc = -1;
 static int hf_lustre_lov_desc_ld_padding_0 = -1;
 static int hf_lustre_llog_unlink_rec_lur_ogen = -1;
-static int hf_lustre_llog_orphan_rec_lor_hdr = -1;
 static int hf_lustre_cfg_marker_cm_flags = -1;
 static int hf_lustre_obdo_o_padding_3 = -1;
 static int hf_lustre_ldlm_request_lock_desc = -1;
-static int hf_lustre_llog_orphan_rec_padding = -1;
 static int hf_lustre_obdo_o_flags = -1;
 static int hf_lustre_mgs_target_info_mti_params = -1;
 static int hf_lustre_llog_logid_lgl_ogen = -1;
@@ -919,17 +1029,16 @@ static int hf_lustre_obdo_o_blocks = -1;
 static int hf_lustre_lov_desc_ld_padding_2 = -1;
 static int hf_lustre_llog_logid_rec_lid_tail = -1;
 static int hf_lustre_obdo_o_grant = -1;
-static int hf_lustre_obdo_o_padding_2 = -1;
+static int hf_lustre_obdo_o_uid_h = -1;
+static int hf_lustre_obdo_o_gid_h = -1;
 static int hf_lustre_quota_adjust_qunit_qaq_iunit_sz = -1;
 static int hf_lustre_llog_unlink_rec_padding = -1;
 static int hf_lustre_ldlm_lock_desc_l_req_mode = -1;
 static int hf_lustre_ldlm_extent_end = -1;
 static int hf_lustre_llog_gen_rec_lgr_hdr = -1;
-static int hf_lustre_llog_orphan_rec_lor_ogen = -1;
 static int hf_lustre_llogd_body_lgd_llh_flags = -1;
 static int hf_lustre_llog_log_hdr_llh_cat_idx = -1;
 static int hf_lustre_llog_log_hdr_llh_bitmap_offset=-1;
-static int hf_lustre_llog_orphan_rec_lor_oid = -1;
 static int hf_lustre_ldlm_reply_lock_padding = -1;
 static int hf_lustre_obd_quotactl_qc_id = -1;
 static int hf_lustre_llog_logid_rec_padding4 = -1;
@@ -942,7 +1051,6 @@ static int hf_lustre_llogd_conn_body_lgdc_logid = -1;
 static int hf_lustre_ldlm_flock_blocking_pid = -1;
 static int hf_lustre_lov_desc_ld_tgt_count = -1;
 static int hf_lustre_llogd_body_lgd_cur_offset=-1;
-static int hf_lustre_llog_create_rec_lcr_ogen = -1;
 static int hf_lustre_qunit_data_old2_qd_count = -1;
 static int hf_lustre_qunit_data_old2_qd_flags = -1;
 static int hf_lustre_ldlm_flock_start = -1;
@@ -952,7 +1060,6 @@ static int hf_lustre_lov_desc_ld_default_stripe_size = -1;
 static int hf_lustre_llog_log_hdr_llh_tgtuuid = -1;
 static int hf_lustre_cfg_marker_cm_step = -1;
 static int hf_lustre_mgs_send_param_mgs_param = -1;
-static int hf_lustre_llog_create_rec_lcr_fid = -1;
 static int hf_lustre_lov_desc_ld_default_stripe_offset=-1;
 static int hf_lustre_ldlm_resource_desc_lr_name = -1;
 static int hf_lustre_llog_rec_tail_lrt_len = -1;
@@ -1004,23 +1111,114 @@ static int hf_lustre_ldlm_intent_opc_readdir  = -1;
 static int hf_lustre_ldlm_intent_opc_getattr  = -1;
 static int hf_lustre_ldlm_intent_opc_lookup   = -1;
 static int hf_lustre_ldlm_intent_opc_unlink   = -1;
+static int hf_lustre_ldlm_intent_opc_trunc    = -1;
 static int hf_lustre_ldlm_intent_opc_getxattr = -1;
 static int hf_lustre_ldlm_intent_opc_exec     = -1;
 static int hf_lustre_ldlm_intent_opc_pin      = -1;
+static int hf_lustre_ldlm_intent_opc_layout   = -1;
+static int hf_lustre_ldlm_intent_opc_q_dqacq  = -1;
+static int hf_lustre_ldlm_intent_opc_q_conn   = -1;
+static int hf_lustre_ldlm_intent_opc_setxattr = -1;
 static int hf_lustre_llog_hdr_llh_flag_zap_when_empty = -1;
 static int hf_lustre_llog_hdr_llh_flag_is_cat = -1;
 static int hf_lustre_llog_hdr_llh_flag_is_play = -1;
+static int hf_lustre_lu_ladvise = -1;
+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;
+
+/* Quota Body */
+static int hf_lustre_qb = -1;
+static int hf_lustre_qb_fid = -1;
+static int hf_lustre_qb_id = -1;
+static int hf_lustre_qb_flags = -1;
+static int hf_lustre_qb_padding = -1;
+static int hf_lustre_qb_count = -1;
+static int hf_lustre_qb_usage = -1;
+static int hf_lustre_qb_slv_ver = -1;
+static int hf_lustre_qb_lockh = -1;
+static int hf_lustre_qb_glb_lockh = -1;
+
+static int hf_lustre_qid_fid = -1;
+static int hf_lustre_qid_uid = -1;
+static int hf_lustre_qid_gid = -1;
+
+/* Layout Intent */
+static int hf_lustre_layout_intent = -1;
+static int hf_lustre_layout_intent_opc = -1;
+static int hf_lustre_layout_intent_flags = -1;
+static int hf_lustre_layout_intent_start = -1;
+static int hf_lustre_layout_intent_end = -1;
+
+/* mds md v1 and v3 */
+static int hf_lustre_lov_mds_md_lmm_magic = -1;
+static int hf_lustre_lov_mds_md_lmm_pattern = -1;
+static int hf_lustre_lov_mds_md_lmm_object_id = -1;    /* v1 only */
+static int hf_lustre_lov_mds_md_lmm_oi = -1;           /* v3 only */
+static int hf_lustre_lov_mds_md_lmm_object_seq = -1;   /* v1 only */
+static int hf_lustre_lov_mds_md_lmm_stripe_size = -1;
+static int hf_lustre_lov_mds_md_lmm_stripe_count = -1;
+static int hf_lustre_lov_mds_md_lmm_layout_gen = -1;
+static int hf_lustre_lov_mds_md_lmm_pool_name = -1;    /* v3 only */
+static int hf_lustre_lov_mds_md_lmm_objects = -1;
+
+/* struct ost_id */
+static int hf_lustre_ost_id_oi_id = -1;
+static int hf_lustre_ost_id_oi_seq = -1;
+
+static int hf_lustre_generic_data = -1;
 /* --------------------------------------------------------------------*/
 
 
 /* proto declaration */
 static gint proto_lustre = -1;
 
+typedef int (dissect_func)(
+    tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree,
+    int hfindex);
 
+static dissect_func dissect_uint64, dissect_uint32, dissect_uint16, dissect_uint8;
 
+#define  WSHARK_HEAD
+#include "lustre_dlm_flags_wshark.c"
+#undef   WSHARK_HEAD
 
 static int ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint64 intent_opc _U_) ;
-static int lustre_dissect_element_ldlm_lock_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_);
 static int add_extra_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_) ;
 
 
@@ -1041,44 +1239,10 @@ const value_string lustre_ldlm_opcode[] = {
 
 const value_string lustre_lov_magic[] = {
   { LOV_MAGIC_V1,   "LOV_MAGIC_V1" },
+  { LOV_MAGIC_V3,   "LOV_MAGIC_V3" },
   {0, NULL}
 };
 
-const value_string lustre_ldlm_flags_vals[] = {
-  {0x000001 , "LDLM_FL_LOCK_CHANGED"},
-  {0x000002 , "LDLM_FL_BLOCK_GRANTED"},
-  {0x000004 , "LDLM_FL_BLOCK_CONV"},
-  {0x000008 , "LDLM_FL_BLOCK_WAIT"},
-       {0x000010 , "LDLM_FL_CBPENDING"},
-  {0x000020 , "LDLM_FL_AST_SENT"},
-       {0x000040 , "LDLM_FL_WAIT_NOREPROC"},
-       {0x000080 , "LDLM_FL_CANCEL"},
-  {0x000100 , "LDLM_FL_REPLAY"},
-  {0x000200 , "LDLM_FL_INTENT_ONLY"},
-       {0x000400 , "LDLM_FL_LOCAL_ONLY"},
-       {0x000800 , "LDLM_FL_FAILED"},
-  {0x001000 , "LDLM_FL_HAS_INTENT"},
-       {0x002000 , "LDLM_FL_CANCELING"},
-       {0x004000 , "LDLM_FL_LOCAL"},
-       {0x008000 , "LDLM_FL_WARN"},
-  {0x010000 , "LDLM_FL_DISCARD_DATA"},
-  {0x020000 , "LDLM_FL_NO_TIMEOUT"},
-  {0x040000 , "LDLM_FL_BLOCK_NOWAIT"},
-  {0x080000 , "LDLM_FL_TEST_LOCK"},
-       {0x100000 , "LDLM_FL_LVB_READY"},
-       {0x200000 , "LDLM_FL_KMS_IGNORE"},
-       {0x400000 , "LDLM_FL_NO_LRU"},
-  {0x800000 , "LDLM_FL_CANCEL_ON_BLOCK"},
-       {0x1000000 , "LDLM_FL_CP_REQD"},
-       {0x2000000 , "LDLM_FL_CLEANED"},
-       {0x4000000 , "LDLM_FL_ATOMIC_CB"},
-       {0x10000000 , "LDLM_FL_BL_AST"},
-       {0x20000000 , "LDLM_FL_BL_DONE"},
-  {0x40000000 , "LDLM_FL_DENY_ON_CONTENTION"},
-  {0x80000000 , "LDLM_AST_DISCARD_DATA"},
-  { 0, NULL }
-};
-
 const value_string lustre_llog_op_type[] = {
   {LLOG_PAD_MAGIC   ,"LLOG_PAD_MAGIC  "},
   {OST_SZ_REC       ,"OST_SZ_REC      "},
@@ -1102,13 +1266,24 @@ const value_string lustre_llog_hdr_llh_flags[]= {
 };
 
 const value_string lustre_mds_flags_vals[] = {
-  {0x1,        "LUSTRE_BFLAG_UNCOMMITTED_WRITES"},
-  {0x80000000, "LUSTRE_BFLAG_EXT_FLAGS"},   /* == EXT3_RESERVED_FL */
   {0x00000008, "LUSTRE_SYNC_FL        "},   /* Synchronous updates */
   {0x00000010, "LUSTRE_IMMUTABLE_FL   "},   /* Immutable file */
   {0x00000020, "LUSTRE_APPEND_FL      "},   /* writes to file may only append */
+  {0x00000040, "LUSTRE_NODUMP_FL      "},   /* do not dump file */
   {0x00000080, "LUSTRE_NOATIME_FL     "},   /* do not update atime */
+  {0x00001000, "LUSTRE_INDEX_FL       "},   /* hash-indexed directory */
   {0x00010000, "LUSTRE_DIRSYNC_FL     "},   /* dirsync behaviour (dir only) */
+  {0x00020000, "LUSTRE_TOPDIR_FL      "},   /* Top of directory hierarchies */
+  {0x00100000, "LUSTRE_DIRECTIO_FL    "},   /* Use direct i/o */
+  {0x10000000, "LUSTRE_INLINE_DATA_FL "},   /* Inode has inline data. */
+  { 0, NULL }
+};
+
+const value_string lustre_mgs_config_body_types[] = {
+  { 0, "CONFIG" },
+  { 1, "SPTLRPC" },
+  { 2, "RECOVER" },
+  { 3, "MAX" },
   { 0, NULL }
 };
 
@@ -1119,7 +1294,7 @@ const value_string lustre_LMTypes[] = {
   { 0, NULL }
 };
 
-const value_string lustre_mds_reint_t_vals[] = {
+const value_string lustre_mds_reint_op_vals[] = {
   { REINT_SETATTR, "REINT_SETATTR" },
   { REINT_CREATE, "REINT_CREATE" },
   { REINT_LINK, "REINT_LINK" },
@@ -1127,6 +1302,8 @@ const value_string lustre_mds_reint_t_vals[] = {
   { REINT_RENAME, "REINT_RENAME" },
   { REINT_OPEN, "REINT_OPEN" },
   { REINT_SETXATTR, "REINT_SETXATTR" },
+  { REINT_RMENTRY, "REINT_RMENTRY" },
+  { REINT_MIGRATE, "REINT_MIGRATE" },
   { 0, NULL }
 };
 const value_string lustre_op_codes[] = {
@@ -1151,7 +1328,9 @@ const value_string lustre_op_codes[] = {
   {17 , "OST_SET_INFO"},
   {18 , "OST_QUOTACHECK"},
   {19 , "OST_QUOTACTL"},
-  {20 , "OST_LAST_OPC"},
+  {20 , "OST_QUOTA_ADJUST_QUNIT"},
+  {21 , "OST_LADVISE"},
+  {22 , "OST_LAST_OPC"},
   /*MDS Opcodes*/
   {33 , "MDS_GETATTR"},
   {34 , "MDS_GETATTR_NAME"},
@@ -1160,7 +1339,7 @@ const value_string lustre_op_codes[] = {
   {37 , "MDS_READPAGE"},
   {38 , "MDS_CONNECT"},
   {39 , "MDS_DISCONNECT"},
-  {40 , "MDS_GETSTATUS"},
+  {40 , "MDS_GET_ROOT"},
   {41 , "MDS_STATFS"},
   {42 , "MDS_PIN"},
   {43 , "MDS_UNPIN"},
@@ -1171,7 +1350,18 @@ const value_string lustre_op_codes[] = {
   {48 , "MDS_QUOTACTL"},
   {49 , "MDS_GETXATTR"},
   {50 , "MDS_SETXATTR"},
-  {51 , "MDS_LAST_OPC"},
+  {51 , "MDS_WRITEPAGE"},
+  {52 , "MDS_IS_SUBDIR"},
+  {53 , "MDS_GET_INFO"},
+  {54 , "MDS_HSM_STATE_GET"},
+  {55 , "MDS_HSM_STATE_SET"},
+  {56 , "MDS_HSM_ACTION"},
+  {57 , "MDS_HSM_PROGRESS"},
+  {58 , "MDS_HSM_REQUEST"},
+  {59 , "MDS_HSM_CT_REGISTER"},
+  {60 , "MDS_HSM_CT_UNREGISTER"},
+  {61 , "MDS_SWAP_LAYOUTS"},
+  {62 , "MDS_LAST_OPC"},
   /*LDLM Opcodes*/
   {101 , "LDLM_ENQUEUE"},
   {102 , "LDLM_CONVERT"},
@@ -1179,7 +1369,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"},
@@ -1187,7 +1378,8 @@ const value_string lustre_op_codes[] = {
   {253 , "MGS_TARGET_REG"},
   {254 , "MGS_TARGET_DEL"},
   {255 , "MGS_SET_INFO"},
-  {256 , "MGS_LAST_OPC"},
+  {256 , "MGS_CONFIG_READ"},
+  {257 , "MGS_LAST_OPC"},
   /*OBD Opcodes*/
   {400 , "OBD_PING"},
   {401 , "OBD_LOG_CANCEL"},
@@ -1203,22 +1395,17 @@ const value_string lustre_op_codes[] = {
   { 507, "LLOG_CATINFO"},
   { 508, "LLOG_ORIGIN_HANDLE_PREV_BLOCK"},
   { 509, "LLOG_ORIGIN_HANDLE_DESTROY"},
+  /* SEQ RPC opcodes */
+  { 700, "SEQ_QUERY"},
+  { 701, "SEQ_LAST_OPC"},
+  /* FLD RPC opcodes */
+  { 900, "FLD_QUERY"},
+  { 901, "FLD_LAST_OPC"},
   { 0, NULL }
 };
-/*const value_string lustre_ldlm_mode_t_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_t_vals[] = {
+const value_string lustre_ldlm_mode_vals[] = {
   { LCK_MINMODE, "MINMODE" },
   { LCK_EX, "Exclusive" },
   { LCK_PW, "Protected Write" },
@@ -1230,7 +1417,7 @@ const value_string lustre_ldlm_mode_t_vals[] = {
   { 0, NULL }
 };
 
-const value_string lustre_ldlm_type_t_vals[] = {
+const value_string lustre_ldlm_type_vals[] = {
   { LDLM_PLAIN, "LDLM_PLAIN" },
   { LDLM_EXTENT,"LDLM_EXTENT" },
   { LDLM_FLOCK, "LDLM_FLOCK" },
@@ -1252,6 +1439,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;
 
@@ -1279,66 +1514,161 @@ plugin_reg_handoff(void)
 /*                display  functions                                   */
 /* ------------------------------------------------------------------- */
 /* display str in left corner and in COL */
-/* TODO : do we need to use inline here ?*/
 /* @gint col :  the col where we add the information */
-inline static void display_info_str(proto_item *pi, column_info *cinfo, gint col, const gchar* str)
+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;
 }
 
 static int
+dissect_uint16
+(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, int hfindex)
+{
+  proto_tree_add_item(tree, hfindex, tvb, offset, 2, TRUE);
+  return offset+2;
+}
+
+static int
 dissect_uint8
 (tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, int hfindex)
 {
   proto_tree_add_item(tree, hfindex, tvb, offset, 1, TRUE);
   return offset+1;
 }
+
 /* -------------------------------------------------------------------------    */
 
+/* dissect raw data */
+static int
+lustre_dissect_element_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;
+
+  guint32 data_len;
+  int old_offset;
+
+  old_offset = offset;
+
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
+  if (data_len == 0)
+    return offset;
+
+  item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, data_len, TRUE);
+
+  offset += data_len;
+  proto_item_set_len(item, offset-old_offset);
+  offset = add_extra_padding(tvb, offset, pinfo, parent_tree);
+
+  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;
+
+  item = 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)
+{
+  int i;
+  int val;
+  proto_item *item = NULL;
+
+  item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 0, TRUE);
+  for (i=0; i < max_length; ++i) {
+    val = tvb_get_guint8(tvb, offset+i);
+    proto_item_append_text(item, (i) ? "%02x" : ": %#02x", val);
+  }
+
+  offset += max_length;
+  proto_item_set_len(item, max_length);
+  return offset;
+}
+
+/* struct ost_id { */
+/*     union { */
+/*             struct { */
+/*                     __u64   oi_id; */
+/*                     __u64   oi_seq; */
+/*             } oi; */
+/*             struct lu_fid oi_fid; */
+/*     }; */
+/* }; */
+int
+lustre_dissect_struct_ostid(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_ost_id);
+  }
+
+  offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ost_id_oi_id);
+  offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ost_id_oi_seq);
+
+  proto_item_set_len(item, offset-old_offset);
+
+  return offset;
+}
+/* ------------------------------------------------------------------------ */
 
 
 
@@ -1396,16 +1726,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
@@ -1449,30 +1796,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);
@@ -1481,67 +1804,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_)
+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_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_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_padding2);
-
-  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;
-
+       proto_item *item = NULL;
+       proto_tree *tree = NULL;
+       int old_offset;
+       int data_len;
 
+       data_len = LUSTRE_BUFFER_LEN(buf_num);
+       if (data_len == 0)
+               return 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);
-  }
-
-  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_grant(tvb, offset, pinfo, tree);
+       /* ocd_connect_flags = get_... */
+       offset = lustre_dissect_element_obd_connect_data_ocd_connect_flags(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_version(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_grant(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_index(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_brw_size(tvb,
+                       offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_connect_data_ocd_nllg(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_transno(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_group(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_cksum_types(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_padding1(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_padding2(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);
 
+       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;
 }
 
 
@@ -1620,114 +1965,137 @@ lustre_dissect_struct_lov_ost_data_v1(tvbuff_t *tvb _U_, int offset _U_, packet_
 /* IDL:        uint64 lmm_object_id; */
 /* IDL:        uint64 lmm_object_seq; */
 /* IDL:        uint32 lmm_stripe_size; */
-/* IDL:        uint32 lmm_stripe_count; */
+/* IDL:        uint16 lmm_stripe_count; */
+/* IDL:        uint16 lmm_layout_gen; */
 /* IDL:        struct lov_ost_data_v1 { */
 /* IDL: } lmm_objects[0]; <-- en fait on en a lmm_stripe_count */
 /* IDL: } */
 
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_magic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_magic);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_pattern(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_pattern);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_object_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_object_id);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_object_seq(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+int
+lustre_dissect_struct_lov_mds_md_v1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_object_seq);
+       proto_item *item = NULL;
+       proto_tree *tree = NULL;
+       int old_offset, i;
 
-  return offset;
-}
+       guint16 stripe_count;
 
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_stripe_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_stripe_size);
+       old_offset=offset;
 
-  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_lov_mds_md_v1);
+       }
 
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_stripe_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_stripe_count);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_magic);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_pattern);
+       offset = dissect_uint64(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_object_id);
+       offset = dissect_uint64(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_object_seq);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_stripe_size);
 
-  return offset;
-}
+       stripe_count = tvb_get_letohs(tvb, offset);
+       offset = dissect_uint16(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_stripe_count);
+       offset = dissect_uint16(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_layout_gen);
 
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_objects_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=lustre_dissect_struct_lov_ost_data_v1(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_v1_lmm_objects);
-  return offset;
-}
+       for (i = 0; i < stripe_count; ++i)
+               offset = lustre_dissect_struct_lov_ost_data_v1(tvb, offset,
+                               pinfo, tree, hf_lustre_lov_mds_md_lmm_objects);
 
-static int
-lustre_dissect_element_lov_mds_md_v1_lmm_objects(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int num)
-{
-  int i;
-  /*g_print("num = %d", num);*/
-  for (i = 0; i < num; i++){
-    offset=lustre_dissect_element_lov_mds_md_v1_lmm_objects_(tvb, offset, pinfo, tree);
-  }
+       proto_item_set_len(item, offset-old_offset);
 
-  return offset;
+       return offset;
 }
 
 
+/* struct lov_mds_md_v3 {            /\* LOV EA mds/wire data (little-endian) *\/ */
+/*     __u32 lmm_magic;          /\* magic number = LOV_MAGIC_V3 *\/ */
+/*     __u32 lmm_pattern;        /\* LOV_PATTERN_RAID0, LOV_PATTERN_RAID1 *\/ */
+/*     struct ost_id   lmm_oi;   /\* LOV object ID *\/ */
+/*     __u32 lmm_stripe_size;    /\* size of stripe in bytes *\/ */
+/*     /\* lmm_stripe_count used to be __u32 *\/ */
+/*     __u16 lmm_stripe_count;   /\* num stripes in use for this object *\/ */
+/*     __u16 lmm_layout_gen;     /\* layout generation number *\/ */
+/*     char  lmm_pool_name[LOV_MAXPOOLNAME + 1]; /\* must be 32bit aligned *\/ */
+/*     struct lov_ost_data_v1 lmm_objects[0]; /\* per-stripe data *\/ */
+/* }; */
 
 int
-lustre_dissect_struct_lov_mds_md_v1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+lustre_dissect_struct_lov_mds_md_v3(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, i;
 
-  guint32 stripe_count ;
+       guint16 stripe_count;
 
+       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_lov_mds_md_v1);
-  }
-
-  offset=lustre_dissect_element_lov_mds_md_v1_lmm_magic(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_lov_mds_md_v3);
+       }
 
-  offset=lustre_dissect_element_lov_mds_md_v1_lmm_pattern(tvb, offset, pinfo, tree);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_magic);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_pattern);
+       offset = lustre_dissect_struct_ostid(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_oi);
+       offset = dissect_uint32(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_stripe_size);
 
-  offset=lustre_dissect_element_lov_mds_md_v1_lmm_object_id(tvb, offset, pinfo, tree);
+       stripe_count = tvb_get_letohs(tvb, offset);
+       offset = dissect_uint16(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_stripe_count);
+       offset = dissect_uint16(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_layout_gen);
+       offset = lustre_dissect_struct_element_data(tvb, offset, pinfo, tree,
+                               hf_lustre_lov_mds_md_lmm_pool_name,
+                               LOV_MAXPOOLNAME+1);
 
-  offset=lustre_dissect_element_lov_mds_md_v1_lmm_object_seq(tvb, offset, pinfo, tree);
+       for (i = 0; i < stripe_count; ++i)
+               offset = lustre_dissect_struct_lov_ost_data_v1(tvb, offset,
+                               pinfo, tree, hf_lustre_lov_mds_md_lmm_objects);
 
-  offset=lustre_dissect_element_lov_mds_md_v1_lmm_stripe_size(tvb, offset, pinfo, tree);
+       proto_item_set_len(item, offset-old_offset);
 
-  stripe_count = tvb_get_letohl(tvb,offset);
-  offset=lustre_dissect_element_lov_mds_md_v1_lmm_stripe_count(tvb, offset, pinfo, tree);
+       return offset;
+}
 
-  offset=lustre_dissect_element_lov_mds_md_v1_lmm_objects(tvb, offset, pinfo, tree, stripe_count);
+int
+lustre_dissect_struct_lov_mds_md(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                                proto_tree *parent_tree _U_,
+                                int hf_index _U_, int buff_num _U_)
+{
+  int magic;
 
+  if(LUSTRE_BUFFER_LEN(buff_num) == 0)
+    return offset;
 
-  proto_item_set_len(item, offset-old_offset);
+  magic=tvb_get_letohl(tvb, offset); /* TODO : replace this with a macro */
+  switch(magic) {
+  case LOV_MAGIC_V1:
+    offset=lustre_dissect_struct_lov_mds_md_v1(tvb,offset,pinfo,parent_tree,
+                                              hf_index);
+    break;
+  case LOV_MAGIC_V3:
+    offset=lustre_dissect_struct_lov_mds_md_v3(tvb,offset,pinfo,parent_tree,
+                                              hf_index);
+    break;
+  default:
+    offset=lustre_dissect_element_data(tvb, offset, pinfo, parent_tree,
+                                      hf_lustre_generic_data, buff_num);
+    break;
+  };
 
   return offset;
 }
@@ -1994,7 +2362,7 @@ lustre_dissect_struct_obd_statfs(tvbuff_t *tvb _U_, int offset _U_, packet_info
 /* IDL: struct obd_ioobj { */
 /* IDL:        uint64 ioo_id; */
 /* IDL:        uint64 ioo_seq; */
-/* IDL:        uint32 ioo_type; */
+/* IDL:        uint32 ioo_max_brw; */
 /* IDL:        uint32 ioo_bufcnt; */
 /* IDL: } */
 
@@ -2015,9 +2383,9 @@ lustre_dissect_element_obd_ioobj_ioo_seq(tvbuff_t *tvb _U_, int offset _U_, pack
 }
 
 static int
-lustre_dissect_element_obd_ioobj_ioo_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_obd_ioobj_ioo_max_brw(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_ioobj_ioo_type);
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_ioobj_ioo_max_brw);
 
   return offset;
 }
@@ -2050,7 +2418,7 @@ lustre_dissect_struct_obd_ioobj(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 
   offset=lustre_dissect_element_obd_ioobj_ioo_seq(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obd_ioobj_ioo_type(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_obd_ioobj_ioo_max_brw(tvb, offset, pinfo, tree);
 
   offset=lustre_dissect_element_obd_ioobj_ioo_bufcnt(tvb, offset, pinfo, tree);
 
@@ -2124,111 +2492,107 @@ lustre_dissect_struct_niobuf_remote(tvbuff_t *tvb _U_, int offset _U_, packet_in
 /* IDL:        uint64 lvb_atime; */
 /* IDL:        uint64 lvb_ctime; */
 /* IDL:        uint64 lvb_blocks; */
+/* v1 of this type ends here */
+/*             uint32 lvb_mtime_ns; */
+/*             uint32 lvb_atime_ns; */
+/*             uint32 lvb_ctime_ns; */
+/*             uint32 lvb_padding; */
 /* IDL: } */
 
 static int
-lustre_dissect_element_ost_lvb_lvb_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_ost_lvb_lvb_time(tvbuff_t *tvb _U_, int offset _U_,
+                                       packet_info *pinfo _U_,
+                                       proto_tree *tree _U_,
+                                       int hf_index _U_, int ns_offset _U_)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ost_lvb_lvb_size);
+       nstime_t ns;
+       /* timestamp */
+       ns.secs = tvb_get_letoh64(tvb, offset);
+       if (ns_offset != 0)
+               ns.nsecs = tvb_get_letohl(tvb, offset+ns_offset);
+       proto_tree_add_time(tree, hf_index, tvb, offset, 8, &ns);
+       offset += 8;
+       return offset;
+}
 
-  return offset;
+int
+lustre_dissect_struct_ost_lvb(tvbuff_t *tvb _U_, int offset _U_,
+                             packet_info *pinfo _U_,
+                             proto_tree *parent_tree _U_,
+                             int hf_index _U_, int buff_num _U_)
+{
+       proto_item *item = NULL;
+       proto_tree *tree = NULL;
+       int old_offset;
+       int buff_len;
+
+       buff_len = LUSTRE_BUFFER_LEN(buff_num);
+
+       if (buff_len == 0)
+               return 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_ost_lvb);
+       }
+
+       /* v1 format size is 40
+        * v2 format size is 56 w/ ns for times
+        */
+
+       offset = dissect_uint64(tvb, offset, pinfo, tree,
+                               hf_lustre_ost_lvb_lvb_size);
+
+       offset = lustre_dissect_element_ost_lvb_lvb_time(tvb, offset,
+                       pinfo, tree, hf_lustre_ost_lvb_lvb_mtime,
+                       (buff_len >= 56) ?32 :0);
+
+       offset = lustre_dissect_element_ost_lvb_lvb_time(tvb, offset,
+                       pinfo, tree, hf_lustre_ost_lvb_lvb_atime,
+                       (buff_len >= 56) ?28 :0);
+
+       offset = lustre_dissect_element_ost_lvb_lvb_time(tvb, offset,
+                       pinfo, tree, hf_lustre_ost_lvb_lvb_ctime,
+                       (buff_len >= 56) ?24 :0);
+
+       offset = dissect_uint64(tvb, offset, pinfo, tree,
+                               hf_lustre_ost_lvb_lvb_blocks);
+
+       /* post-v1 format */
+       if (buff_len >= 56) {
+               offset = dissect_uint32(tvb, offset, pinfo, tree,
+                                       hf_lustre_ost_lvb_lvb_mtime_ns);
+               offset = dissect_uint32(tvb, offset, pinfo, tree,
+                                       hf_lustre_ost_lvb_lvb_atime_ns);
+               offset = dissect_uint32(tvb, offset, pinfo, tree,
+                                       hf_lustre_ost_lvb_lvb_ctime_ns);
+               offset = dissect_uint32(tvb, offset, pinfo, tree,
+                                       hf_lustre_ost_lvb_lvb_padding);
+       }
+       proto_item_set_len(item, offset-old_offset);
+
+       return offset;
 }
 
+
+/* IDL: struct ll_fid { */
+/* IDL:        uint64 id; */
+/* IDL:        uint32 generation; */
+/* IDL:        uint32 f_type; */
+/* IDL: } */
+
 static int
-lustre_dissect_element_ost_lvb_lvb_mtime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_ll_fid_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  nstime_t ns;
-  /* timestamp */
-  ns.secs = tvb_get_letohl(tvb,offset);
-  ns.nsecs=0;
-  proto_tree_add_time(tree, hf_lustre_ost_lvb_lvb_mtime, tvb, offset, 8, &ns );
-  offset+=8;
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ll_fid_id);
+
   return offset;
 }
 
 static int
-lustre_dissect_element_ost_lvb_lvb_atime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  nstime_t ns;
-  /* timestamp */
-  ns.secs = tvb_get_letohl(tvb,offset);
-  ns.nsecs=0;
-  proto_tree_add_time(tree, hf_lustre_ost_lvb_lvb_atime, tvb, offset, 8, &ns );
-  offset+=8;
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_ost_lvb_lvb_ctime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  nstime_t ns;
-  /* timestamp */
-  ns.secs = tvb_get_letohl(tvb,offset);
-  ns.nsecs=0;
-  proto_tree_add_time(tree, hf_lustre_ost_lvb_lvb_ctime, tvb, offset, 8, &ns );
-  offset+=8;
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_ost_lvb_lvb_blocks(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ost_lvb_lvb_blocks);
-
-  return offset;
-}
-
-int
-lustre_dissect_struct_ost_lvb(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_ost_lvb);
-  }
-
-  offset=lustre_dissect_element_ost_lvb_lvb_size(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_ost_lvb_lvb_mtime(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_ost_lvb_lvb_atime(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_ost_lvb_lvb_ctime(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_ost_lvb_lvb_blocks(tvb, offset, pinfo, tree);
-
-
-  proto_item_set_len(item, offset-old_offset);
-
-  return offset;
-}
-
-
-/* IDL: struct ll_fid { */
-/* IDL:        uint64 id; */
-/* IDL:        uint32 generation; */
-/* IDL:        uint32 f_type; */
-/* IDL: } */
-
-static int
-lustre_dissect_element_ll_fid_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ll_fid_id);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_ll_fid_generation(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_ll_fid_generation(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
   offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ll_fid_generation);
 
@@ -2250,8 +2614,6 @@ lustre_dissect_struct_lu_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
   proto_tree *tree = NULL;
   int old_offset;
 
-
-
   old_offset=offset;
 
   if (parent_tree) {
@@ -2982,7 +3344,10 @@ lustre_dissect_element_mdt_body_padding_10(tvbuff_t *tvb _U_, int offset _U_, pa
 }
 
 int
-lustre_dissect_struct_mdt_body(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+lustre_dissect_struct_mdt_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;
@@ -3095,7 +3460,7 @@ lustre_dissect_struct_mdt_body(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 /* IDL:        uint32 sa_attr_flags; */
 /* IDL:        uint32 sa_mode; */
 /* IDL:        uint32 sa_padding_2; */
-/* IDL:        uint32 sa_padding_3; */
+/* IDL:        uint32 sa_projid; */
 /* IDL:        uint32 sa_padding_4; */
 /* IDL:        uint32 sa_padding_5; */
 /* IDL: } */
@@ -3290,9 +3655,9 @@ lustre_dissect_element_mdt_rec_setattr_sa_padding_2(tvbuff_t *tvb _U_, int offse
 }
 
 static int
-lustre_dissect_element_mdt_rec_setattr_sa_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_mdt_rec_setattr_sa_projid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_mdt_rec_setattr_sa_padding_3);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_mdt_rec_setattr_sa_projid);
 
   return offset;
 }
@@ -3330,7 +3695,7 @@ lustre_dissect_struct_mdt_rec_setattr(tvbuff_t *tvb _U_, int offset _U_, packet_
     tree = proto_item_add_subtree(item, ett_lustre_mdt_rec_setattr);
   }
   sa_opcode=tvb_get_letohl(tvb,offset);
-  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(sa_opcode, lustre_mds_reint_t_vals, "Unknown sa_opc"));
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(sa_opcode, lustre_mds_reint_op_vals, "Unknown sa_opc"));
 
   offset=lustre_dissect_element_mdt_rec_setattr_sa_opcode(tvb, offset, pinfo, tree);
 
@@ -3376,7 +3741,7 @@ lustre_dissect_struct_mdt_rec_setattr(tvbuff_t *tvb _U_, int offset _U_, packet_
 
   offset=lustre_dissect_element_mdt_rec_setattr_sa_padding_2(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_mdt_rec_setattr_sa_padding_3(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_mdt_rec_setattr_sa_projid(tvb, offset, pinfo, tree);
 
   offset=lustre_dissect_element_mdt_rec_setattr_sa_padding_4(tvb, offset, pinfo, tree);
 
@@ -3413,7 +3778,7 @@ lustre_dissect_struct_mdt_rec_setattr(tvbuff_t *tvb _U_, int offset _U_, packet_
 /* IDL:        uint32 cr_bias; */
 /* IDL:        uint32 cr_flags_l; */
 /* IDL:        uint32 cr_flags_h; */
-/* IDL:        uint32 cr_padding_3; */
+/* IDL:        uint32 cr_umask; */
 /* IDL:        uint32 cr_padding_4; */
 /* IDL: } */
 
@@ -3588,9 +3953,9 @@ lustre_dissect_element_mdt_rec_create_cr_flags_h(tvbuff_t *tvb _U_, int offset _
 }
 
 static int
-lustre_dissect_element_mdt_rec_create_cr_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_mdt_rec_create_cr_umask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_mdt_rec_create_cr_padding_3);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_mdt_rec_create_cr_umask);
 
   return offset;
 }
@@ -3604,15 +3969,16 @@ lustre_dissect_element_mdt_rec_create_cr_padding_4(tvbuff_t *tvb _U_, int offset
 }
 
 int
-lustre_dissect_struct_mdt_rec_create(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+lustre_dissect_struct_mdt_rec_create(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;
   guint32 cr_opcode ;
 
-
-
   old_offset=offset;
 
   if (parent_tree) {
@@ -3620,7 +3986,7 @@ lustre_dissect_struct_mdt_rec_create(tvbuff_t *tvb _U_, int offset _U_, packet_i
     tree = proto_item_add_subtree(item, ett_lustre_mdt_rec_create);
   }
   cr_opcode=tvb_get_letohl(tvb,offset);
-  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(cr_opcode, lustre_mds_reint_t_vals, "Unknown cr_opc"));
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(cr_opcode, lustre_mds_reint_op_vals, "Unknown cr_opc"));
 
   offset=lustre_dissect_element_mdt_rec_create_cr_opcode(tvb, offset, pinfo, tree);
 
@@ -3664,14 +4030,12 @@ lustre_dissect_struct_mdt_rec_create(tvbuff_t *tvb _U_, int offset _U_, packet_i
 
   offset=lustre_dissect_element_mdt_rec_create_cr_flags_h(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_mdt_rec_create_cr_padding_3(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_mdt_rec_create_cr_umask(tvb, offset, pinfo, tree);
 
   offset=lustre_dissect_element_mdt_rec_create_cr_padding_4(tvb, offset, pinfo, tree);
 
-
   proto_item_set_len(item, offset-old_offset);
 
-
   return offset;
 }
 
@@ -3907,7 +4271,7 @@ lustre_dissect_struct_mdt_rec_link(tvbuff_t *tvb _U_, int offset _U_, packet_inf
     tree = proto_item_add_subtree(item, ett_lustre_mdt_rec_link);
   }
   lk_opcode=tvb_get_letohl(tvb,offset);
-  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(lk_opcode, lustre_mds_reint_t_vals, "Unknown lk_opc"));
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(lk_opcode, lustre_mds_reint_op_vals, "Unknown lk_opc"));
 
   offset=lustre_dissect_element_mdt_rec_link_lk_opcode(tvb, offset, pinfo, tree);
 
@@ -4193,7 +4557,7 @@ lustre_dissect_struct_mdt_rec_unlink(tvbuff_t *tvb _U_, int offset _U_, packet_i
   }
 
   ul_opcode=tvb_get_letohl(tvb,offset);
-  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(ul_opcode, lustre_mds_reint_t_vals, "Unknown ul_opc"));
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(ul_opcode, lustre_mds_reint_op_vals, "Unknown ul_opc"));
 
   offset=lustre_dissect_element_mdt_rec_unlink_ul_opcode(tvb, offset, pinfo, tree);
 
@@ -4469,7 +4833,7 @@ lustre_dissect_struct_mdt_rec_rename(tvbuff_t *tvb _U_, int offset _U_, packet_i
   }
 
   rn_opcode=tvb_get_letohl(tvb,offset);
-  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(rn_opcode, lustre_mds_reint_t_vals, "Unknown rn_opc"));
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(rn_opcode, lustre_mds_reint_op_vals, "Unknown rn_opc"));
 
   offset=lustre_dissect_element_mdt_rec_rename_rn_opcode(tvb, offset, pinfo, tree);
 
@@ -4759,7 +5123,7 @@ lustre_dissect_element_mdt_rec_setxattr_sx_padding_11(tvbuff_t *tvb _U_, int off
 }
 
 int
-lustre_dissect_struct_mdt_rec_setxattr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+ lustre_dissect_struct_mdt_rec_setxattr(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;
@@ -4775,7 +5139,7 @@ lustre_dissect_struct_mdt_rec_setxattr(tvbuff_t *tvb _U_, int offset _U_, packet
     tree = proto_item_add_subtree(item, ett_lustre_mdt_rec_setxattr);
   }
   sx_opcode=tvb_get_letohl(tvb,offset);
-  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(sx_opcode, lustre_mds_reint_t_vals, "Unknown sx_opc"));
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(sx_opcode, lustre_mds_reint_op_vals, "Unknown sx_opc"));
 
   offset=lustre_dissect_element_mdt_rec_setxattr_sx_opcode(tvb, offset, pinfo, tree);
 
@@ -4989,18 +5353,13 @@ lustre_dissect_struct_lov_desc(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 static int
 lustre_dissect_struct_obd_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
 {
-
   /* the lenght of the string is 40 bytes max, with  \0 inside */
-
   proto_tree_add_item(parent_tree, hf_index, tvb, offset, 40, TRUE);
 
-
   offset+=40;
   return offset;
 }
 
-
-
 /* IDL: struct ldlm_res_id { */
 /* IDL:        uint64 name[4]; */
 /* IDL: } */
@@ -5063,7 +5422,7 @@ lustre_dissect_struct_ldlm_res_id(tvbuff_t *tvb _U_, int offset _U_, packet_info
 /* IDL: } */
 
 int
-lustre_dissect_enum_ldlm_mode_t(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_)
+lustre_dissect_enum_ldlm_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_)
 {
   offset=dissect_uint32(tvb, offset, pinfo, tree, hf_index);
   return offset;
@@ -5079,7 +5438,7 @@ lustre_dissect_enum_ldlm_mode_t(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 /* IDL: } */
 
 int
-lustre_dissect_enum_ldlm_type_t(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_)
+lustre_dissect_enum_ldlm_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_)
 {
   offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_resource_desc_lr_type );
   return offset;
@@ -5264,20 +5623,28 @@ lustre_dissect_struct_ldlm_flock(tvbuff_t *tvb _U_, int offset _U_, packet_info
 /* IDL: } */
 
 static int
-lustre_dissect_element_ldlm_intent_opc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  guint32 opcode;
-  /* this opcode is like a flag*/
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_open    );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_creat   );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_readdir );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_getattr );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_lookup  );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_unlink  );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_getxattr);
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_exec    );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_pin     );
-  opcode = tvb_get_letohl(tvb,offset);
+lustre_dissect_element_ldlm_intent_opc(tvbuff_t *tvb _U_, int offset _U_,
+                                      packet_info *pinfo _U_,
+                                      proto_tree *tree _U_)
+{
+       guint32 opcode;
+       /* this opcode is like a flag*/
+#define DOBIT(_hf) dissect_uint32(tvb, offset, pinfo, tree, (_hf))
+       DOBIT(hf_lustre_ldlm_intent_opc_open    );
+       DOBIT(hf_lustre_ldlm_intent_opc_creat   );
+       DOBIT(hf_lustre_ldlm_intent_opc_readdir );
+       DOBIT(hf_lustre_ldlm_intent_opc_getattr );
+       DOBIT(hf_lustre_ldlm_intent_opc_lookup  );
+       DOBIT(hf_lustre_ldlm_intent_opc_unlink  );
+       DOBIT(hf_lustre_ldlm_intent_opc_getxattr);
+       DOBIT(hf_lustre_ldlm_intent_opc_exec    );
+       DOBIT(hf_lustre_ldlm_intent_opc_pin     );
+       DOBIT(hf_lustre_ldlm_intent_opc_layout  );
+       DOBIT(hf_lustre_ldlm_intent_opc_q_dqacq );
+       DOBIT(hf_lustre_ldlm_intent_opc_q_conn  );
+       DOBIT(hf_lustre_ldlm_intent_opc_setxattr);
+#undef DOBIT
+       opcode = tvb_get_letohl(tvb,offset);
 
   display_info_str(tree->parent, pinfo->cinfo, COL_INFO, "[ intent :");
   if(opcode & IT_OPEN    ){
@@ -5304,6 +5671,10 @@ lustre_dissect_element_ldlm_intent_opc(tvbuff_t *tvb _U_, int offset _U_, packet
     display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " unlink");
     proto_item_append_text(tree, " unlink" );
   }
+  if(opcode & IT_TRUNC   ){
+         display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " trunc");
+         proto_item_append_text(tree, " trunc" );
+  }
   if(opcode & IT_GETXATTR){
     display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " getxattr");
     proto_item_append_text(tree, " getxattr" );
@@ -5316,6 +5687,22 @@ lustre_dissect_element_ldlm_intent_opc(tvbuff_t *tvb _U_, int offset _U_, packet
     display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " pin");
     proto_item_append_text(tree, " pin" );
   }
+  if(opcode & IT_LAYOUT  ){
+         display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " layout");
+         proto_item_append_text(tree, " layout" );
+  }
+  if(opcode & IT_QUOTA_DQACQ ){
+         display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " quota_dqacq");
+         proto_item_append_text(tree, " quota_dqacq" );
+  }
+  if(opcode & IT_QUOTA_CONN  ){
+         display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " quota_conn");
+         proto_item_append_text(tree, " quota_conn" );
+  }
+  if(opcode & IT_SETXATTR    ){
+         display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " setxattr");
+         proto_item_append_text(tree, " setxattr" );
+  }
 
   display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " ]");
   offset+=8;
@@ -5325,22 +5712,10 @@ lustre_dissect_element_ldlm_intent_opc(tvbuff_t *tvb _U_, int offset _U_, packet
 int
 lustre_dissect_struct_ldlm_intent(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;
   guint64 intent_opc;
   proto_item * opcode_item = NULL;
   proto_tree * opcode_tree = NULL;
 
-  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_ldlm_intent);
-  //     //tree = parent_tree; /* TODO : !!!!!!!!!!!!!!! ATTENTIon Ã  revoir,
-  //     //fait rapidement pour ne pas avoir le subtree */
-  // }
-
-
   intent_opc = tvb_get_letoh64(tvb,offset);
   if (parent_tree){
     opcode_item = proto_tree_add_item(parent_tree, hf_lustre_ldlm_intent_opc, tvb, offset, 8, TRUE);
@@ -5351,15 +5726,13 @@ lustre_dissect_struct_ldlm_intent(tvbuff_t *tvb _U_, int offset _U_, packet_info
 
   offset=ldlm_opcode_process(tvb, offset, pinfo, parent_tree, intent_opc);
 
-
-
   return offset;
 }
 
 /* IDL: struct ldlm_resource_desc { */
-/* IDL:        ldlm_type_t lr_type; */
-/* IDL:        uint32 lr_padding; */
-/* IDL:        struct ldlm_res_id { */
+/* IDL:                enum ldlm_type lr_type; */
+/* IDL:                uint32 lr_padding; */
+/* IDL:                struct ldlm_res_id { */
 /* IDL: } lr_name; */
 /* IDL: } */
 
@@ -5367,7 +5740,7 @@ static int
 lustre_dissect_element_ldlm_resource_desc_lr_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
   /*    offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_ldlm_resource_desc_lr_type);*/
-  offset=lustre_dissect_enum_ldlm_type_t(tvb, offset, pinfo, tree,  hf_lustre_ldlm_resource_desc_lr_type);
+  offset=lustre_dissect_enum_ldlm_type(tvb, offset, pinfo, tree,  hf_lustre_ldlm_resource_desc_lr_type);
   return offset;
 }
 
@@ -5416,11 +5789,11 @@ lustre_dissect_struct_ldlm_resource_desc(tvbuff_t *tvb _U_, int offset _U_, pack
 
 
 /* IDL: struct ldlm_lock_desc { */
-/* IDL:        struct ldlm_resource_desc { */
-/* IDL: } l_resource; */
-/* IDL:        ldlm_mode_t l_req_mode; */
-/* IDL:        ldlm_mode_t l_granted_mode; */
-/* IDL:        ldlm_policy_data_t l_policy_data; */
+/* IDL:                struct ldlm_resource_desc { */
+/* IDL:                } l_resource; */
+/* IDL:                enum ldlm_mode l_req_mode; */
+/* IDL:                enum ldlm_mode l_granted_mode; */
+/* IDL:                union ldlm_policy_data l_policy_data; */
 /* IDL: } */
 
 static int
@@ -5433,7 +5806,7 @@ lustre_dissect_element_ldlm_lock_desc_l_resource(tvbuff_t *tvb _U_, int offset _
 static int
 lustre_dissect_element_ldlm_lock_desc_l_req_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=lustre_dissect_enum_ldlm_mode_t(tvb, offset, pinfo, tree,  hf_lustre_ldlm_lock_desc_l_req_mode);
+  offset=lustre_dissect_enum_ldlm_mode(tvb, offset, pinfo, tree,  hf_lustre_ldlm_lock_desc_l_req_mode);
 
   return offset;
 }
@@ -5441,7 +5814,7 @@ lustre_dissect_element_ldlm_lock_desc_l_req_mode(tvbuff_t *tvb _U_, int offset _
 static int
 lustre_dissect_element_ldlm_lock_desc_l_granted_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=lustre_dissect_enum_ldlm_mode_t(tvb, offset, pinfo, tree,  hf_lustre_ldlm_lock_desc_l_granted_mode);
+  offset=lustre_dissect_enum_ldlm_mode(tvb, offset, pinfo, tree,  hf_lustre_ldlm_lock_desc_l_granted_mode);
 
   return offset;
 }
@@ -5503,7 +5876,7 @@ lustre_dissect_struct_ldlm_lock_desc(tvbuff_t *tvb _U_, int offset _U_, packet_i
 
   lock_req_mode = tvb_get_letohl(tvb,offset);
 
-  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(lock_req_mode, lustre_ldlm_mode_t_vals, "Unknown lock"));
+  display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(lock_req_mode, lustre_ldlm_mode_vals, "Unknown lock"));
 
   offset=lustre_dissect_element_ldlm_lock_desc_l_req_mode(tvb, offset, pinfo, tree);
 
@@ -5519,12 +5892,12 @@ lustre_dissect_struct_ldlm_lock_desc(tvbuff_t *tvb _U_, int offset _U_, packet_i
 
 
 /* IDL: struct ldlm_request { */
-/* IDL:        uint32 lock_flags; */
-/* IDL:        uint32 lock_count; */
-/* IDL:        struct ldlm_lock_desc { */
-/* IDL: } lock_desc; */
-/* IDL:        struct lustre_handle { */
-/* IDL: } lock_handle[2]; */
+/* IDL:                uint32 lock_flags; */
+/* IDL:                uint32 lock_count; */
+/* IDL:                struct ldlm_lock_desc { */
+/* IDL:                } lock_desc; */
+/* IDL:                struct lustre_handle { */
+/* IDL:                } lock_handle[2]; */
 /* IDL: } */
 
 
@@ -5549,7 +5922,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);
@@ -5557,10 +5929,12 @@ lustre_dissect_element_ldlm_request_lock_handle_(tvbuff_t *tvb _U_, int offset _
 }
 
 static int
-lustre_dissect_element_ldlm_request_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_ldlm_request_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int num_locks _U_)
 {
   int i;
-  for (i = 0; i < 2; i++)
+  if (num_locks < 2)
+    num_locks = 2;
+  for (i = 0; i < num_locks; i++)
     offset=lustre_dissect_element_ldlm_request_lock_handle_(tvb, offset, pinfo, tree);
 
   return offset;
@@ -5572,8 +5946,9 @@ lustre_dissect_struct_ldlm_request(tvbuff_t *tvb _U_, int offset _U_, packet_inf
   proto_item *item = NULL;
   proto_tree *tree = NULL;
   int old_offset;
-  guint32 lock_flag ;
-  guint32 ldlm_type;
+  /* guint32 lock_flag; */
+  /* guint32 ldlm_type; */
+  guint32 num_locks = 2;
 
   old_offset=offset;
 
@@ -5582,80 +5957,23 @@ lustre_dissect_struct_ldlm_request(tvbuff_t *tvb _U_, int offset _U_, packet_inf
     tree = proto_item_add_subtree(item, ett_lustre_ldlm_request);
   }
 
-  lock_flag = tvb_get_letohl(tvb,offset);
-  offset=lustre_dissect_element_ldlm_lock_flags(tvb, offset, pinfo, tree, hf_lustre_ldlm_request_lock_flags);
+  /* lock_flag = tvb_get_letohl(tvb,offset); */
+  offset=lustre_dissect_element_ldlm_lock_flags(tvb, offset, pinfo, tree,
+                                               hf_lustre_ldlm_request_lock_flags);
 
+  num_locks = tvb_get_letohl(tvb,offset);
   offset=lustre_dissect_element_ldlm_request_lock_count(tvb, offset, pinfo, tree);
 
   /* ldlm_type = (EXTENT, PLAIN, ou IBITS) */
-  ldlm_type = tvb_get_letohl(tvb,offset);
+  /* ldlm_type = tvb_get_letohl(tvb,offset); */
   offset=lustre_dissect_element_ldlm_request_lock_desc(tvb, offset, pinfo, tree);
-  offset=lustre_dissect_element_ldlm_request_lock_handle(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_ldlm_request_lock_handle(tvb, offset, pinfo, tree, num_locks);
 
   proto_item_set_len(item, offset-old_offset);
 
   return offset;
 }
 
-
-
-
-/* IDL: struct ldlm_reply { */
-/* IDL:        uint32 lock_flags; */
-/* IDL:        uint32 lock_padding; */
-/* IDL:        struct ldlm_lock_desc { */
-/* IDL: } lock_desc; */
-/* IDL:        struct lustre_handle { */
-/* IDL: } lock_handle; */
-/* IDL:        uint64 lock_policy_res1; */
-/* IDL:        uint64 lock_policy_res2; */
-/* IDL: } */
-
-
-static int
-lustre_dissect_element_ldlm_lock_flags(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;
-
-  if (parent_tree) {
-    item = proto_tree_add_item(parent_tree,hf_index, tvb, offset, 4, TRUE);
-    tree = proto_item_add_subtree(item, ett_lustre_ldlm_lock_flags);
-  }
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_ast_discard_data);
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_deny_on_contention);
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_bl_done           );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_bl_ast            );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_atomic_cb         );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_cleaned           );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_cp_reqd           );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_cancel_on_block   );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_no_lru            );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_kms_ignore        );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_lvb_ready         );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_test_lock         );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_block_nowait      );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_no_timeout        );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_discard_data      );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_warn              );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_local             );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_canceling         );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_has_intent        );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_failed            );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_local_only        );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_intent_only       );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_replay            );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_cancel            );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_wait_noreproc     );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_ast_sent          );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_cbpending         );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_block_wait        );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_block_conv        );
-  dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_block_granted     );
-  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_fl_lock_changed      );
-  return offset;
-}
-
 static int
 lustre_dissect_element_ldlm_reply_lock_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
@@ -5674,7 +5992,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);
@@ -5703,8 +6020,7 @@ lustre_dissect_struct_ldlm_reply(tvbuff_t *tvb _U_, int offset _U_, packet_info
   proto_item *item = NULL;
   proto_tree *tree = NULL;
   int old_offset;
-
-  guint32 lock_flag ;
+  /* guint32 lock_flag; */
 
   old_offset=offset;
 
@@ -5713,7 +6029,7 @@ lustre_dissect_struct_ldlm_reply(tvbuff_t *tvb _U_, int offset _U_, packet_info
     tree = proto_item_add_subtree(item, ett_lustre_ldlm_reply);
   }
 
-  lock_flag = tvb_get_letohl(tvb,offset);
+  /* lock_flag = tvb_get_letohl(tvb,offset); */
   offset=lustre_dissect_element_ldlm_lock_flags(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply_lock_flags);
 
   offset=lustre_dissect_element_ldlm_reply_lock_padding(tvb, offset, pinfo, tree);
@@ -5783,6 +6099,99 @@ lustre_dissect_struct_mgs_send_param(tvbuff_t *tvb _U_, int offset _U_, packet_i
   return offset;
 }
 
+/* IDL: struct mgs_config_body {
+ * IDL:        char     mcb_name[64];
+ * IDL:        __u64    mcb_offset;
+ * IDL:        __u16    mcb_type;
+ * IDL:        __u8     mcb_reserved;
+ * IDL:        __u8     mcb_bits;
+ * IDL:        __u32    mcb_units;
+ * IDL: };
+ */
+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);
+#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;
+}
+
+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;
+
+       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);
+       }
+
+       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);
+
+       proto_item_set_len(item, offset-old_offset);
+
+       return offset;
+}
+
+/* IDL: struct mgs_config_res {
+ * IDL:        __u64    mcr_offset;
+ * IDL:        __u64    mcr_size;
+ * IDL: };
+ */
+int
+lustre_dissect_struct_mgs_config_res(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_mgs_config_res);
+  }
+
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mgs_config_res_offset);
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mgs_config_res_size);
+
+  proto_item_set_len(item, offset-old_offset);
+
+  return offset;
+}
+
+
 /* IDL: struct mgs_target_info { */
 /* IDL:        uint32 mti_lustre_ver; */
 /* IDL:        uint32 mti_stripe_index; */
@@ -6488,68 +6897,59 @@ lustre_dissect_struct_llog_logid_rec(tvbuff_t *tvb _U_, int offset _U_, packet_i
   return offset;
 }
 
-/* IDL: struct llog_create_rec { */
+
+
+
+/* IDL: struct llog_unlink_rec { */
 /* IDL:        struct llog_rec_hdr { */
-/* IDL: } lcr_hdr; */
-/* IDL:        struct ll_fid { */
-/* IDL: } lcr_fid; */
-/* IDL:        uint64 lcr_oid; */
-/* IDL:        uint32 lcr_ogen; */
+/* IDL: } lur_hdr; */
+/* IDL:        uint64 lur_oid; */
+/* IDL:        uint32 lur_ogen; */
 /* IDL:        uint32 padding; */
 /* IDL:        struct llog_rec_tail { */
-/* IDL: } lcr_tail; */
+/* IDL: } lur_tail; */
 /* IDL: } */
 
 static int
-lustre_dissect_element_llog_create_rec_lcr_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85d56e0)(tvb,offset,pinfo,tree,hf_lustre_llog_create_rec_lcr_hdr);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_create_rec_lcr_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_unlink_rec_lur_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  //offset=lustre_dissect_struct_HASH(0x85d5830)(tvb,offset,pinfo,tree,hf_lustre_llog_create_rec_lcr_fid);
-
+  //offset=lustre_dissect_struct_HASH(0x85d8730)(tvb,offset,pinfo,tree,hf_lustre_llog_unlink_rec_lur_hdr);
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_create_rec_lcr_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_unlink_rec_lur_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_create_rec_lcr_oid);
+  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_unlink_rec_lur_oid);
 
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_create_rec_lcr_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_unlink_rec_lur_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_create_rec_lcr_ogen);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_unlink_rec_lur_ogen);
 
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_create_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_unlink_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_create_rec_padding);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_unlink_rec_padding);
 
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_create_rec_lcr_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_unlink_rec_lur_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  //offset=lustre_dissect_struct_HASH(0x85d69dc)(tvb,offset,pinfo,tree,hf_lustre_llog_create_rec_lcr_tail);
-
+  //offset=lustre_dissect_struct_HASH(0x85d9664)(tvb,offset,pinfo,tree,hf_lustre_llog_unlink_rec_lur_tail);
   return offset;
 }
 
 int
-lustre_dissect_struct_llog_create_rec(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+lustre_dissect_struct_llog_unlink_rec(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;
@@ -6561,20 +6961,18 @@ lustre_dissect_struct_llog_create_rec(tvbuff_t *tvb _U_, int offset _U_, packet_
 
   if (parent_tree) {
     item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-    tree = proto_item_add_subtree(item, ett_lustre_llog_create_rec);
+    tree = proto_item_add_subtree(item, ett_lustre_llog_unlink_rec);
   }
 
-  offset=lustre_dissect_element_llog_create_rec_lcr_hdr(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_create_rec_lcr_fid(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_unlink_rec_lur_hdr(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_create_rec_lcr_oid(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_unlink_rec_lur_oid(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_create_rec_lcr_ogen(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_unlink_rec_lur_ogen(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_create_rec_padding(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_unlink_rec_padding(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_create_rec_lcr_tail(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_unlink_rec_lur_tail(tvb, offset, pinfo, tree);
 
 
   proto_item_set_len(item, offset-old_offset);
@@ -6584,58 +6982,74 @@ lustre_dissect_struct_llog_create_rec(tvbuff_t *tvb _U_, int offset _U_, packet_
 
 
 
-
-/* IDL: struct llog_orphan_rec { */
+/* IDL: struct llog_setattr_rec { */
 /* IDL:        struct llog_rec_hdr { */
-/* IDL: } lor_hdr; */
-/* IDL:        uint64 lor_oid; */
-/* IDL:        uint32 lor_ogen; */
+/* IDL: } lsr_hdr; */
+/* IDL:        uint64 lsr_oid; */
+/* IDL:        uint32 lsr_ogen; */
+/* IDL:        uint32 lsr_uid; */
+/* IDL:        uint32 lsr_gid; */
 /* IDL:        uint32 padding; */
 /* IDL:        struct llog_rec_tail { */
-/* IDL: } lor_tail; */
+/* IDL: } lsr_tail; */
 /* IDL: } */
 
 static int
-lustre_dissect_element_llog_orphan_rec_lor_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_setattr_rec_lsr_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+{
+  //offset=lustre_dissect_struct_HASH(0x85da2f0)(tvb,offset,pinfo,tree,hf_lustre_llog_setattr_rec_lsr_hdr);
+  return offset;
+}
+
+static int
+lustre_dissect_element_llog_setattr_rec_lsr_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+{
+  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_oid);
+
+  return offset;
+}
+
+static int
+lustre_dissect_element_llog_setattr_rec_lsr_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  //offset=lustre_dissect_struct_HASH(0x85d767c)(tvb,offset,pinfo,tree,hf_lustre_llog_orphan_rec_lor_hdr);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_ogen);
 
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_orphan_rec_lor_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_setattr_rec_lsr_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_orphan_rec_lor_oid);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_uid);
 
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_orphan_rec_lor_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_setattr_rec_lsr_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_orphan_rec_lor_ogen);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_gid);
 
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_orphan_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_setattr_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_orphan_rec_padding);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_padding);
 
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_orphan_rec_lor_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_setattr_rec_lsr_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  //offset=lustre_dissect_struct_HASH(0x85d8550)(tvb,offset,pinfo,tree,hf_lustre_llog_orphan_rec_lor_tail);
+  //offset=lustre_dissect_struct_HASH(0x85db3d4)(tvb,offset,pinfo,tree,hf_lustre_llog_setattr_rec_lsr_tail);
   return offset;
 }
 
 int
-lustre_dissect_struct_llog_orphan_rec(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+lustre_dissect_struct_llog_setattr_rec(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;
@@ -6647,18 +7061,22 @@ lustre_dissect_struct_llog_orphan_rec(tvbuff_t *tvb _U_, int offset _U_, packet_
 
   if (parent_tree) {
     item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-    tree = proto_item_add_subtree(item, ett_lustre_llog_orphan_rec);
+    tree = proto_item_add_subtree(item, ett_lustre_llog_setattr_rec);
   }
 
-  offset=lustre_dissect_element_llog_orphan_rec_lor_hdr(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_setattr_rec_lsr_hdr(tvb, offset, pinfo, tree);
+
+  offset=lustre_dissect_element_llog_setattr_rec_lsr_oid(tvb, offset, pinfo, tree);
+
+  offset=lustre_dissect_element_llog_setattr_rec_lsr_ogen(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_orphan_rec_lor_oid(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_setattr_rec_lsr_uid(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_orphan_rec_lor_ogen(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_setattr_rec_lsr_gid(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_orphan_rec_padding(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_setattr_rec_padding(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_llog_orphan_rec_lor_tail(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_llog_setattr_rec_lsr_tail(tvb, offset, pinfo, tree);
 
 
   proto_item_set_len(item, offset-old_offset);
@@ -6668,222 +7086,36 @@ lustre_dissect_struct_llog_orphan_rec(tvbuff_t *tvb _U_, int offset _U_, packet_
 
 
 
-/* IDL: struct llog_unlink_rec { */
+
+/* IDL: struct llog_size_change_rec { */
 /* IDL:        struct llog_rec_hdr { */
-/* IDL: } lur_hdr; */
-/* IDL:        uint64 lur_oid; */
-/* IDL:        uint32 lur_ogen; */
+/* IDL: } lsc_hdr; */
+/* IDL:        struct ll_fid { */
+/* IDL: } lsc_fid; */
+/* IDL:        uint32 lsc_io_epoch; */
 /* IDL:        uint32 padding; */
 /* IDL:        struct llog_rec_tail { */
-/* IDL: } lur_tail; */
+/* IDL: } lsc_tail; */
 /* IDL: } */
 
 static int
-lustre_dissect_element_llog_unlink_rec_lur_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_size_change_rec_lsc_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  //offset=lustre_dissect_struct_HASH(0x85d8730)(tvb,offset,pinfo,tree,hf_lustre_llog_unlink_rec_lur_hdr);
+  //offset=lustre_dissect_struct_HASH(0x85dc458)(tvb,offset,pinfo,tree,hf_lustre_llog_size_change_rec_lsc_hdr);
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_unlink_rec_lur_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_size_change_rec_lsc_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_unlink_rec_lur_oid);
-
+  //offset=lustre_dissect_struct_HASH(0x85dc5a8)(tvb,offset,pinfo,tree,hf_lustre_llog_size_change_rec_lsc_fid);
   return offset;
 }
 
 static int
-lustre_dissect_element_llog_unlink_rec_lur_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_llog_size_change_rec_lsc_io_epoch(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_unlink_rec_lur_ogen);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_unlink_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_unlink_rec_padding);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_unlink_rec_lur_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85d9664)(tvb,offset,pinfo,tree,hf_lustre_llog_unlink_rec_lur_tail);
-  return offset;
-}
-
-int
-lustre_dissect_struct_llog_unlink_rec(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_llog_unlink_rec);
-  }
-
-  offset=lustre_dissect_element_llog_unlink_rec_lur_hdr(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_unlink_rec_lur_oid(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_unlink_rec_lur_ogen(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_unlink_rec_padding(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_unlink_rec_lur_tail(tvb, offset, pinfo, tree);
-
-
-  proto_item_set_len(item, offset-old_offset);
-
-  return offset;
-}
-
-
-
-/* IDL: struct llog_setattr_rec { */
-/* IDL:        struct llog_rec_hdr { */
-/* IDL: } lsr_hdr; */
-/* IDL:        uint64 lsr_oid; */
-/* IDL:        uint32 lsr_ogen; */
-/* IDL:        uint32 lsr_uid; */
-/* IDL:        uint32 lsr_gid; */
-/* IDL:        uint32 padding; */
-/* IDL:        struct llog_rec_tail { */
-/* IDL: } lsr_tail; */
-/* IDL: } */
-
-static int
-lustre_dissect_element_llog_setattr_rec_lsr_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85da2f0)(tvb,offset,pinfo,tree,hf_lustre_llog_setattr_rec_lsr_hdr);
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_setattr_rec_lsr_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_oid);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_setattr_rec_lsr_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_ogen);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_setattr_rec_lsr_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_uid);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_setattr_rec_lsr_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_lsr_gid);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_setattr_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_setattr_rec_padding);
-
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_setattr_rec_lsr_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85db3d4)(tvb,offset,pinfo,tree,hf_lustre_llog_setattr_rec_lsr_tail);
-  return offset;
-}
-
-int
-lustre_dissect_struct_llog_setattr_rec(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_llog_setattr_rec);
-  }
-
-  offset=lustre_dissect_element_llog_setattr_rec_lsr_hdr(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_setattr_rec_lsr_oid(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_setattr_rec_lsr_ogen(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_setattr_rec_lsr_uid(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_setattr_rec_lsr_gid(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_setattr_rec_padding(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_setattr_rec_lsr_tail(tvb, offset, pinfo, tree);
-
-
-  proto_item_set_len(item, offset-old_offset);
-
-  return offset;
-}
-
-
-
-
-/* IDL: struct llog_size_change_rec { */
-/* IDL:        struct llog_rec_hdr { */
-/* IDL: } lsc_hdr; */
-/* IDL:        struct ll_fid { */
-/* IDL: } lsc_fid; */
-/* IDL:        uint32 lsc_io_epoch; */
-/* IDL:        uint32 padding; */
-/* IDL:        struct llog_rec_tail { */
-/* IDL: } lsc_tail; */
-/* IDL: } */
-
-static int
-lustre_dissect_element_llog_size_change_rec_lsc_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85dc458)(tvb,offset,pinfo,tree,hf_lustre_llog_size_change_rec_lsc_hdr);
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_size_change_rec_lsc_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85dc5a8)(tvb,offset,pinfo,tree,hf_lustre_llog_size_change_rec_lsc_fid);
-  return offset;
-}
-
-static int
-lustre_dissect_element_llog_size_change_rec_lsc_io_epoch(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_size_change_rec_lsc_io_epoch);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_size_change_rec_lsc_io_epoch);
 
   return offset;
 }
@@ -7205,8 +7437,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) {
@@ -7236,7 +7466,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;
@@ -7506,7 +7735,8 @@ lustre_dissect_struct_llogd_conn_body(tvbuff_t *tvb _U_, int offset _U_, packet_
 /* IDL: } o_handle; */
 /* IDL:        struct llog_cookie { */
 /* IDL: } o_lcookie; */
-/* IDL:        uint64 o_padding_2; */
+/* IDL:        uint32 o_uid_h; */
+/* IDL:        uint32 o_gid_h; */
 /* IDL:        uint64 o_padding_3; */
 /* IDL:        uint64 o_padding_4; */
 /* IDL:        uint64 o_padding_5; */
@@ -7702,7 +7932,7 @@ lustre_dissect_element_obdo_o_stripe_idx(tvbuff_t *tvb _U_, int offset _U_, pack
 static int
 lustre_dissect_element_obdo_o_parent_ver(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_obdo_o_parent_ver);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_obdo_o_parent_ver);
 
   return offset;
 }
@@ -7722,9 +7952,17 @@ lustre_dissect_element_obdo_o_lcookie(tvbuff_t *tvb _U_, int offset _U_, packet_
 }
 
 static int
-lustre_dissect_element_obdo_o_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+lustre_dissect_element_obdo_o_uid_h(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+{
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_obdo_o_uid_h);
+
+  return offset;
+}
+
+static int
+lustre_dissect_element_obdo_o_gid_h(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_obdo_o_padding_2);
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_obdo_o_gid_h);
 
   return offset;
 }
@@ -7769,7 +8007,6 @@ lustre_dissect_struct_obdo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
   int old_offset;
 
 
-
   old_offset=offset;
 
   if (parent_tree) {
@@ -7823,7 +8060,9 @@ lustre_dissect_struct_obdo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 
   offset=lustre_dissect_element_obdo_o_lcookie(tvb, offset, pinfo, tree);
 
-  offset=lustre_dissect_element_obdo_o_padding_2(tvb, offset, pinfo, tree);
+  offset=lustre_dissect_element_obdo_o_uid_h(tvb, offset, pinfo, tree);
+
+  offset=lustre_dissect_element_obdo_o_gid_h(tvb, offset, pinfo, tree);
 
   offset=lustre_dissect_element_obdo_o_padding_3(tvb, offset, pinfo, tree);
 
@@ -7860,8 +8099,6 @@ lustre_dissect_struct_ost_body(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
   proto_tree *tree = NULL;
   int old_offset;
 
-
-
   old_offset=offset;
 
   if (parent_tree) {
@@ -7871,7 +8108,6 @@ lustre_dissect_struct_ost_body(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 
   offset=lustre_dissect_element_ost_body_oa(tvb, offset, pinfo, tree);
 
-
   proto_item_set_len(item, offset-old_offset);
 
   return offset;
@@ -8042,49 +8278,630 @@ lustre_dissect_element_qunit_data_old_qd_type(tvbuff_t *tvb _U_, int offset _U_,
   return offset;
 }
 
-static int
-lustre_dissect_element_qunit_data_old_qd_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_qunit_data_old_qd_count);
+static int
+lustre_dissect_element_qunit_data_old_qd_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+{
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_qunit_data_old_qd_count);
+
+  return offset;
+}
+
+static int
+lustre_dissect_element_qunit_data_old_qd_isblk(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+{
+  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_qunit_data_old_qd_isblk);
+
+  return offset;
+}
+
+int
+lustre_dissect_struct_qunit_data_old(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_qunit_data_old);
+  }
+
+  offset=lustre_dissect_element_qunit_data_old_qd_id(tvb, offset, pinfo, tree);
+
+  offset=lustre_dissect_element_qunit_data_old_qd_type(tvb, offset, pinfo, tree);
+
+  offset=lustre_dissect_element_qunit_data_old_qd_count(tvb, offset, pinfo, tree);
+
+  offset=lustre_dissect_element_qunit_data_old_qd_isblk(tvb, offset, pinfo, tree);
+
+
+  proto_item_set_len(item, offset-old_offset);
+
+  return offset;
+}
+
+int
+lustre_dissect_struct_seq(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);
+  /* Pad out to 8 bytes */
+  offset=add_extra_padding(tvb,offset,pinfo,parent_tree);
+
+  return offset;
+}
+
+int
+lustre_dissect_struct_seq_range(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _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_lustre_seq_range, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_seq_range);
+  }
+
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_seq_range_start);
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_seq_range_end);
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_seq_range_index);
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_seq_range_flags);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+
+  return offset;
+}
+
+int
+lustre_dissect_struct_fld_range(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _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_lustre_fld_range, tvb, offset, -1, TRUE);
+    tree = proto_item_add_subtree(item, ett_lustre_fld_range);
+  }
+
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_fld_range_start);
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_fld_range_end);
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_fld_range_index);
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_fld_range_flags);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+
+  return offset;
+}
+
+int
+lustre_dissect_struct_mdt_ioepoch(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_mdt_ioepoch);
+  }
+
+  offset=lustre_dissect_struct_handle_cookie(tvb, offset, pinfo, tree, hf_lustre_mdt_ioepoch_handle);
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mdt_ioepoch_ioepoch);
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mdt_ioepoch_flags);
+  offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mdt_ioepoch_padding);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+  return offset;
+}
+
+/* IDL: struct lustre_capa {
+ * IDL:         struct lu_fid   lc_fid;
+ * IDL:         __u64           lc_opc;
+ * IDL:         __u64           lc_uid;
+ * IDL:         __u64           lc_gid;
+ * IDL:         __u32           lc_flags;
+ * IDL:         __u32           lc_keyid;
+ * IDL:         __u32           lc_timeout;
+ * IDL:         __u32           lc_expiry;
+ * IDL:         __u8            lc_hmac[64];
+ * IDL: } __attribute__((packed));
+ */
+
+/** lustre_capa::lc_opc */
+/* enum { */
+/*         CAPA_OPC_BODY_WRITE   = 1<<0,  **< write object data  */
+/*         CAPA_OPC_BODY_READ    = 1<<1,  **< read object data  */
+/*         CAPA_OPC_INDEX_LOOKUP = 1<<2,  **< lookup object fid  */
+/*         CAPA_OPC_INDEX_INSERT = 1<<3,  **< insert object fid  */
+/*         CAPA_OPC_INDEX_DELETE = 1<<4,  **< delete object fid  */
+/*         CAPA_OPC_OSS_WRITE    = 1<<5,  **< write oss object data  */
+/*         CAPA_OPC_OSS_READ     = 1<<6,  **< read oss object data */
+/*         CAPA_OPC_OSS_TRUNC    = 1<<7,  **< truncate oss object */
+/*         CAPA_OPC_OSS_DESTROY  = 1<<8,  **< destroy oss object  */
+/*         CAPA_OPC_META_WRITE   = 1<<9,  **< write object meta data */
+/*         CAPA_OPC_META_READ    = 1<<10, **< read object meta data  */
+/* }; */
+
+int
+lustre_dissect_element_capa_opc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_)
+{
+  /* TODO - pick apart bits */
+  offset = dissect_uint64(tvb, offset, pinfo, parent_tree, hf_lustre_capa_opc);
+  return offset;
+}
+
+int
+lustre_dissect_element_capa_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_)
+{
+  /* TODO - pick apart flags */
+  offset=dissect_uint32(tvb,offset,pinfo,parent_tree,hf_lustre_capa_flags);
+  return offset;
+}
+
+int
+lustre_dissect_struct_capa(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_capa);
+  }
+
+  offset=lustre_dissect_struct_lu_fid(tvb,offset,pinfo,tree,hf_lustre_capa_fid);
+
+  offset=lustre_dissect_element_capa_opc(tvb,offset,pinfo,tree);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_capa_uid);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_capa_gid);
+
+  offset=lustre_dissect_element_capa_flags(tvb,offset,pinfo,tree);
+
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_capa_keyid);
+
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_capa_timeout);
+
+  offset=dissect_uint32(tvb,offset,pinfo,tree,hf_lustre_capa_expiry);
+
+  offset=lustre_dissect_struct_hmac(tvb,offset,pinfo,tree, hf_lustre_capa_hmac, 64);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+  return offset;
+}
+
+int
+lustre_dissect_struct_lquota_id(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_lquota_id);
+       }
+
+       offset=lustre_dissect_struct_lu_fid(tvb,offset,pinfo,tree,hf_lustre_qid_fid);
+       offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_qid_uid);
+       offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_qid_gid);
+
+       if (item)
+               proto_item_set_len(item, offset-old_offset);
+       return offset;
+}
+
+int
+lustre_dissect_struct_quota_body(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_quota_body);
+       }
+
+       offset = lustre_dissect_struct_lu_fid(tvb, offset, pinfo, tree, hf_lustre_qb_fid);
+       offset = lustre_dissect_struct_lquota_id(tvb, offset, pinfo, tree, hf_lustre_qb_id);
+       offset = dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qb_flags);
+       offset = dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qb_padding);
+       offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_qb_count);
+       offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_qb_usage);
+       offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_qb_slv_ver);
+       offset = lustre_dissect_struct_handle_cookie(tvb, offset, pinfo, tree,
+                                                    hf_lustre_qb_lockh);
+       offset = lustre_dissect_struct_handle_cookie(tvb, offset, pinfo, tree,
+                                                    hf_lustre_qb_glb_lockh);
+       offset = lustre_dissect_struct_element_data(tvb, offset, pinfo, tree,
+                                                   hf_lustre_qb_padding, 32);
+       if (item)
+               proto_item_set_len(item, offset-old_offset);
+       return offset;
+}
+
+int
+lustre_dissect_struct_layout_intent(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_layout_intent);
+       }
+
+       offset = dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_layout_intent_opc);
+       offset = dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_layout_intent_flags);
+       offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_layout_intent_start);
+       offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_layout_intent_end);
+       if (item)
+               proto_item_set_len(item, offset-old_offset);
+       return offset;
+}
+
+int
+lustre_dissect_struct_acl(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_acl);
+  }
+
+  proto_tree_add_item(tree, hf_index, tvb, offset, data_len, TRUE);
+
+  offset+=data_len;
+
+  offset=add_extra_padding(tvb,offset,pinfo,tree);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
+
+  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 { */
+/*        struct lu_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 { */
+/*     struct lu_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_element_qunit_data_old_qd_isblk(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+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, tree,  hf_lustre_qunit_data_old_qd_isblk);
-
+  offset=dissect_uint32(tvb,offset,pinfo,parent_tree,hf_index);
   return offset;
 }
 
-int
-lustre_dissect_struct_qunit_data_old(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+/* 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_qunit_data_old);
+    tree = proto_item_add_subtree(item, ett_lustre_hsm_user_state);
   }
 
-  offset=lustre_dissect_element_qunit_data_old_qd_id(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_qunit_data_old_qd_type(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_qunit_data_old_qd_count(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_qunit_data_old_qd_isblk(tvb, offset, pinfo, tree);
-
-
-  proto_item_set_len(item, offset-old_offset);
+  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;
 }
 
@@ -8101,62 +8918,152 @@ lustre_dissect_struct_qunit_data_old(tvbuff_t *tvb _U_, int offset _U_, packet_i
  * 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;
+
+       item = 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;
-
   int old_offset;
   guint32 string_len;
 
   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); }
-
-  if(buf_num+1>LUSTRE_BUFCOUNT)
+  string_len = LUSTRE_BUFFER_LEN(buf_num);
+  if(string_len == 0)
     return offset;
 
-  string_len = tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF + 4 * buf_num) ; /* 4 because a buflen is on a guint32 */
-  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) );
+  item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, string_len, TRUE);
 
   offset+=string_len;
   proto_item_set_len(item, offset-old_offset);
   offset=add_extra_padding(tvb,offset,pinfo,parent_tree); /* after a string we must be aligned to 8 bytes. */
 
-
   return offset;
 }
-
 /* ------------------------------------------------------------------------- */
-/* dissect raw data */
 static int
-lustre_dissect_element_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num)
+lustre_dissect_raw_nstr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                       proto_tree *parent_tree _U_, int hf_index _U_,
+                       guint32 max_len _U_)
 {
-  proto_item *item = NULL;
+       proto_item *item = NULL;
+       int old_offset, string_len;
+       char c;
 
-  guint32 data_len ;
-  int old_offset;
+       old_offset = offset;
 
-  old_offset=offset;
-  if(buf_num+1>LUSTRE_BUFCOUNT)
-    return offset;
+       string_len = -1;
+       do {
+               ++ string_len;
+               c = tvb_get_guint8(tvb, offset + string_len);
+       } while (string_len < max_len && c != '\0');
 
-  data_len = tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF + 4 * buf_num) ; /* 4 because a buflen is on a guint32 */
-  proto_tree_add_item(parent_tree, hf_index, tvb, offset, data_len, TRUE);
+       item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, string_len, TRUE);
+       offset += string_len+1;
+       proto_item_set_len(item, offset-old_offset);
+       return offset;
+}
 
-  offset+=data_len;
-  proto_item_set_len(item, offset-old_offset);
-  offset=add_extra_padding(tvb,offset,pinfo,parent_tree); /* align on 8 bytes */
+static int
+lustre_dissect_raw_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                       proto_tree *parent_tree _U_, int hf_index _U_,
+                       guint32 length _U_)
+{
+       proto_item *item = NULL;
 
-  return offset;
+       item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, length, TRUE);
+       proto_item_set_len(item, length);
+       return offset+length;
 }
-/* ------------------------------------------------------------------------ */
-
 
+int
+lustre_dissect_xattr_eavals(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint32 buff_num)
+{
+       /* ldlm_intent_getxattr_server : [eadata][eavals][eavals_lens] *
+        * array length == sizeof(eavals_lens)/sizeof(uint32)
+        * Buff 1: array of strings (name of xattr)
+        * Buff 2: array of data (data of xattr)
+        * Buff 3: array of data lengths (in buff 2)
+        */
+       int count, i, size;
+       int namestart, datastart, lenstart, namelen, datalen, lenlen;
+       int nameoffset, dataoffset;
+       proto_item *item = NULL;
+       proto_tree *tree = NULL;
+
+       namelen = LUSTRE_BUFFER_LEN(buff_num);
+       datalen = LUSTRE_BUFFER_LEN(buff_num+1);
+       lenlen = LUSTRE_BUFFER_LEN(buff_num+2);
+
+       count = lenlen / sizeof(guint32);
+
+       namestart = nameoffset = offset;
+       datastart = namestart + namelen;
+       datastart += (8- datastart%8)%8;
+       dataoffset = datastart;
+       lenstart = datastart + datalen;
+       lenstart += (8- lenstart%8)%8;
+
+       item = proto_tree_add_item(parent_tree, hf_lustre_xattrs, tvb, offset, -1, TRUE);
+       tree = proto_item_add_subtree(item, ett_lustre_xattrs);
+
+       for (i = 0; i < count; ++i) {
+               int sizeoffset;
+               sizeoffset = lenstart + sizeof(guint32)*i;
+               size = tvb_get_letohl(tvb, sizeoffset);
+
+               nameoffset = lustre_dissect_raw_nstr(tvb, nameoffset, pinfo, tree,
+                                                    hf_lustre_xattrs_name,
+                                                    (namestart+namelen)-nameoffset);
+               dataoffset = lustre_dissect_raw_data(tvb, dataoffset, pinfo, tree,
+                                                    hf_lustre_xattrs_data, size);
+               dissect_uint32(tvb, sizeoffset, pinfo, tree, hf_lustre_xattrs_size);
+       }
+
+       offset = lenstart + lenlen;
+       offset += (8- offset%8)%8;
+       proto_item_set_len(item, offset-namestart);
+       return offset;
+}
+
+
+/* Process REINT opcode requests */
 static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_)
 {
   guint32 opcode  ;
@@ -8165,57 +9072,90 @@ static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 
   switch(opcode){
     case  REINT_SETATTR:
-      /* [eadata][cookie_data][ldlm_request] */
-      offset=lustre_dissect_struct_mdt_rec_setattr(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_setattr);
+      /* 2.x+ [rec_setattr][capa1][mdt_epoch][eadata][cookie_data][ldlm_request] */
+      /* old? [rec_setattr][ldlm_request] */
+      offset=lustre_dissect_struct_mdt_rec_setattr(tvb, offset, pinfo, tree,
+                                                  hf_lustre_mdt_rec_setattr);
+      if (LUSTRE_BUFCOUNT > 2) {
+       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree,
+                                         hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
+       if (LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF+2) > 0)
+         offset=lustre_dissect_struct_mdt_ioepoch(tvb, offset, pinfo, tree,
+                                                  hf_lustre_mdt_ioepoch);
+       offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
+                                          hf_lustre_mds_xattr_eadata,
+                                          LUSTRE_REQ_REC_OFF+3);
+       if (LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF+4) > 0)
+         offset=lustre_dissect_struct_llog_cookie(tvb,offset,pinfo,tree,hf_lustre_llog_cookie);
+      }
       offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
-          hf_lustre_ldlm_request) ;
+                                               hf_lustre_ldlm_request);
       break;
     case REINT_CREATE :
       /* [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_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+1);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+2);  /* this string is all the time =="\0"*/
-      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
-          hf_lustre_ldlm_request) ;
+      offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
+      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);
+       offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
+                                                 hf_lustre_ldlm_request);
+      }
       break;
-    case  REINT_LINK   :
+    case  REINT_LINK:
       /*[mdt_rec_link][filename][ldlm_req] */
       offset=lustre_dissect_struct_mdt_rec_link(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_link);
-      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
-          hf_lustre_ldlm_request) ;
-      /*TODO : need to be check*/
+      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_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;
-    case  REINT_UNLINK : /* mds_unlink_unpack : [mdt_rec_unlink][filename][ldlm_req] */
-      /* [mdt_rec_unlink][filename][ldlm_req][..]*/
+    case  REINT_UNLINK:
+      /* reint_unlink_client: [mdt_rec_unlink][capa1][filename][ldlm_req] */
       offset=lustre_dissect_struct_mdt_rec_unlink(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_unlink);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+1);
-      if ( (tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF +2))) == 112) /* TODO : ugly .. but
-                                                                                        for now we have to do this */
+      offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
+      if (LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF+2) == 112) {
+       /* TODO : ugly .. but for now we have to do this */
         offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl);
-      else
-        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
 
+      } else {
+        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;
-    case  REINT_RENAME : /*mds_rename_unpack : [mdt_rec_rename][filename source][filename target_name][ldlm_request] */
+    case  REINT_RENAME: /*mds_rename_unpack : [mdt_rec_rename][filename source][filename target_name][ldlm_request] */
       offset=lustre_dissect_struct_mdt_rec_rename(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_rename);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_old_name, LUSTRE_REQ_REC_OFF+1);
-      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_new_name, LUSTRE_REQ_REC_OFF+2);
-      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
+      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_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] */
+    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_data(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata, LUSTRE_REQ_REC_OFF+2); /* TODO : replace with hf_eadata */
+      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 :
-      /* [eadata][cookie_data][ldlm_request] */
+    case  REINT_SETXATTR:
+      /* 2.x+ [rec_setxattr][capa1][name][eadata][dlm_req] */
+      /* old? [rec_setxattr][ldlm_request] */
       offset=lustre_dissect_struct_mdt_rec_setxattr(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_setxattr);
-      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
-          hf_lustre_ldlm_request) ;
+      if (LUSTRE_BUFCOUNT > 2) {
+       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_mds_xattr_name, LUSTRE_REQ_REC_OFF+2);
+       offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata_str,
+                                          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) ;
+      } else if (LUSTRE_BUFCOUNT == 2)
+       offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
+                                                 hf_lustre_ldlm_request);
       break;
-    default:
-      break;
-
   }
 
   return offset ;
@@ -8226,11 +9166,48 @@ 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);
+       /*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
+lustre_dissect_struct_lu_ladvise(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_ladvise);
+  }
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_lu_ladvise_lla_start);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_lu_ladvise_lla_end);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_lu_ladvise_lla_advice);
+
+  offset=dissect_uint64(tvb,offset,pinfo,tree,hf_lustre_lu_ladvise_lla_padding);
+
+  if (item)
+    proto_item_set_len(item, offset-old_offset);
   return offset;
 }
 
@@ -8244,9 +9221,13 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       break;
     case OST_GETATTR:
       offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
+      if (pb_type == PTL_RPC_MSG_REQUEST)
+         offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
       break;
     case OST_SETATTR:
       offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
+      if (pb_type == PTL_RPC_MSG_REQUEST)
+         offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
       break;
     case OST_READ: /* [OST_BODY][obd_ioobj][niobuf_remote] for request, [OST_BODY] for reply */
       offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
@@ -8256,72 +9237,71 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       }
       break;
     case OST_WRITE:
-      offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo,
-          tree, hf_lustre_ost_body) ;  /* [ost_body] in both case */
-      if(pb_type==PTL_RPC_MSG_REQUEST)
-      {
-        for (i=0;i<tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+ 4*(LUSTRE_REQ_REC_OFF+1))/24;i++)
+      offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree,
+                                           hf_lustre_ost_body);
+      if(pb_type==PTL_RPC_MSG_REQUEST) {
+        for (i = 0; i < (LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF+1))/24; i++)
           offset=lustre_dissect_struct_obd_ioobj(tvb, offset, pinfo, tree, hf_lustre_obd_ioobj);
         offset=lustre_dissect_struct_niobuf_remote(tvb,offset,pinfo, tree, hf_lustre_obd_ioobj);
       }
-      if(pb_type==PTL_RPC_MSG_REPLY) /* niocount *[uint32], but niocount is in request message, so
-                                        we use the bufcount */
-      {
-        for (i=0;i<tvb_get_letohl(tvb, LUSTRE_BUFCOUNT_OFF)-2;i++) /* -2 because we have already dissect 2 buffers : ptl + ost */
+      if(pb_type==PTL_RPC_MSG_REPLY) { /* niocount *[uint32], but niocount is in request message, so
+                                         we use the bufcount */
+        for (i = 0; i < LUSTRE_BUFCOUNT-2; i++) /* -2 because we have already dissect 2 buffers : ptl + ost */
           offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_nio);
-        if (i & 1 ) /* if odd we add extra padding */
-          offset=dissect_uint32(tvb, offset, pinfo, tree,
-              hf_lustre_extra_padding);
+       offset=add_extra_padding(tvb, offset, pinfo, tree);
       }
       break;
     case OST_CREATE:
       offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
+      if (pb_type == PTL_RPC_MSG_REQUEST)
+         offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
       break;
     case OST_DESTROY:
       offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
-      if(pb_type==PTL_RPC_MSG_REQUEST) /* [ost_body][-si buf- ldlm_request] */
-        if ( (tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF +1))) != 0)
-          offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ost_body);
-      /* TODO : test that */
+      if(pb_type==PTL_RPC_MSG_REQUEST) {/* [ost_body][ldlm_req][capa] */
+        if ( LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF +1) != 0)
+          offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request);
+       offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REPLY_REC_OFF+2);
+      }
       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+1);
-      }
+        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;
     case OST_PUNCH: /* [ost_body] */
       offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
+      if (pb_type == PTL_RPC_MSG_REQUEST)
+         offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
       break;
     case OST_OPEN: /* [nothing] in the code maybee obsolete */
       break;
     case OST_CLOSE: /* [nothing] in the code maybee obsolete */
       break;
-    case OST_STATFS: /* [obd_statfs] check that : TODO */
-      if(LUSTRE_BUFCOUNT>=2)
-        offset=lustre_dissect_struct_obd_statfs(tvb, offset, pinfo, tree, hf_lustre_obd_statfs) ;
+    case OST_STATFS: /* [obd_statfs] */
+      if (pb_type==PTL_RPC_MSG_REPLY)
+         offset=lustre_dissect_struct_obd_statfs(tvb, offset, pinfo, tree, hf_lustre_obd_statfs) ;
       break;
     case OST_SYNC:
       /*[ost_body] in both case */
       offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
+      if (pb_type == PTL_RPC_MSG_REQUEST)
+         offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
       break;
     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 */
@@ -8337,21 +9317,32 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     case OST_QUOTA_ADJUST_QUNIT:
       /* [quota_adjust_qunit] in both case ? */
       offset=lustre_dissect_struct_quota_adjust_qunit(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit) ;
+    case OST_LADVISE:
+      /*[ost_body] in both case */
+      offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ;
+      if (pb_type == PTL_RPC_MSG_REQUEST) {
+         offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+1);
+         offset=lustre_dissect_struct_lu_ladvise(tvb, offset, pinfo, tree, hf_lustre_lu_ladvise, LUSTRE_REQ_REC_OFF+2);
+      }
+      break;
   };
-
   return offset;
 }
 
 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]*/
       break;
-    case MDS_GETSTATUS:
-      /*[mds body]*/
+    case MDS_GET_ROOT:
+      /*request: [mds body]*/
+      /*reply:   [mds body][capa] */
       offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
+      if (pb_type == PTL_RPC_MSG_REPLY)
+         offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REPLY_REC_OFF+1);
       break;
     case MDS_SETXATTR:
       if(pb_type==PTL_RPC_MSG_REQUEST)
@@ -8360,17 +9351,31 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       /*if(reply) : [nothing]*/
       break;
     case MDS_GETXATTR:
+      /*request: [mds body][capa][xattr name]*/
+      /*reply:   [mds body][eadata] - ommited on error */
       offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-      if(pb_type==PTL_RPC_MSG_REQUEST)
-        /*[string_xattr_name]*/
-        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_name, LUSTRE_REQ_REC_OFF+1);
-      if(pb_type==PTL_RPC_MSG_REPLY)
-        /*[eada]*/
+      if(pb_type==PTL_RPC_MSG_REQUEST) {
+       offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REPLY_REC_OFF+1);
+        offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_name, LUSTRE_REQ_REC_OFF+2);
+      }
+      if (pb_type == PTL_RPC_MSG_REPLY)
         offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata, LUSTRE_REQ_REC_OFF+1);
       break;
     case MDS_GETATTR:
-      offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-      /* TODO [ something ??? ] */
+      offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body);
+      if (pb_type == PTL_RPC_MSG_REPLY) { /*  [mdt_md][acl][capa1][capa2] */
+       offset=lustre_dissect_struct_lov_mds_md(tvb, offset, pinfo, tree,
+                                            hf_lustre_mds_md_data,
+                                            LUSTRE_REPLY_REC_OFF+1);
+       offset=lustre_dissect_struct_acl(tvb, offset, pinfo, tree,
+                                        hf_lustre_acl, LUSTRE_REPLY_REC_OFF+3);
+       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree,
+                                         hf_lustre_capa,
+                                         LUSTRE_REPLY_REC_OFF+4);
+       offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree,
+                                         hf_lustre_capa,
+                                         LUSTRE_REPLY_REC_OFF+5);
+      }
       break;
     case MDS_GETATTR_NAME:
       if(pb_type==PTL_RPC_MSG_REQUEST)
@@ -8391,23 +9396,25 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
       break;
 
-    case MDS_CLOSE: /* TODO : check the corresponding structure in lustre code */
+    case MDS_CLOSE:
       if(pb_type==PTL_RPC_MSG_REQUEST)
-      { /* [mdt_body] [lov_mds_md][log_cookie] */
-        offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-        if(LUSTRE_BUFCOUNT>=3)
-          offset=lustre_dissect_struct_lov_mds_md_v1(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_v1);
-        if(LUSTRE_BUFCOUNT>=4)
-          if( tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+2)) > 0)
-            offset=lustre_dissect_struct_llog_cookie(tvb,offset,pinfo,tree,hf_lustre_llog_cookie);
+      { /* [mdt_ioepoch][rec_reint][capa1] */
+       offset=lustre_dissect_struct_mdt_ioepoch(tvb, offset, pinfo, tree, hf_lustre_mdt_ioepoch);
+
+       if(LUSTRE_BUFFER_LEN(LUSTRE_REQ_REC_OFF+1) > 0)
+         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] TODO : check that (reread the code about shrink in lustre) */
+      { /* [mdt_body][md][cookie][capa1][capa2] */
         offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-        if(tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+1)) > 0)
-          offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_mds_md_data,LUSTRE_REQ_REC_OFF+1); /* key  */
-        if(tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+2)) > 0)
+       offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_mds_md_data, LUSTRE_REPLY_REC_OFF+1);
+        if(LUSTRE_BUFFER_LEN(LUSTRE_REPLY_REC_OFF+2) > 0)
           offset=lustre_dissect_struct_llog_cookie(tvb,offset,pinfo,tree,hf_lustre_llog_cookie);
+       offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+3);
+       offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+4);
       }
       break;
 
@@ -8426,22 +9433,23 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     case MDS_REINT:
       /* the structure depend on the intent_opcode */
       if(pb_type==PTL_RPC_MSG_REQUEST)
-        offset=reint_opcode_process(tvb, offset, pinfo, tree);
-      if(pb_type==PTL_RPC_MSG_REPLY)
-      {
-        /*[mdt_body][??][llog_logid_rec] */
-        offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-        if(tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+1)) > 0){
-          /* OPEN, RENAME, and UNLINK */
-          if(tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+1)) > 0){ /* rec_unlink or rec_rename */
-            offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata,
-                LUSTRE_REQ_REC_OFF+1); // replace by eadata TODO TODO //
-            if(tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+2)) > 0) /* with unlink or rename we have 4 buffers handler.c line 1691*/
-              offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
-                  hf_lustre_mds_xattr_eadata, LUSTRE_REQ_REC_OFF+2); // replace withe eadata TODO TODO //
-          }
-        }
+       offset=reint_opcode_process(tvb, offset, pinfo, tree);
+
+      if(pb_type==PTL_RPC_MSG_REPLY) {
+       /* [mdt_body][mdt_md][??][capa1][capa2] */
+       offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
+
+       offset=lustre_dissect_struct_lov_mds_md(tvb,offset,pinfo,tree,hf_lustre_mds_md_data, LUSTRE_REPLY_REC_OFF+1);
+
+       if(LUSTRE_BUFFER_LEN(LUSTRE_REPLY_REC_OFF+2) > 0)
+         /* open : ...[ACL]...
+          * unlink, rename : ...[log_cookies]... */
+         offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
+                                            hf_lustre_mds_xattr_eadata,
+                                            LUSTRE_REPLY_REC_OFF+2);
 
+       lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REPLY_REC_OFF+3);
+       lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REPLY_REC_OFF+4);
       }
       break;
     case MDS_SET_INFO:
@@ -8465,9 +9473,41 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     case MDS_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) /*[obd_connect_data]*/
-        offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data);
+      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, 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;
   };
@@ -8480,98 +9520,155 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 static int
 lustre_ldlm_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 LDLM_ENQUEUE:
-      /*[ldlm_request] if we have one more buffer it's [intent_opcode] and the opcode give us the
-       * corresponding intent structure [intent] */
-      if(pb_type==PTL_RPC_MSG_REQUEST)
-      {
-        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
-        if (LUSTRE_BUFCOUNT>=3)
-          offset=lustre_dissect_struct_ldlm_intent(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent);
-      }
-      if(pb_type==PTL_RPC_MSG_REPLY)
-      {
-        guint32 ldlm_type;
-        guint32 magic;
-        /*[ldlm_reply]*/
-        offset=lustre_dissect_struct_ldlm_reply(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply,&ldlm_type) ;
-        if(LUSTRE_BUFCOUNT>2 && (tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*2) == 40))
-          /* TODO :this code need to be check and test, the lustre corresponding code is'nt explicit, so
-           * not sure to have this buffer, but in example it works fine
-           */
-          offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree, hf_lustre_ost_lvb);
-        else
-          if(LUSTRE_BUFCOUNT>2)
-          {
-            offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-            /*g_print("buflen_off+4*3 = %d", tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*LUSTRE_DLM_INTENT_REC_OFF));*/
-            if(LUSTRE_BUFCOUNT>2 &&
-                (tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*LUSTRE_DLM_INTENT_REC_OFF) > 0))
-            {
-              magic=tvb_get_letohl(tvb, offset); /* TODO : replace this with a macro */
-              switch(magic)
-              {
-                case LOV_MAGIC_V1:
-                  offset=lustre_dissect_struct_lov_mds_md_v1(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_v1);
-                  break;
-                default:
-                  offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
-                      hf_lustre_extra_padding, LUSTRE_DLM_INTENT_REC_OFF);
-                  break;
-              };
-            }
-          }
+  switch (opc) {
+  case LDLM_ENQUEUE:
+    /* [ldlm_request] if we have one more buffer it's
+     * [intent_opcode] and the opcode give us the corresponding
+     * intent structure [intent] */
+    if (pb_type==PTL_RPC_MSG_REQUEST) {
+      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
+                                               hf_lustre_ldlm_request);
+      if (LUSTRE_BUFCOUNT>=3)
+       offset=lustre_dissect_struct_ldlm_intent(tvb, offset, pinfo, tree,
+                                                hf_lustre_ldlm_intent);
+    }
+    if (pb_type==PTL_RPC_MSG_REPLY) {
+      guint32 ldlm_type;
+
+      /* [ldlm_reply] */
+      offset=lustre_dissect_struct_ldlm_reply(tvb, offset, pinfo, tree,
+                                             hf_lustre_ldlm_reply,
+                                             &ldlm_type);
+      /* Generic Reply:
+       * [mdt_body][mdt_md][acl]
+       * CREATE or GETATTR:
+       * [mdt_body][mdt_md][acl][capa1]
+       * OPEN:
+       * [mdt_body][mdt_md][acl][capa1][capa2]
+       * GETXATTR:
+       * [mdt_body][mdt_md][acl][eadata][eavals][eavals_lens]
+       *
+       * LAYOUT:
+       * [dlm_lvb]
+       * QUOTA:
+       * [dlm_lvb][quota_body]
+       */
+
+      /* check if we're done processing */
+      if (LUSTRE_BUFCOUNT <= 2)
+         break;
+
+      /* LAYOUT and QUOTA */
+      if (LUSTRE_BUFFER_LEN(LUSTRE_DLM_REPLY_REC_OFF) == 40) {
+       /* TODO :this code need to be check and test, the
+        * lustre corresponding code isn't explicit, so not
+        * sure to have this buffer, but in example it works
+        * fine
+        */
+       offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree,
+                                            hf_lustre_ost_lvb,
+                                            LUSTRE_DLM_REPLY_REC_OFF);
+       if (LUSTRE_BUFCOUNT == 3)
+               break;
+       offset = lustre_dissect_struct_quota_body(tvb, offset,
+                                                 pinfo, tree, hf_lustre_qb,
+                                                 LUSTRE_DLM_REPLY_REC_OFF+1);
+       break;
+
+      } else if ((ldlm_type == LDLM_EXTENT) || (LUSTRE_BUFCOUNT == 3)) {
+             int magic;
+             // ??
+             magic=tvb_get_letohl(tvb, offset);
+             if (magic == LOV_MAGIC_V1)
+                     offset = lustre_dissect_struct_lov_mds_md_v1(tvb, offset,
+                                       pinfo, tree, hf_lustre_lov_mds_md_v1);
+             else
+                     offset = lustre_dissect_struct_ost_lvb(tvb, offset, pinfo,
+                                       tree, hf_lustre_ost_lvb,
+                                       LUSTRE_DLM_REPLY_REC_OFF+1);
+       break;
       }
-      break;
 
-    case LDLM_CONVERT:
-      if(pb_type==PTL_RPC_MSG_REQUEST)
-        /*[ldlm_request]*/
-        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
-      if(pb_type==PTL_RPC_MSG_REPLY)
-        /*[ldlm_reply]*/
-        offset=lustre_dissect_struct_ldlm_reply(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply, NULL) ;
-      break;
+      if (LUSTRE_BUFFER_LEN(LUSTRE_DLM_REPLY_REC_OFF) > 0)
+       offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree,
+                                             hf_lustre_mdt_body);
+      offset=lustre_dissect_struct_lov_mds_md(tvb,offset,pinfo,tree,hf_lustre_mds_md_data,
+                                             LUSTRE_DLM_REPLY_REC_OFF+1);
+
+      /* ldlm_intent_server : ACL */
+      offset=lustre_dissect_struct_acl(tvb, offset, pinfo, tree,
+                                      hf_lustre_acl, LUSTRE_DLM_REPLY_REC_OFF+2);
+
+      if (LUSTRE_BUFCOUNT == 8) {
+             /* ldlm_intent_getxattr_server : [eadata][eavals][eavals_lens] */
+             offset = lustre_dissect_xattr_eavals(tvb, offset, pinfo, tree,
+                                                  LUSTRE_DLM_REPLY_REC_OFF+3);
+             break;
+
+      } else if (LUSTRE_BUFCOUNT >= 6) {
+             /* ldlm_intent_open_server : [capa1][capa2] */
+             /* ldlm_intent_open_server : [capa1] */
+             offset = lustre_dissect_struct_capa(tvb, offset, pinfo, tree,
+                                                 hf_lustre_capa,
+                                                 LUSTRE_DLM_REPLY_REC_OFF+3);
+             offset = lustre_dissect_struct_capa(tvb, offset, pinfo, tree,
+                                                 hf_lustre_capa,
+                                                 LUSTRE_DLM_REPLY_REC_OFF+4);
+      }
+    }
+    break;
 
-    case LDLM_CANCEL:
-      if(pb_type==PTL_RPC_MSG_REQUEST)
-        /*[ldlm_request]*/
-        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
-      /*[nothing en reply]*/
-      break;
+  case LDLM_CONVERT:
+    if(pb_type==PTL_RPC_MSG_REQUEST) /*[ldlm_request]*/
+      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
+    if(pb_type==PTL_RPC_MSG_REPLY) /*[ldlm_reply]*/
+      offset=lustre_dissect_struct_ldlm_reply(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply, NULL) ;
+    break;
 
-    case LDLM_BL_CALLBACK: /* TODO : check the corresponding code in lustre*/
-      if(pb_type==PTL_RPC_MSG_REQUEST)
-        /*[ldlm_request]*/
-        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
-      break;
+  case LDLM_CANCEL:
+    if(pb_type==PTL_RPC_MSG_REQUEST) /*[ldlm_request]*/
+      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
+    break;
 
-    case LDLM_CP_CALLBACK:
-      if(pb_type==PTL_RPC_MSG_REQUEST){
-        /*[ldlm_request] if the third buffer exist we have [lvb data] so it's [ost_lvb] : TODO :
-         * check that */
-        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
-        if(LUSTRE_BUFCOUNT>=3)
-          offset=lustre_dissect_struct_ost_lvb(tvb,offset,pinfo,tree,hf_lustre_ost_lvb);
-      }
-      /*reply : [nothing] */
-      break;
+  case LDLM_BL_CALLBACK:
+    if(pb_type==PTL_RPC_MSG_REQUEST) /*[ldlm_request]*/
+      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
+    break;
 
-    case LDLM_GL_CALLBACK:
-      if(pb_type==PTL_RPC_MSG_REQUEST)
-        /*[ldlm_request] */
-        offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
-      else
-        if(pb_type==PTL_RPC_MSG_REPLY)
-          /*reply : [ost_lvb] <-- need to be check*/
-          offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree, hf_lustre_ost_lvb);
-      break;
+  case LDLM_CP_CALLBACK:
+    if(pb_type==PTL_RPC_MSG_REQUEST){
+      /*[ldlm_request] if the third buffer exist we have [lvb data] so it's [ost_lvb] : TODO :
+       * check that */
+      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
+      offset = lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree,
+                                            hf_lustre_ost_lvb,
+                                            LUSTRE_DLM_REPLY_REC_OFF);
+    }
+    /*reply : [nothing] */
+    break;
 
-    default :
-      break;
+  case LDLM_GL_CALLBACK:
+    if(pb_type==PTL_RPC_MSG_REQUEST) { /*[ldlm_request] [lvb (for gl_desc)]*/
+      offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ;
+      offset = lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree,
+                                            hf_lustre_ost_lvb,
+                                            LUSTRE_REQ_REC_OFF+1);
+    }
+    if(pb_type==PTL_RPC_MSG_REPLY) /* [ost_lvb] */
+           offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree,
+                                                hf_lustre_ost_lvb,
+                                                LUSTRE_REPLY_REC_OFF);
+    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;
   }
   return offset;
 }
@@ -8582,9 +9679,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]*/
@@ -8603,6 +9701,12 @@ lustre_mgs_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       /*[mgs_send_param], mgs_set_info_rpc()*/
       offset=lustre_dissect_struct_mgs_send_param(tvb,offset,pinfo,tree,hf_lustre_mgs_send_param);
       break;
+    case MGS_CONFIG_READ:
+      if (pb_type==PTL_RPC_MSG_REQUEST) /* [config_body] */
+       offset=lustre_dissect_struct_mgs_config_body(tvb,offset,pinfo,tree,hf_lustre_mgs_config_body);
+      if (pb_type==PTL_RPC_MSG_REPLY)  /* [config_res] */
+       offset=lustre_dissect_struct_mgs_config_res(tvb,offset,pinfo,tree,hf_lustre_mgs_config_res);
+      break;
     default:
       break;
   };
@@ -8637,22 +9741,23 @@ lustre_llog_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     case LLOG_ORIGIN_HANDLE_CREATE     : /* in handler.c */
       /*[llogd_body]  (reply and request)*/
       offset=lustre_dissect_struct_llogd_body(tvb, offset, pinfo, tree, hf_lustre_llogd_body);
-      if(pb_type==PTL_RPC_MSG_REQUEST) /*[filename] */
+      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,
-              LUSTRE_REQ_REC_OFF+1);
+          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 */
-      /* [llogd_body][???]
+      /* [llogd_body][eadata]
        * the size of second buf is LLOG_CHKUNK_SIZE, so it's maybee only bulk data */
       offset=lustre_dissect_struct_llogd_body(tvb, offset, pinfo, tree, hf_lustre_llogd_body);
-      offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_llogd_chunk,
-          LUSTRE_REQ_REC_OFF + 1 );
+      if(pb_type==PTL_RPC_MSG_REPLY)
+       offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_llogd_chunk,
+                                          LUSTRE_REPLY_REC_OFF+1);
       break;
     case LLOG_ORIGIN_HANDLE_READ_HEADER:/* in handler.c */
       if(pb_type==PTL_RPC_MSG_REQUEST){
         /* [llogd_body][llog_log_hdr] */
-        offset=lustre_dissect_struct_llogd_body(tvb, offset, pinfo, tree, hf_lustre_llogd_body);
+       offset=lustre_dissect_struct_llogd_body(tvb, offset, pinfo, tree, hf_lustre_llogd_body);
         if(LUSTRE_BUFCOUNT>2)
           offset=lustre_dissect_struct_llog_log_hdr(tvb, offset, pinfo, tree,
               hf_lustre_llogd_log_hdr);
@@ -8672,22 +9777,32 @@ lustre_llog_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     case LLOG_CATINFO                  : /*in handler.c */
       if(pb_type==PTL_RPC_MSG_REQUEST){
         /* [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,
-                                       tvb_get_letohl(tvb,
-                                       LUSTRE_BUFLEN_OFF + 4 *
-                                       LUSTRE_REQ_REC_OFF)),
-                                       "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_keyword,
+                                            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)
+               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*/
         offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_llogd_chunk,
-            LUSTRE_REQ_REC_OFF + 1 );
+            LUSTRE_REPLY_REC_OFF + 1 );
       /* TODO TODO : check if it's note a catid */
       break;
     case LLOG_ORIGIN_HANDLE_PREV_BLOCK : /* in handler.c */
@@ -8696,7 +9811,7 @@ lustre_llog_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       if(pb_type==PTL_RPC_MSG_REPLY)
         /*[buf] size of llog_chunk_size*/
         offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_llogd_chunk,
-            LUSTRE_REQ_REC_OFF + 1 );
+            LUSTRE_REPLY_REC_OFF + 1 );
       break;
     case LLOG_ORIGIN_HANDLE_DESTROY    : /* in handler.c */
       /*[llogd_body] in both case*/
@@ -8709,11 +9824,60 @@ lustre_llog_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
   return offset;
 }
 
+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);
+               col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
+               break;
+       };
+
+       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);
+               col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
+               break;
+       };
+
+       return offset;
+}
+
+
 /* process lustre opcode :
    check if opcode is in range_opcode, and call the corresponding opcode process function */
 static int
 lustre_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type)
 {
+  /* No more buffers to process */
+  if (LUSTRE_BUFCOUNT == 1)
+    return offset;
+
   if (opc <= OST_LAST_OPC) /* OST opcodes */
     offset=lustre_ost_opcode_process( tvb , offset ,pinfo ,  tree , opc , pb_type) ;
 
@@ -8732,7 +9896,13 @@ lustre_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
   if( (opc>=LLOG_FIRST_OPC) && (opc<=LLOG_LAST_OPC)) /* LLOG Opcodes */
     offset=lustre_llog_opcode_process( tvb , offset ,pinfo ,  tree , opc , pb_type) ;
 
-  return offset ;
+  if( (opc >= SEQ_FIRST_OPC) && (opc <= SEQ_LAST_OPC) ) /* SEQ Opcodes */
+    offset=lustre_seq_opcode_process(tvb, offset, pinfo, tree, opc, pb_type);
+
+  if( (opc >= FLD_FIRST_OPC) && (opc <= FLD_LAST_OPC) ) /* FLD Opcodes */
+    offset=lustre_fld_opcode_process(tvb, offset, pinfo, tree, opc, pb_type);
+
+  return offset;
 }
 
 /* ----------------------------------------------- */
@@ -8752,35 +9922,73 @@ add_extra_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, pro
 /* ----------------------------------------------- */
 
 static int
-ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint64 intent_opc _U_)
+ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                   proto_tree * tree _U_, guint64 intent_opc _U_)
 {
   /* all corresponding code is in mdc_locks.c in function mdc_enqueue() */
   /* if 0x0003 we have CREAT + OPEN
-  */
+   */
   if (intent_opc & IT_OPEN) {
-    /* mdc_intent_open_pack(), d'où [opcode][mdc_rec_create][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, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1);
-    offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata,
-        LUSTRE_DLM_INTENT_REC_OFF+2); /* TODO : replace hf with eada hf */
-
+    /* 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_filename(tvb, offset, pinfo, tree,
+                                        hf_lustre_reint_name,
+                                        LUSTRE_DLM_INTENT_REC_OFF+3);
+    offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
+                                      hf_lustre_mds_xattr_eadata,
+                                      LUSTRE_DLM_INTENT_REC_OFF+4);
   }
+
   if (intent_opc & IT_UNLINK){
-    /* mdc_intent_unlink_pack(), d'où [opcode][mdt_rec_unlink][name] */
-    offset=lustre_dissect_struct_mdt_rec_unlink(tvb, offset, pinfo, tree, hf_lustre_mdt_rec_unlink);
-    offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1);
+    /* mdc_intent_unlink_pack(), d'où [opcode][mdt_rec_unlink][capa][name] */
+    offset=lustre_dissect_struct_mdt_rec_unlink(tvb, offset, pinfo, tree,
+                                               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_filename(tvb, offset, pinfo, tree,
+                                        hf_lustre_reint_name,
+                                        LUSTRE_DLM_INTENT_REC_OFF+2);
   }
   if (intent_opc & IT_GETATTR){
-    /* mdc_intent_lookup_pack, d'où [mdt_body][name] */
+    /* mdc_intent_lookup_pack, d'où [mdt_body][capa][name] */
     offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-    offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1);
+    offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa,
+                                     LUSTRE_DLM_INTENT_REC_OFF+1);
+    offset=lustre_dissect_element_filename(tvb, offset, pinfo, tree, hf_lustre_reint_name,
+                                        LUSTRE_DLM_INTENT_REC_OFF+2);
   }
 
   if (intent_opc & IT_LOOKUP){
-    /* mdc_intent_lookup_pack, d'où [mdt_body][name] */
-    offset=lustre_dissect_struct_mdt_body(tvb, offset, pinfo, tree, hf_lustre_mdt_body) ;
-    offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1);
+    /* mdc_intent_lookup_pack, d'où [mdt_body][capa][name] */
+    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_filename(tvb, offset, pinfo, tree, hf_lustre_reint_name,
+                                        LUSTRE_DLM_INTENT_REC_OFF+2);
   }
+       if (intent_opc & IT_LAYOUT) {
+               /* [layout_intent][eadata] */
+               offset = lustre_dissect_struct_layout_intent(tvb, offset,
+                               pinfo, tree, hf_lustre_layout_intent,
+                               LUSTRE_DLM_INTENT_REC_OFF);
+               offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
+                                                  hf_lustre_mds_xattr_eadata,
+                                                  LUSTRE_DLM_INTENT_REC_OFF+1);
+       }
+       if (intent_opc & IT_QUOTA_DQACQ) {
+               offset = lustre_dissect_struct_quota_body(tvb, offset,
+                               pinfo, tree, hf_lustre_qb,
+                               LUSTRE_DLM_INTENT_REC_OFF);
+       }
+       if (intent_opc & IT_GETXATTR) {
+               /* [mdt_body][capa] */
+               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);
+       }
   return offset;
 }
 
@@ -8791,12 +9999,10 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, p
 static void
 sanity_check(tvbuff_t *tvb, packet_info *pinfo, guint32 val_offset _U_)
 {
-  guint32 magic_number ;
   guint32 somme_buflen = 0 ;
   guint32 i ;
 
-  magic_number = tvb_get_letohl(tvb, 8);
-
+  /* magic_number = tvb_get_letohl(tvb, 8); */
 
   for (i=0;i<LUSTRE_BUFCOUNT;i++)
     somme_buflen += tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF +
@@ -8808,13 +10014,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");
 }
 
 
@@ -9173,18 +10374,43 @@ lustre_dissect_element_ptlrpc_body_pb_slv(tvbuff_t *tvb _U_, int offset _U_, pac
 }
 
 static int
+lustre_dissect_element_ptlrpc_body_pb_pre_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+{
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_pre_version);
+
+  return offset;
+}
+
+static int
+lustre_dissect_element_ptlrpc_body_pb_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
+{
+  offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_padding);
+
+  return offset;
+}
+
+static int
+lustre_dissect_element_ptlrpc_body_pb_jobid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_)
+{
+
+  /* the lenght of the string is 32 bytes max, with  \0 inside */
+  proto_tree_add_item(parent_tree, hf_lustre_ptlrpc_body_pb_jobid, tvb, offset, 32, TRUE);
+
+  offset+=32;
+  return offset;
+}
+
+
+static int
 lustre_dissect_struct_ptlrpc_body(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_len _U_ )
 {
   proto_item *item = NULL;
   proto_tree *tree = NULL;
-  int old_offset;
-
-  guint32 opc, pb_type;
-
+  int old_offset, i;
+  guint32 opc, pb_type, pb_version;
 
   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_ptlrpc_body);
@@ -9197,6 +10423,8 @@ lustre_dissect_struct_ptlrpc_body(tvbuff_t *tvb _U_, int offset _U_, packet_info
 
   offset=lustre_dissect_element_ptlrpc_body_pb_type(tvb, offset, pinfo, tree);
 
+  pb_version = tvb_get_letohl(tvb, offset) & ~LUSTRE_VERSION_MASK;
+  //g_print("msg_v2_version_offset %d : version == %d \n", offset, pb_version);
   offset=lustre_dissect_element_ptlrpc_body_pb_version(tvb, offset, pinfo, tree);
 
   // g_print("msg_v2_opcode_offset %d  \n", offset);
@@ -9227,7 +10455,24 @@ lustre_dissect_struct_ptlrpc_body(tvbuff_t *tvb _U_, int offset _U_, packet_info
 
   offset=lustre_dissect_element_ptlrpc_body_pb_slv(tvb, offset, pinfo, tree);
 
+  /* pb_pre_versions */
+  for(i = 0; i < 4; ++i) {
+    offset=lustre_dissect_element_ptlrpc_body_pb_pre_version(tvb, offset, pinfo, tree);
+  }
+
+  for(i = 0; i < 4; ++i) {
+    offset=lustre_dissect_element_ptlrpc_body_pb_padding(tvb, offset, pinfo, tree);
+  }
+
+  if (pb_version == LUSTRE_PTLRPC_MSG_VERSION && offset-old_offset < buf_len) {
+    offset=lustre_dissect_element_ptlrpc_body_pb_jobid(tvb, offset, pinfo, tree);
+  }
 
+  if (offset-old_offset != buf_len) {
+    g_print("ptlbody offset-old:%d buf_len:%d\n",
+           offset-old_offset, buf_len);
+    col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
+  }
 
   proto_item_set_len(item, offset-old_offset);
 
@@ -9385,8 +10630,6 @@ lustre_dissect_struct_msg_v2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
     offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_extra_padding);
   }
 
-
-
   current_buf_len = tvb_get_letohl(tvb, buf_len_offset);
   offset=lustre_dissect_struct_ptlrpc_body(tvb,offset, pinfo, tree, hf_lustre_ptlrpc_body_pb, current_buf_len);
 
@@ -9396,17 +10639,13 @@ 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)*/
@@ -9424,33 +10663,29 @@ dissect_lustre(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
   if (tree) {
 
     guint32 magic_number ;
-    guint32 offset;
+    guint32 offset = 0;
     proto_item *ti  = NULL ;
     proto_tree * lustre_tree = NULL ;
 
-
     ti = proto_tree_add_item(tree,proto_lustre,tvb,0,-1,FALSE);
     lustre_tree = proto_item_add_subtree(ti,ett_lustre);
 
-
     magic_number = tvb_get_letohl(tvb, 8);
 
-
     switch (magic_number){
       case LUSTRE_MSG_MAGIC_V1:
         /* put some nice info*/
         proto_item_append_text(lustre_tree, " V1 ");
-        offset=lustre_dissect_struct_msg_v1(tvb, 0, pinfo, lustre_tree, proto_lustre ) ;
+        offset=lustre_dissect_struct_msg_v1(tvb, offset, pinfo, lustre_tree, proto_lustre ) ;
         break;
       case LUSTRE_MSG_MAGIC_V2:
         /* put some nice info*/
         proto_item_append_text(lustre_tree, " V2 ");
-        offset=lustre_dissect_struct_msg_v2(tvb, 0, pinfo, lustre_tree,  proto_lustre ) ;
+        offset=lustre_dissect_struct_msg_v2(tvb, offset, pinfo, lustre_tree,  proto_lustre ) ;
         break;
       default:
         break;
     }
-
   }
 }
 
@@ -9466,7 +10701,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_body_handle,
       { "Handle", "lustre.mdt_body.handle", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_body_valid,
-      { "Valid", "lustre.mdt_body.valid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Valid", "lustre.mdt_body.valid", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_body_size,
       { "Size", "lustre.mdt_body.size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_body_mtime,
@@ -9491,7 +10726,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_body_capability,
       { "Capability", "lustre.mdt_body.capability", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_body_mode,
-      { "Mode", "lustre.mdt_body.mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Mode", "lustre.mdt_body.mode", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_body_uid,
       { "Uid", "lustre.mdt_body.uid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_body_gid,
@@ -9534,7 +10769,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_setattr,
       { "mdt rec setattr", "lustre.mdt_rec_setattr", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}},
     { &hf_lustre_mdt_rec_setattr_sa_opcode,
-      { "Sa Opcode", "lustre.mdt_rec_setattr.sa_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals), 0, "", HFILL }},
+      { "Sa Opcode", "lustre.mdt_rec_setattr.sa_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_op_vals), 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setattr_sa_cap,
       { "Sa Cap", "lustre.mdt_rec_setattr.sa_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setattr_sa_fsuid,
@@ -9573,13 +10808,13 @@ 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_DEC, NULL, 0, "", HFILL }},
+      { "Sa Mode", "lustre.mdt_rec_setattr.sa_mode", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setattr_sa_padding_2,
       { "Sa Padding 2", "lustre.mdt_rec_setattr.sa_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_mdt_rec_setattr_sa_padding_3,
-      { "Sa Padding 3", "lustre.mdt_rec_setattr.sa_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_mdt_rec_setattr_sa_projid,
+      { "Sa Projid", "lustre.mdt_rec_setattr.sa_projid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setattr_sa_padding_4,
       { "Sa Padding 4", "lustre.mdt_rec_setattr.sa_padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setattr_sa_padding_5,
@@ -9588,7 +10823,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_create,
       { "mdt rec create", "lustre.mdt_rec_create", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}},
     { &hf_lustre_mdt_rec_create_cr_opcode,
-      { "Cr Opcode", "lustre.mdt_rec_create.cr_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals), 0, "", HFILL }},
+      { "Cr Opcode", "lustre.mdt_rec_create.cr_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_op_vals), 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_cap,
       { "Cr Cap", "lustre.mdt_rec_create.cr_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_fsuid,
@@ -9608,11 +10843,9 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_create_cr_suppgid2_h,
       { "Cr Suppgid2 H", "lustre.mdt_rec_create.cr_suppgid2_h", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_fid1,
-      { "Cr Fid1", "lustre.mdt_rec_create.cr_fid1", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
+      { "Cr Fid1", "lustre.mdt_rec_create.cr_fid1", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_rec_create_cr_fid2,
-      { "Cr Fid2", "lustre.mdt_rec_create.cr_fid2", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
+      { "Cr Fid2", "lustre.mdt_rec_create.cr_fid2", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_rec_create_cr_old_handle,
       { "Cr Old Handle", "lustre.mdt_rec_create.cr_old_handle", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_rec_create_cr_time,
@@ -9622,24 +10855,24 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_create_cr_ioepoch,
       { "Cr Ioepoch", "lustre.mdt_rec_create.cr_ioepoch", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_padding_1,
-      { "Cr Padding 1", "lustre.mdt_rec_create.cr_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Cr Padding 1", "lustre.mdt_rec_create.cr_padding_1", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_mode,
-      { "Cr Mode", "lustre.mdt_rec_create.cr_mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Cr Mode", "lustre.mdt_rec_create.cr_mode", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_bias,
       { "Cr Bias", "lustre.mdt_rec_create.cr_bias", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_flags_l,
       { "Cr Flags L", "lustre.mdt_rec_create.cr_flags_l", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_flags_h,
       { "Cr Flags H", "lustre.mdt_rec_create.cr_flags_h", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_mdt_rec_create_cr_padding_3,
-      { "Cr Padding 3", "lustre.mdt_rec_create.cr_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_mdt_rec_create_cr_umask,
+      { "Cr Umask", "lustre.mdt_rec_create.cr_umask", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_create_cr_padding_4,
       { "Cr Padding 4", "lustre.mdt_rec_create.cr_padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
 
     { &hf_lustre_mdt_rec_link,
       { "mdt rec link", "lustre.mdt_rec_link", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}},
     { &hf_lustre_mdt_rec_link_lk_opcode,
-      { "Lk Opcode", "lustre.mdt_rec_link.lk_opcode", FT_UINT32, BASE_DEC,VALS(lustre_mds_reint_t_vals) , 0, "", HFILL }},
+      { "Lk Opcode", "lustre.mdt_rec_link.lk_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_op_vals) , 0, "", HFILL }},
     { &hf_lustre_mdt_rec_link_lk_cap,
       { "Lk Cap", "lustre.mdt_rec_link.lk_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_link_lk_fsuid,
@@ -9691,7 +10924,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_unlink,
       { "mdt rec unlink", "lustre.mdt_rec_unlink", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}},
     { &hf_lustre_mdt_rec_unlink_ul_opcode,
-      { "Ul Opcode", "lustre.mdt_rec_unlink.ul_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals) , 0, "", HFILL }},
+      { "Ul Opcode", "lustre.mdt_rec_unlink.ul_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_op_vals) , 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_cap,
       { "Ul Cap", "lustre.mdt_rec_unlink.ul_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_fsuid,
@@ -9719,17 +10952,17 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_unlink_ul_time,
       { "Ul Time", "lustre.mdt_rec_unlink.ul_time",FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_rec_unlink_ul_padding_2,
-      { "Ul Padding 2", "lustre.mdt_rec_unlink.ul_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Ul Padding 2", "lustre.mdt_rec_unlink.ul_padding_2", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_padding_3,
-      { "Ul Padding 3", "lustre.mdt_rec_unlink.ul_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Ul Padding 3", "lustre.mdt_rec_unlink.ul_padding_3", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_padding_4,
-      { "Ul Padding 4", "lustre.mdt_rec_unlink.ul_padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Ul Padding 4", "lustre.mdt_rec_unlink.ul_padding_4", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_padding_5,
-      { "Ul Padding 5", "lustre.mdt_rec_unlink.ul_padding_5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Ul Padding 5", "lustre.mdt_rec_unlink.ul_padding_5", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_bias,
       { "Ul Bias", "lustre.mdt_rec_unlink.ul_bias", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_mode,
-      { "Ul Mode", "lustre.mdt_rec_unlink.ul_mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Ul Mode", "lustre.mdt_rec_unlink.ul_mode", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_padding_6,
       { "Ul Padding 6", "lustre.mdt_rec_unlink.ul_padding_6", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_unlink_ul_padding_7,
@@ -9742,7 +10975,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_rename,
       { "mdt rec rename", "lustre.mdt_rec_rename", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}},
     { &hf_lustre_mdt_rec_rename_rn_opcode,
-      { "Rn Opcode", "lustre.mdt_rec_rename.rn_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals) , 0, "", HFILL }},
+      { "Rn Opcode", "lustre.mdt_rec_rename.rn_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_op_vals) , 0, "", HFILL }},
     { &hf_lustre_mdt_rec_rename_rn_cap,
       { "Rn Cap", "lustre.mdt_rec_rename.rn_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_rename_rn_fsuid,
@@ -9780,7 +11013,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_rename_rn_bias,
       { "Rn Bias", "lustre.mdt_rec_rename.rn_bias", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_rename_rn_mode,
-      { "Rn Mode", "lustre.mdt_rec_rename.rn_mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Rn Mode", "lustre.mdt_rec_rename.rn_mode", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_rename_rn_padding_5,
       { "Rn Padding 5", "lustre.mdt_rec_rename.rn_padding_5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_rename_rn_padding_6,
@@ -9793,7 +11026,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_setxattr,
       { "mdt rec setxattr", "lustre.mdt_rec_setxattr", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}},
     { &hf_lustre_mdt_rec_setxattr_sx_opcode,
-      { "Sx Opcode", "lustre.mdt_rec_setxattr.sx_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals), 0, "", HFILL }},
+      { "Sx Opcode", "lustre.mdt_rec_setxattr.sx_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_op_vals), 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_cap,
       { "Sx Cap", "lustre.mdt_rec_setxattr.sx_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_fsuid,
@@ -9816,7 +11049,7 @@ void proto_register_dcerpc_lustre(void)
       { "Sx Fid", "lustre.mdt_rec_setxattr.sx_fid", FT_NONE,
                    BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_rec_setxattr_sx_padding_1,
-      { "Sx Padding 1", "lustre.mdt_rec_setxattr.sx_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Sx Padding 1", "lustre.mdt_rec_setxattr.sx_padding_1", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_padding_2,
       { "Sx Padding 2", "lustre.mdt_rec_setxattr.sx_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_padding_3,
@@ -9826,15 +11059,15 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_mdt_rec_setxattr_sx_time,
       { "Sx Time", "lustre.mdt_rec_setxattr.sx_time",FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
     { &hf_lustre_mdt_rec_setxattr_sx_padding_5,
-      { "Sx Padding 5", "lustre.mdt_rec_setxattr.sx_padding_5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Sx Padding 5", "lustre.mdt_rec_setxattr.sx_padding_5", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_padding_6,
-      { "Sx Padding 6", "lustre.mdt_rec_setxattr.sx_padding_6", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Sx Padding 6", "lustre.mdt_rec_setxattr.sx_padding_6", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_padding_7,
-      { "Sx Padding 7", "lustre.mdt_rec_setxattr.sx_padding_7", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "Sx Padding 7", "lustre.mdt_rec_setxattr.sx_padding_7", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mdt_rec_setxattr_sx_size,
-      { "Sx Size", "lustre.mdt_rec_setxattr.sx_size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+      { "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_UINT64, 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,
@@ -9845,7 +11078,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,
@@ -9856,12 +11090,20 @@ void proto_register_dcerpc_lustre(void)
       { "Ioo Id", "lustre.obd_ioobj.ioo_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ptlrpc_body_pb_slv,
       { "Pb Slv", "lustre.ptlrpc_body.pb_slv", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+
+    { &hf_lustre_ptlrpc_body_pb_pre_version,
+      { "Pb Pre-Version", "lustre.ptlrpc_body.pb_pre_version", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_ptlrpc_body_pb_padding,
+      { "Pb Padding", "lustre.ptlrpc_body.pb_padding", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_ptlrpc_body_pb_jobid,
+      { "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,
@@ -9870,12 +11112,10 @@ void proto_register_dcerpc_lustre(void)
       { "Os Bsize", "lustre.obd_statfs.os_bsize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v2_lm_repsize,
       { "Lm Repsize", "lustre.lustre_msg_v2.lm_repsize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_lov_mds_md_v1_lmm_stripe_size,
-      { "Lmm Stripe Size", "lustre.lov_mds_md_v1.lmm_stripe_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &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,
@@ -9886,10 +11126,8 @@ void proto_register_dcerpc_lustre(void)
       { "Lm Type", "lustre.lustre_msg_v1.lm_type", FT_UINT32, BASE_DEC, VALS(lustre_LMTypes), 0, "", HFILL }},
     { &hf_lustre_niobuf_remote_len,
       { "Len", "lustre.niobuf_remote.len", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &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 } },
@@ -9900,24 +11138,30 @@ 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 } },
+    { &hf_lustre_ost_lvb_lvb_mtime_ns,
+      { "Lvb Mtime NS", "lustre.ost_lvb.lvb_mtime_ns", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_ost_lvb_lvb_atime_ns,
+      { "Lvb Atime NS", "lustre.ost_lvb.lvb_atime_ns", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_ost_lvb_lvb_ctime_ns,
+      { "Lvb Ctime NS", "lustre.ost_lvb.lvb_ctime_ns", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_ost_lvb_lvb_padding,
+      { "padding", "lustre.ost_lvb.padding", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_connect_data_ocd_ibits_known,
       { "Ocd Ibits Known", "lustre.obd_connect_data.ocd_ibits_known", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &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,
       { "Ocd Group", "lustre.obd_connect_data.ocd_group", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lov_ost_data_v1_l_object_seq,
       { "L Object SEQ", "lustre.lov_ost_data_v1.l_object_seq", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_lov_mds_md_v1_lmm_object_seq,
-      { "Lmm Object SEQ", "lustre.lov_mds_md_v1.lmm_object_seq", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_connect_data_ocd_brw_size,
       { "Ocd Brw Size", "lustre.obd_connect_data.ocd_brw_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ptlrpc_body_pb_limit,
@@ -9927,15 +11171,13 @@ 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,
       { "Os Files", "lustre.obd_statfs.os_files", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &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,
@@ -9959,18 +11201,17 @@ 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_obd_statfs_os_namelen,
       { "Os Namelen", "lustre.obd_statfs.os_namelen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_statfs_os_blocks,
@@ -9979,8 +11220,6 @@ void proto_register_dcerpc_lustre(void)
       { "Lm Secflvr", "lustre.lustre_msg_v2.lm_secflvr", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v1_lm_transno,
       { "Lm Transno", "lustre.lustre_msg_v1.lm_transno", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_lov_mds_md_v1_lmm_pattern,
-      { "Lmm Pattern", "lustre.lov_mds_md_v1.lmm_pattern", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v1_lm_opc,
       { "Lm Opc", "lustre.lustre_msg_v1.lm_opc", FT_UINT32, BASE_DEC, VALS(lustre_op_codes), 0, "", HFILL }},
     { &hf_lustre_obd_connect_data_ocd_grant,
@@ -9994,7 +11233,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,
@@ -10007,31 +11262,25 @@ void proto_register_dcerpc_lustre(void)
       { "Os Spare3", "lustre.obd_statfs.os_spare3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lustre_msg_v2_lm_magic,
       { "Lm Magic", "lustre.lustre_msg_v2.lm_magic", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
-    { &hf_lustre_lov_mds_md_v1_lmm_object_id,
-      { "Lmm Object Id", "lustre.lov_mds_md_v1.lmm_object_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ptlrpc_body_pb_last_seen,
       { "Pb Last Seen", "lustre.ptlrpc_body.pb_last_seen", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_obd_ioobj_ioo_type,  /* TODO : create the
+    { &hf_lustre_obd_ioobj_ioo_max_brw,  /* TODO : create the
                                                   corresponding value_string */
-                 { "Ioo Type", "lustre.obd_ioobj.ioo_type", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+                 { "Ioo Max BRW Size", "lustre.obd_ioobj.ioo_max_brw", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
     { &hf_lustre_ptlrpc_body_pb_last_xid,
       { "Pb Last Xid", "lustre.ptlrpc_body.pb_last_xid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ptlrpc_body_pb_status,
-      { "Pb Status", "lustre.ptlrpc_body.pb_status", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "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,
@@ -10097,7 +11346,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,
@@ -10121,16 +11370,14 @@ void proto_register_dcerpc_lustre(void)
       { "O Uid", "lustre.obdo.o_uid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mds_xattr_name,
       { "mds xattr name", "lustre.mds_xattr_name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
-    { &hf_lustre_lov_mds_md_v1,
-      { "lov mds md v1", "lustre.lov_mds_md_v1", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_cookie,
       { "llog cookie", "lustre.llog_cookie", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
-    { &hf_lustre_mds_md_data,
-      { "mds md data", "lustre.mds_md_data", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
     { &hf_lustre_mds_reint_opcode,
       { "mds reint opcode", "lustre.mds_reint_opcode", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
     { &hf_lustre_mds_xattr_eadata,
       { "mds xattr eadata", "lustre.mds_xattr_eadata", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_mds_xattr_eadata_str,
+      { "mds xattr eadata", "lustre.mds_xattr_eadata.str", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
     { &hf_lustre_reint_name,
       { "mds reint name", "lustre.mds_reint_name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
     { &hf_lustre_reint_old_name,
@@ -10138,44 +11385,44 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_reint_new_name,
       { "mds reint new name", "lustre.mds_reint_new_name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
 
-
+    { &hf_lustre_mds_md_data,
+      { "mds md data", "lustre.lov_mds_md", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_v1,
+      { "lov mds md", "lustre.lov_mds_md", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_magic,
+      { "Lmm Magic", "lustre.lov_mds_md.lmm_magic", FT_UINT32, BASE_HEX, VALS(lustre_lov_magic) , 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_stripe_size,
+      { "Lmm Stripe Size", "lustre.lov_mds_md.lmm_stripe_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_object_id,
+      { "Lmm Object Id", "lustre.lov_mds_md.lmm_object_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_oi,
+      { "Lmm Object Id", "lustre.lov_mds_md.lmm_oi", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_object_seq,
+      { "Lmm Object SEQ", "lustre.lov_mds_md.lmm_object_seq", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_stripe_count,
+      { "Lmm Stripe Count", "lustre.lov_mds_md.lmm_stripe_count", FT_UINT16, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_pattern,
+      { "Lmm Pattern", "lustre.lov_mds_md.lmm_pattern", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_layout_gen,
+      { "Lmm Layout Generation", "lustre.lov_mds_md.lmm_layout_gen", FT_UINT16, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_lov_mds_md_lmm_pool_name,
+      { "Lmm Poolname", "lustre.lov_mds_md.lmm_poolname", FT_STRING, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_lov_mds_md_lmm_objects,
+      { "Lmm Objects", "lustre.lov_mds_md.lmm_objects", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_ost_id_oi_id,
+      { "OI Object Id", "lustre.ost_id.oi.oi_id", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL }},
+    { &hf_lustre_ost_id_oi_seq,
+      { "OI Object Seq", "lustre.ost_id.oi.oi_seq", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL }},
 
     { &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 }},
-
-    {&hf_lustre_ldlm_fl_lock_changed, {"LDLM_FL_LOCK_CHANGED", "lustre.ldlm_fl_lock_changed", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_LOCK_CHANGED, "", HFILL } },
-    {&hf_lustre_ldlm_fl_block_granted, {"LDLM_FL_BLOCK_GRANTED", "lustre.ldlm_fl_block_granted", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_BLOCK_GRANTED, "", HFILL } },
-    {&hf_lustre_ldlm_fl_block_conv, {"LDLM_FL_BLOCK_CONV", "lustre.ldlm_fl_block_conv", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_BLOCK_CONV, "", HFILL } },
-    {&hf_lustre_ldlm_fl_block_wait, {"LDLM_FL_BLOCK_WAIT", "lustre.ldlm_fl_block_wait", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_BLOCK_WAIT, "", HFILL } },
-    {&hf_lustre_ldlm_fl_cbpending, {"LDLM_FL_CBPENDING", "lustre.ldlm_fl_cbpending", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_CBPENDING, "", HFILL } },
-    {&hf_lustre_ldlm_fl_ast_sent, {"LDLM_FL_AST_SENT", "lustre.ldlm_fl_ast_sent", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_AST_SENT, "", HFILL } },
-    {&hf_lustre_ldlm_fl_wait_noreproc, {"LDLM_FL_WAIT_NOREPROC", "lustre.ldlm_fl_wait_noreproc", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_WAIT_NOREPROC, "", HFILL } },
-    {&hf_lustre_ldlm_fl_cancel, {"LDLM_FL_CANCEL", "lustre.ldlm_fl_cancel", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_CANCEL, "", HFILL } },
-    {&hf_lustre_ldlm_fl_replay, {"LDLM_FL_REPLAY", "lustre.ldlm_fl_replay", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_REPLAY, "", HFILL } },
-    {&hf_lustre_ldlm_fl_intent_only, {"LDLM_FL_INTENT_ONLY", "lustre.ldlm_fl_intent_only", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_INTENT_ONLY, "", HFILL } },
-    {&hf_lustre_ldlm_fl_local_only, {"LDLM_FL_LOCAL_ONLY", "lustre.ldlm_fl_local_only", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_LOCAL_ONLY, "", HFILL } },
-    {&hf_lustre_ldlm_fl_failed, {"LDLM_FL_FAILED", "lustre.ldlm_fl_failed", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_FAILED, "", HFILL } },
-    {&hf_lustre_ldlm_fl_has_intent, {"LDLM_FL_HAS_INTENT", "lustre.ldlm_fl_has_intent", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_HAS_INTENT, "", HFILL } },
-    {&hf_lustre_ldlm_fl_canceling, {"LDLM_FL_CANCELING", "lustre.ldlm_fl_canceling", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_CANCELING, "", HFILL } },
-    {&hf_lustre_ldlm_fl_local, {"LDLM_FL_LOCAL", "lustre.ldlm_fl_local", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_LOCAL, "", HFILL } },
-    {&hf_lustre_ldlm_fl_warn, {"LDLM_FL_WARN", "lustre.ldlm_fl_warn", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_WARN, "", HFILL } },
-    {&hf_lustre_ldlm_fl_discard_data, {"LDLM_FL_DISCARD_DATA", "lustre.ldlm_fl_discard_data", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_DISCARD_DATA, "", HFILL } },
-    {&hf_lustre_ldlm_fl_no_timeout, {"LDLM_FL_NO_TIMEOUT", "lustre.ldlm_fl_no_timeout", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_NO_TIMEOUT, "", HFILL } },
-    {&hf_lustre_ldlm_fl_block_nowait, {"LDLM_FL_BLOCK_NOWAIT", "lustre.ldlm_fl_block_nowait", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_BLOCK_NOWAIT, "", HFILL } },
-    {&hf_lustre_ldlm_fl_test_lock, {"LDLM_FL_TEST_LOCK", "lustre.ldlm_fl_test_lock", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_TEST_LOCK, "", HFILL } },
-    {&hf_lustre_ldlm_fl_lvb_ready, {"LDLM_FL_LVB_READY", "lustre.ldlm_fl_lvb_ready", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_LVB_READY, "", HFILL } },
-    {&hf_lustre_ldlm_fl_kms_ignore, {"LDLM_FL_KMS_IGNORE", "lustre.ldlm_fl_kms_ignore", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_KMS_IGNORE, "", HFILL } },
-    {&hf_lustre_ldlm_fl_no_lru, {"LDLM_FL_NO_LRU", "lustre.ldlm_fl_no_lru", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_NO_LRU, "", HFILL } },
-    {&hf_lustre_ldlm_fl_cancel_on_block, {"LDLM_FL_CANCEL_ON_BLOCK", "lustre.ldlm_fl_cancel_on_block", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_CANCEL_ON_BLOCK, "", HFILL } },
-    {&hf_lustre_ldlm_fl_cp_reqd, {"LDLM_FL_CP_REQD", "lustre.ldlm_fl_cp_reqd", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_CP_REQD, "", HFILL } },
-    {&hf_lustre_ldlm_fl_cleaned, {"LDLM_FL_CLEANED", "lustre.ldlm_fl_cleaned", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_CLEANED, "", HFILL } },
-    {&hf_lustre_ldlm_fl_atomic_cb, {"LDLM_FL_ATOMIC_CB", "lustre.ldlm_fl_atomic_cb", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_ATOMIC_CB, "", HFILL } },
-    {&hf_lustre_ldlm_fl_bl_ast, {"LDLM_FL_BL_AST", "lustre.ldlm_fl_bl_ast", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_BL_AST, "", HFILL } },
-    {&hf_lustre_ldlm_fl_bl_done, {"LDLM_FL_BL_DONE", "lustre.ldlm_fl_bl_done", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_BL_DONE, "", HFILL } },
-    {&hf_lustre_ldlm_fl_deny_on_contention, {"LDLM_FL_DENY_ON_CONTENTION", "lustre.ldlm_fl_deny_on_contention", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_FL_DENY_ON_CONTENTION, "", HFILL } },
-    {&hf_lustre_ldlm_ast_discard_data, {"LDLM_AST_DISCARD_DATA", "lustre.ldlm_ast_discard_data", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), LDLM_AST_DISCARD_DATA, "", 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"
+#undef   WSHARK_INIT_DATA
 
     { &hf_lustre_obdo_o_misc,
       { "O Misc", "lustre.obdo.o_misc", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
@@ -10210,9 +11457,6 @@ void proto_register_dcerpc_lustre(void)
       { "Qd Id", "lustre.qunit_data_old2.qd_id", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_logid_rec_padding2,
       { "Padding2", "lustre.llog_logid_rec.padding2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_orphan_rec_lor_tail,
-      { "Lor Tail", "lustre.llog_orphan_rec.lor_tail", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_llog_logid_rec_padding5,
       { "Padding5", "lustre.llog_logid_rec.padding5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     /*-------------------------------------------------------------------------------------------------------------*/
@@ -10230,12 +11474,22 @@ void proto_register_dcerpc_lustre(void)
       { "lookup", "lustre.ldlm_intent.opc_lookup", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_LOOKUP ,  "", HFILL } },
     { &hf_lustre_ldlm_intent_opc_unlink,
       { "unlink", "lustre.ldlm_intent.opc_unlink", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_UNLINK ,  "", HFILL } },
+    { &hf_lustre_ldlm_intent_opc_trunc,
+      { "trunc", "lustre.ldlm_intent.opc_trunc", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_TRUNC ,  "", HFILL } },
     { &hf_lustre_ldlm_intent_opc_getxattr,
       { "getxattr", "lustre.ldlm_intent.opc_getxattr", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_GETXATTR ,  "", HFILL } },
     { &hf_lustre_ldlm_intent_opc_exec,
       { "exec", "lustre.ldlm_intent.opc_exec", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_EXEC ,  "", HFILL } },
     { &hf_lustre_ldlm_intent_opc_pin,
       { "pin", "lustre.ldlm_intent.opc_pin", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_PIN ,  "", HFILL } },
+    { &hf_lustre_ldlm_intent_opc_layout,
+      { "layout", "lustre.ldlm_intent.opc_layout", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_LAYOUT ,  "", HFILL } },
+    { &hf_lustre_ldlm_intent_opc_q_dqacq,
+      { "quota dqacq", "lustre.ldlm_intent.opc_quota_dqacq", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_QUOTA_DQACQ ,  "", HFILL } },
+    { &hf_lustre_ldlm_intent_opc_q_conn,
+      { "quota conn", "lustre.ldlm_intent.opc_quota_conn", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_QUOTA_CONN ,  "", HFILL } },
+    { &hf_lustre_ldlm_intent_opc_setxattr,
+      { "setxattr", "lustre.ldlm_intent.opc_setxattr", FT_BOOLEAN, 32, TFS(&lnet_flags_set_truth), IT_SETXATTR ,  "", HFILL } },
        /*-------------------------------------------------------------------*/
                { &hf_lustre_ldlm_intent_opc,
       { "intent opcode", "lustre.ldlm_intent.opc", FT_NONE, BASE_NONE, NULL, 0,  "", HFILL}},
@@ -10267,14 +11521,8 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_llog_size_change_rec_lsc_hdr,
       { "Lsc Hdr", "lustre.llog_size_change_rec.lsc_hdr", FT_NONE,
                    BASE_NONE, NULL, 0, "", HFILL } },
-    { &hf_lustre_llog_create_rec_lcr_tail,
-      { "Lcr Tail", "lustre.llog_create_rec.lcr_tail", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_llog_logid_lgl_oseq,
       { "Lgl SEQ", "lustre.llog_logid.lgl_oseq", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_create_rec_lcr_hdr,
-      { "Lcr Hdr", "lustre.llog_create_rec.lcr_hdr", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_llog_cookie_lgc_padding,
       { "Lgc Padding", "lustre.llog_cookie.lgc_padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_qunit_data_old_qd_type,
@@ -10290,7 +11538,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_ldlm_request_lock_flags,
       { "Lock Flags", "lustre.ldlm_request.lock_flags", FT_UINT32, BASE_HEX, NULL, 0 , "", HFILL }},
     { &hf_lustre_obdo_o_mode,
-      { "O Mode", "lustre.obdo.o_mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+      { "O Mode", "lustre.obdo.o_mode", FT_UINT32, BASE_OCT, NULL, 0, "", HFILL }},
     { &hf_lustre_mgs_target_info_mti_svname,
       { "Mti Svname", "lustre.mgs_target_info.mti_svname", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llogd_body_lgd_logid,
@@ -10298,8 +11546,6 @@ void proto_register_dcerpc_lustre(void)
                    BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_llog_log_hdr_llh_size,
       { "Llh Size", "lustre.llog_log_hdr.llh_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_create_rec_padding,
-      { "Padding", "lustre.llog_create_rec.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obdo_o_handle,
       { "O Handle", "lustre.obdo.o_handle", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_obdo_o_atime,
@@ -10314,9 +11560,9 @@ 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_t_vals), 0, "", HFILL }},
+      { "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,
       { "O SEQ", "lustre.obdo.o_seq", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obdo_o_gid,
@@ -10351,13 +11597,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 }},
@@ -10397,8 +11649,6 @@ void proto_register_dcerpc_lustre(void)
       { "Lgc Index", "lustre.llog_cookie.lgc_index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_lov_desc_ld_uuid,
       { "Ld Uuid", "lustre.lov_desc.ld_uuid", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
-    { &hf_lustre_llog_create_rec_lcr_oid,
-      { "Lcr Oid", "lustre.llog_create_rec.lcr_oid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_reply_lock_desc,
       { "Lock Desc", "lustre.ldlm_reply.lock_desc", FT_NONE,
                    BASE_NONE, NULL, 0, "", HFILL } },
@@ -10406,20 +11656,15 @@ void proto_register_dcerpc_lustre(void)
       { "Ld Padding 0", "lustre.lov_desc.ld_padding_0", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_unlink_rec_lur_ogen,
       { "Lur Ogen", "lustre.llog_unlink_rec.lur_ogen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_orphan_rec_lor_hdr,
-      { "Lor Hdr", "lustre.llog_orphan_rec.lor_hdr", FT_NONE,
-                   BASE_NONE, 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_llog_orphan_rec_padding,
-      { "Padding", "lustre.llog_orphan_rec.padding", FT_UINT32, BASE_DEC, 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,
@@ -10453,29 +11698,27 @@ void proto_register_dcerpc_lustre(void)
                    BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_obdo_o_grant,
       { "O Grant", "lustre.obdo.o_grant", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_obdo_o_padding_2,
-      { "O Padding 2", "lustre.obdo.o_padding_2", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_obdo_o_uid_h,
+      { "O Uid H", "lustre.obdo.o_uid_h", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_obdo_o_gid_h,
+      { "O Gid H", "lustre.obdo.o_gid_h", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_quota_adjust_qunit_qaq_iunit_sz,
       { "Qaq Iunit Sz", "lustre.quota_adjust_qunit.qaq_iunit_sz", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_unlink_rec_padding,
       { "Padding", "lustre.llog_unlink_rec.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_lock_desc_l_req_mode,
-      { "L Req Mode", "lustre.ldlm_lock_desc.l_req_mode", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_mode_t_vals), 0, "", HFILL }},
+      { "L Req Mode", "lustre.ldlm_lock_desc.l_req_mode", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_mode_vals), 0, "", HFILL }},
     { &hf_lustre_ldlm_extent_end,
       { "End", "lustre.ldlm_extent.end", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llog_gen_rec_lgr_hdr,
       { "Lgr Hdr", "lustre.llog_gen_rec.lgr_hdr", FT_NONE,
                    BASE_NONE, NULL, 0, "", HFILL } },
-    { &hf_lustre_llog_orphan_rec_lor_ogen,
-      { "Lor Ogen", "lustre.llog_orphan_rec.lor_ogen", FT_UINT32, BASE_DEC, 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,
       { "Llh Bitmap Offset", "lustre.llog_log_hdr.llh_bitmap_offset", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_orphan_rec_lor_oid,
-      { "Lor Oid", "lustre.llog_orphan_rec.lor_oid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_reply_lock_padding,
       { "Lock Padding", "lustre.ldlm_reply.lock_padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_obd_quotactl_qc_id,
@@ -10501,14 +11744,12 @@ void proto_register_dcerpc_lustre(void)
       { "Ld Tgt Count", "lustre.lov_desc.ld_tgt_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_llogd_body_lgd_cur_offset,
       { "Lgd Cur Offset", "lustre.llogd_body.lgd_cur_offset", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_create_rec_lcr_ogen,
-      { "Lcr Ogen", "lustre.llog_create_rec.lcr_ogen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_qunit_data_old2_qd_count,
       { "Qd Count", "lustre.qunit_data_old2.qd_count", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &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,
@@ -10517,16 +11758,13 @@ 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,
       { "Mgs Param", "lustre.mgs_send_param.mgs_param", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }},
-    { &hf_lustre_llog_create_rec_lcr_fid,
-      { "Lcr Fid", "lustre.llog_create_rec.lcr_fid", FT_NONE,
-                   BASE_NONE, NULL, 0, "", HFILL } },
     { &hf_lustre_lov_desc_ld_default_stripe_offset,
       { "Ld Default Stripe Offset", "lustre.lov_desc.ld_default_stripe_offset", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_resource_desc_lr_name,
@@ -10571,15 +11809,47 @@ void proto_register_dcerpc_lustre(void)
       { "End", "lustre.ldlm_flock.end", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_mgs_target_info_mti_nid_count,
       { "Mti Nid Count", "lustre.mgs_target_info.mti_nid_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
-    /* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
+    /* -------------------------------------------------------------------- */
     { &hf_lustre_mgs_target_info,
       { "mgs target info", "lustre.mgs_target_info", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
     { &hf_lustre_mgs_send_param,
       { "mgs send param", "lustre.mgs_send_param", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
-    /* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
+
+    { &hf_lustre_mgs_config_body,
+      { "mgs config body", "lustre.mgs_config_body", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_mgs_config_body_name,
+      { "mcb name", "lustre.mgs_config_body.name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_mgs_config_body_offset,
+      { "mcb offset", "lustre.mgs_config_body.offset", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_mgs_config_body_type,
+      { "mcb type", "lustre.mgs_config_body.type", FT_UINT16, BASE_DEC, VALS(lustre_mgs_config_body_types), 0, "", HFILL }},
+    { &hf_lustre_mgs_config_body_reserved,
+      { "mcb reserved", "lustre.mgs_config_body.type", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_mgs_config_body_bits,
+      { "mcb bit shift", "lustre.mgs_config_body.type", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_mgs_config_body_units,
+      { "mcb units", "lustre.mgs_config_body.type", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+
+    { &hf_lustre_mgs_config_res,
+      { "mgs config res", "lustre.mgs_config_res", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_mgs_config_res_offset,
+      { "mcr offset", "lustre.mgs_config_res.offset", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+    { &hf_lustre_mgs_config_res_size,
+      { "mcr size", "lustre.mgs_config_res.size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }},
+
+    /* -------------------------------------------------------------------- */
     { &hf_lustre_ost_lvb,
       { "ost lvb data", "lustre.ost_lvb", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
 
+    { &hf_lustre_xattrs,
+      { "XATTR", "lustre.xattr", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_xattrs_name,
+      { "xattr name", "lustre.xattr.name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_xattrs_data,
+      { "xattr data", "lustre.xattr.data", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }},
+    { &hf_lustre_xattrs_size,
+      { "xattr size", "lustre.xattr.size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
+
     { &hf_lustre_obdo_o_ctime,
       { "O Ctime", "lustre.obdo.o_ctime",FT_ABSOLUTE_TIME,
                    ABSOLUTE_TIME_LOCAL, NULL, 0, "", HFILL } },
@@ -10590,7 +11860,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_lov_desc_ld_qos_maxage,
       { "Ld Qos Maxage", "lustre.lov_desc.ld_qos_maxage", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }},
     { &hf_lustre_ldlm_resource_desc_lr_type,
-      { "Lr Type", "lustre.ldlm_resource_desc.lr_type", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_type_t_vals), 0, "", HFILL }},
+      { "Lr Type", "lustre.ldlm_resource_desc.lr_type", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_type_vals), 0, "", HFILL }},
     { &hf_lustre_llog_setattr_rec_lsr_tail,
       { "Lsr Tail", "lustre.llog_setattr_rec.lsr_tail", FT_NONE,
                    BASE_NONE, NULL, 0, "", HFILL } },
@@ -10634,13 +11904,202 @@ 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 } },
     { &hf_lustre_obd_dqblk_dqb_ihardlimit,
-      { "Dqb Ihardlimit", "lustre.obd_dqblk.dqb_ihardlimit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}
-
+      { "Dqb Ihardlimit", "lustre.obd_dqblk.dqb_ihardlimit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+
+    /* seq */
+    { &hf_lustre_seq_opc,
+      { "Seq OPC", "lustre.seq_opc", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_seq_range,
+      { "Seq Range", "lustre.seq_range", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_seq_range_start,
+      { "Seq Range Start", "lustre.seq_range.start", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_seq_range_end,
+      { "Seq Range End", "lustre.seq_range.end", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_seq_range_index,
+      { "Seq Range Index", "lustre.seq_range.index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_seq_range_flags,
+      { "Seq Range Flags", "lustre.seq_range.flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+
+    /* fld */
+    { &hf_lustre_fld_opc,
+      { "Fld OPC", "lustre.fld_opc", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_fld_range,
+      { "Fld Range", "lustre.fld_range", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_fld_range_start,
+      { "Fld Range Start", "lustre.fld_range.start", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_fld_range_end,
+      { "Fld Range End", "lustre.fld_range.end", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_fld_range_index,
+      { "Fld Range Index", "lustre.fld_range.index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_fld_range_flags,
+      { "Fld Range Flags", "lustre.fld_range.flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+
+    /* struct mdt_ioepoch */
+    { &hf_lustre_mdt_ioepoch,
+      { "MDT ioepoch", "lustre.mdt_ioepoch", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_mdt_ioepoch_handle,
+      { "Handle", "lustre.mdt_ioepoch.handle", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &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_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_mdt_ioepoch_padding,
+      { "Padding", "lustre.mdt_ioepoch.padding", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+
+    /* struct lustre_capa */
+    { &hf_lustre_capa,
+      { "Capability", "lustre.capa", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_fid,
+      { "Capa fid", "lustre.capa.fid", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_opc,
+      { "Capa opc", "lustre.capa.opc", FT_UINT64, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_uid,
+      { "Capa uid", "lustre.capa.uid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_gid,
+      { "Capa gid", "lustre.capa.gid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_flags,
+      { "Capa flags", "lustre.capa.flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_keyid,
+      { "Capa keyid", "lustre.capa.keyid", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_timeout,
+      { "Capa timeout", "lustre.capa.timeout", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_expiry,
+      { "Capa expiry", "lustre.capa.expiry", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_capa_hmac,
+      { "Capa hmac", "lustre.capa.hmac", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    /* 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_qb,
+      { "Quota Body", "lustre.quota_body", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_fid,
+      { "Fid", "lustre.quota_body.fid", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_id,
+      { "ID", "lustre.quota_body.id", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_flags,
+      { "Flags", "lustre.quota_body.flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_padding,
+      { "padding", "lustre.quota_body.padding", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_count,
+      { "Count", "lustre.quota_body.count", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_usage,
+      { "Usage", "lustre.quota_body.usage", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_slv_ver,
+      { "Slave Ver", "lustre.quota_body.slv_ver", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_lockh,
+      { "Per-ID Lock Handle", "lustre.quota_body.lockh", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_qb_glb_lockh,
+      { "Global Lock Handle", "lustre.quota_body.glb_lockh", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_qid_fid,
+      { "Fid", "lustre.lquota_id.fid", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_qid_uid,
+      { "UID", "lustre.lquota_id.uid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_qid_gid,
+      { "GID", "lustre.lquota_id.gid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_layout_intent,
+      { "Layout Intent", "lustre.layout_intent", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+    { &hf_lustre_layout_intent_opc,
+      { "Op Code", "lustre.layout_intent.opc", FT_UINT32, BASE_HEX, VALS(lustre_layout_intent_opc_values), 0, "", HFILL } },
+    { &hf_lustre_layout_intent_flags,
+      { "Flags", "lustre.layout_intent.flags", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL } },
+    { &hf_lustre_layout_intent_start,
+      { "Start", "lustre.layout_intent.start", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+    { &hf_lustre_layout_intent_end,
+      { "End", "lustre.layout_intent.end", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+
+    { &hf_lustre_generic_data,
+      { "generic data", "lustre.generic_data", FT_NONE, BASE_NONE, NULL, 0, "", HFILL}},
   };
 
 
@@ -10654,6 +12113,7 @@ void proto_register_dcerpc_lustre(void)
     &ett_lustre_lustre_handle_v2,
     &ett_lustre_obd_connect_data,
     &ett_lustre_lov_mds_md_v1,
+    &ett_lustre_lov_mds_md_v3,
     &ett_lustre_lov_ost_data_v1,
     &ett_lustre_obd_statfs,
     &ett_lustre_obd_ioobj,
@@ -10685,6 +12145,8 @@ void proto_register_dcerpc_lustre(void)
     &ett_lustre_ldlm_reply,
     &ett_lustre_mgs_send_param,
     &ett_lustre_mgs_target_info,
+    &ett_lustre_mgs_config_body,
+    &ett_lustre_mgs_config_res,
     &ett_lustre_cfg_marker,
     &ett_lustre_llog_catid,
     &ett_lustre_llog_logid,
@@ -10692,8 +12154,6 @@ void proto_register_dcerpc_lustre(void)
     &ett_lustre_llog_rec_hdr,
     &ett_lustre_llog_rec_tail,
     &ett_lustre_llog_logid_rec,
-    &ett_lustre_llog_create_rec,
-    &ett_lustre_llog_orphan_rec,
     &ett_lustre_llog_unlink_rec,
     &ett_lustre_llog_setattr_rec,
     &ett_lustre_llog_size_change_rec,
@@ -10709,7 +12169,24 @@ void proto_register_dcerpc_lustre(void)
     &ett_lustre_qunit_data_old2,
     &ett_lustre_qunit_data_old,
     &ett_lustre_ldlm_lock_flags,
-    &ett_lustre_llog_log_llh_flags
+    &ett_lustre_llog_log_llh_flags,
+    &ett_lustre_seq_range,
+    &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,
+    &ett_lustre_quota_body,
+    &ett_lustre_lquota_id,
+    &ett_lustre_layout_intent,
+    &ett_lustre_xattrs,
+    &ett_lustre_ost_id,
        };
 
   proto_lustre = proto_register_protocol("Lustre", "lustre", "lustre");
@@ -10724,27 +12201,26 @@ void proto_reg_handoff_lustre(void)
   lustre_handle=create_dissector_handle(dissect_lustre, proto_lustre);
   /* we use Lustre only if we get ptl_index = One of this code (we have removed the bulk code) */
   /* in LNET we test if the message is a put or not before adding an lnet.ptl_index value */
-  dissector_add("lnet.ptl_index", MDC_REPLY_PORTAL          , lustre_handle);
-  dissector_add("lnet.ptl_index", CONNMGR_REQUEST_PORTAL    , lustre_handle);
-  dissector_add("lnet.ptl_index", CONNMGR_REPLY_PORTAL      , lustre_handle);
-  dissector_add("lnet.ptl_index", OSC_REPLY_PORTAL          , lustre_handle);
-  dissector_add("lnet.ptl_index", OST_IO_PORTAL             , lustre_handle);
-  dissector_add("lnet.ptl_index", OST_CREATE_PORTAL         , lustre_handle);
-  dissector_add("lnet.ptl_index", MDC_REPLY_PORTAL          , lustre_handle);
-  dissector_add("lnet.ptl_index", MDS_REQUEST_PORTAL        , lustre_handle);
-  dissector_add("lnet.ptl_index", LDLM_CB_REQUEST_PORTAL    , lustre_handle);
-  dissector_add("lnet.ptl_index", LDLM_CB_REPLY_PORTAL      , lustre_handle);
-  dissector_add("lnet.ptl_index", LDLM_CANCEL_REQUEST_PORTAL, lustre_handle);
-  dissector_add("lnet.ptl_index", LDLM_CANCEL_REPLY_PORTAL  , lustre_handle);
-  dissector_add("lnet.ptl_index", MDS_SETATTR_PORTAL        , lustre_handle);
-  dissector_add("lnet.ptl_index", MDS_READPAGE_PORTAL       , lustre_handle);
-  dissector_add("lnet.ptl_index", MGC_REPLY_PORTAL          , lustre_handle);
-  dissector_add("lnet.ptl_index", MGS_REQUEST_PORTAL        , lustre_handle);
-  dissector_add("lnet.ptl_index", MGS_REPLY_PORTAL          , lustre_handle);
-  dissector_add("lnet.ptl_index", OST_REQUEST_PORTAL        , lustre_handle);
-       dissector_add("lnet.ptl_index", FLD_REQUEST_PORTAL, lustre_handle);
-       dissector_add("lnet.ptl_index", SEQ_METADATA_PORTAL, lustre_handle);
-       dissector_add("lnet.ptl_index", SEQ_DATA_PORTAL, lustre_handle);
-       dissector_add("lnet.ptl_index", SEQ_CONTROLLER_PORTAL, lustre_handle);
-       dissector_add("lnet.ptl_index", MGS_BULK_PORTAL, lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MDC_REPLY_PORTAL          , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", CONNMGR_REQUEST_PORTAL    , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", CONNMGR_REPLY_PORTAL      , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", OSC_REPLY_PORTAL          , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", OST_IO_PORTAL             , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", OST_CREATE_PORTAL         , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MDC_REPLY_PORTAL          , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MDS_REQUEST_PORTAL        , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", LDLM_CB_REQUEST_PORTAL    , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", LDLM_CB_REPLY_PORTAL      , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", LDLM_CANCEL_REQUEST_PORTAL, lustre_handle);
+  dissector_add_uint("lnet.ptl_index", LDLM_CANCEL_REPLY_PORTAL  , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MDS_SETATTR_PORTAL        , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MDS_READPAGE_PORTAL       , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MGC_REPLY_PORTAL          , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MGS_REQUEST_PORTAL        , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", MGS_REPLY_PORTAL          , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", OST_REQUEST_PORTAL        , lustre_handle);
+  dissector_add_uint("lnet.ptl_index", FLD_REQUEST_PORTAL, lustre_handle);
+  dissector_add_uint("lnet.ptl_index", SEQ_METADATA_PORTAL, lustre_handle);
+  dissector_add_uint("lnet.ptl_index", SEQ_DATA_PORTAL, lustre_handle);
+  dissector_add_uint("lnet.ptl_index", SEQ_CONTROLLER_PORTAL, lustre_handle);
 }