Whamcloud - gitweb
LU-4156 wireshark: Fix build against wireshark 1.10.x
[fs/lustre-release.git] / lustre / contrib / wireshark / packet-lustre.c
index f961f69..984cc6b 100644 (file)
@@ -24,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, 2013, Intel Corporation.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -37,6 +37,7 @@
 #include <epan/packet.h>
 
 #include <epan/dissectors/packet-windows-common.h>
+#include "lustre_dlm_flags.h"
 
 const true_false_string lnet_flags_set_truth = { "Set", "Unset" };
 
@@ -55,6 +56,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 */
 
@@ -187,29 +193,40 @@ 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_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_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 IT_OPEN     0x0001
@@ -257,38 +274,11 @@ enum seq_rpc_opc {
   SEQ_FIRST_OPC    = SEQ_QUERY
 };
 
-#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 fld_rpc_opc {
+  FLD_QUERY        = 900,
+  FLD_LAST_OPC,
+  FLD_FIRST_OPC    = FLD_QUERY
+};
 
 #define LDLM_ENQUEUE (101)
 #define LDLM_CONVERT (102)
@@ -321,6 +311,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
@@ -411,6 +402,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;
@@ -418,8 +411,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;
@@ -436,8 +427,10 @@ 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_acl = -1;
 
 /* -----------------------------------------------*/
 /* Header field declarations */
@@ -479,39 +472,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;
@@ -710,6 +685,13 @@ 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;
@@ -717,6 +699,17 @@ 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_lustre_handle_cookie = -1;
 static int hf_lustre_ptlrpc_body_pb_last_committed = -1;
@@ -803,7 +796,7 @@ 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;
@@ -851,7 +844,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;
@@ -866,9 +858,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;
@@ -880,7 +870,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;
@@ -923,15 +912,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;
@@ -955,11 +941,9 @@ 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;
@@ -972,7 +956,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;
@@ -982,7 +965,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;
@@ -1046,11 +1028,17 @@ static int hf_lustre_llog_hdr_llh_flag_is_play = -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_) ;
 
 
@@ -1074,41 +1062,6 @@ const value_string lustre_lov_magic[] = {
   {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      "},
@@ -1142,6 +1095,14 @@ const value_string lustre_mds_flags_vals[] = {
   { 0, NULL }
 };
 
+const value_string lustre_mgs_config_body_types[] = {
+  { 0, "CONFIG" },
+  { 1, "SPTLRPC" },
+  { 2, "RECOVER" },
+  { 3, "MAX" },
+  { 0, NULL }
+};
+
 const value_string lustre_LMTypes[] = {
   { PTL_RPC_MSG_REQUEST, "request"},
   { PTL_RPC_MSG_ERR , "error"},
@@ -1201,7 +1162,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"},
@@ -1217,7 +1189,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"},
@@ -1367,6 +1340,14 @@ dissect_uint32
 }
 
 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)
 {
@@ -1375,6 +1356,52 @@ dissect_uint8
 }
 /* -------------------------------------------------------------------------    */
 
+/* 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;
+
+  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;
+}
+
+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;
+}
+
+/* ------------------------------------------------------------------------ */
 
 
 
@@ -1768,6 +1795,31 @@ lustre_dissect_struct_lov_mds_md_v1(tvbuff_t *tvb _U_, int offset _U_, packet_in
   return offset;
 }
 
+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;
+
+  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;
+  default:
+    offset=lustre_dissect_element_data(tvb, offset, pinfo, parent_tree,
+                                      hf_lustre_extra_padding, buff_num);
+    break;
+  };
+
+  return offset;
+}
+
 
 
 /* IDL: struct obd_statfs { */
@@ -2030,7 +2082,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: } */
 
@@ -2051,9 +2103,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;
 }
@@ -2086,7 +2138,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);
 
@@ -5576,10 +5628,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;
@@ -5591,8 +5645,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;
 
@@ -5601,78 +5656,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);
+  /* 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_)
 {
@@ -5720,8 +5720,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;
 
@@ -5730,7 +5729,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);
@@ -5800,6 +5799,83 @@ 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);
+    display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO, " name : %s",
+                     (const gchar *) tvb_get_string(tvb,offset,string_len) );
+    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; */
@@ -6505,183 +6581,6 @@ 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_rec_hdr { */
-/* IDL: } lcr_hdr; */
-/* IDL:        struct ll_fid { */
-/* IDL: } lcr_fid; */
-/* IDL:        uint64 lcr_oid; */
-/* IDL:        uint32 lcr_ogen; */
-/* IDL:        uint32 padding; */
-/* IDL:        struct llog_rec_tail { */
-/* IDL: } lcr_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_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85d5830)(tvb,offset,pinfo,tree,hf_lustre_llog_create_rec_lcr_fid);
-
-  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_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_create_rec_lcr_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_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_create_rec_lcr_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_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_create_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_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85d69dc)(tvb,offset,pinfo,tree,hf_lustre_llog_create_rec_lcr_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_)
-{
-  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_create_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_create_rec_lcr_oid(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_create_rec_lcr_ogen(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_create_rec_padding(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_create_rec_lcr_tail(tvb, offset, pinfo, tree);
-
-
-  proto_item_set_len(item, offset-old_offset);
-
-  return offset;
-}
-
-
-
-
-/* IDL: struct llog_orphan_rec { */
-/* IDL:        struct llog_rec_hdr { */
-/* IDL: } lor_hdr; */
-/* IDL:        uint64 lor_oid; */
-/* IDL:        uint32 lor_ogen; */
-/* IDL:        uint32 padding; */
-/* IDL:        struct llog_rec_tail { */
-/* IDL: } lor_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_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85d767c)(tvb,offset,pinfo,tree,hf_lustre_llog_orphan_rec_lor_hdr);
-
-  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_)
-{
-  offset=dissect_uint64(tvb, offset, pinfo, tree,  hf_lustre_llog_orphan_rec_lor_oid);
-
-  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_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_orphan_rec_lor_ogen);
-
-  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_)
-{
-  offset=dissect_uint32(tvb, offset, pinfo, tree,  hf_lustre_llog_orphan_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_)
-{
-  //offset=lustre_dissect_struct_HASH(0x85d8550)(tvb,offset,pinfo,tree,hf_lustre_llog_orphan_rec_lor_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_)
-{
-  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_orphan_rec);
-  }
-
-  offset=lustre_dissect_element_llog_orphan_rec_lor_hdr(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_orphan_rec_lor_oid(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_orphan_rec_lor_ogen(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_orphan_rec_padding(tvb, offset, pinfo, tree);
-
-  offset=lustre_dissect_element_llog_orphan_rec_lor_tail(tvb, offset, pinfo, tree);
-
-
-  proto_item_set_len(item, offset-old_offset);
-
-  return offset;
-}
 
 
 
@@ -7896,7 +7795,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;
@@ -8114,9 +8012,9 @@ lustre_dissect_struct_qunit_data_old(tvbuff_t *tvb _U_, int offset _U_, packet_i
 }
 
 int
-lustre_dissect_struct_seq_opc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_)
+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_lustre_seq_opc);
+  offset=dissect_uint32(tvb, offset, pinfo, parent_tree,  hf_index);
   /* Pad out to 8 bytes */
   offset=add_extra_padding(tvb,offset,pinfo,parent_tree);
 
@@ -8124,7 +8022,7 @@ lustre_dissect_struct_seq_opc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 }
 
 int
-lustre_dissect_struct_seq_range(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_)
+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;
@@ -8133,7 +8031,7 @@ lustre_dissect_struct_seq_range(tvbuff_t *tvb _U_, int offset _U_, packet_info *
   old_offset=offset;
 
   if (parent_tree) {
-    item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+    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);
   }
 
@@ -8149,6 +8047,31 @@ lustre_dissect_struct_seq_range(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 }
 
 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;
@@ -8172,8 +8095,53 @@ lustre_dissect_struct_mdt_ioepoch(tvbuff_t *tvb _U_, int offset _U_, packet_info
   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_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)
+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;
@@ -8182,10 +8150,7 @@ lustre_dissect_struct_capa(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 
   old_offset=offset;
 
-  if(buf_num+1>LUSTRE_BUFCOUNT)
-    return offset;
-
-  data_len = tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF + sizeof(guint32) * buf_num);
+  data_len = LUSTRE_BUFFER_LEN(buf_num);
   if (data_len == 0)
     return offset;
 
@@ -8194,11 +8159,23 @@ lustre_dissect_struct_capa(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     tree = proto_item_add_subtree(item, ett_lustre_capa);
   }
 
-  g_print("BUG: decode of lustre_capa NYI\n");
-  if (check_col(pinfo->cinfo, COL_INFO))
-    col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
+  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+=120;
+  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);
@@ -8206,6 +8183,37 @@ lustre_dissect_struct_capa(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 }
 
 
+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;
+}
+
 
 /* ------------------------------------------------------------------------- */
 /* dissect string .
@@ -8233,10 +8241,10 @@ lustre_dissect_element_string (tvbuff_t *tvb _U_, int offset _U_, packet_info *p
    * }
    */
 
-  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 */
   /*    g_print("buf_num:%d (max:%d) BUFLEN_OFF:%#x strlen:%d\n",
        buf_num, LUSTRE_BUFCOUNT,
        LUSTRE_BUFLEN_OFF, string_len);*/
@@ -8254,29 +8262,6 @@ lustre_dissect_element_string (tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 }
 
 /* ------------------------------------------------------------------------- */
-/* 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;
-  if(buf_num+1>LUSTRE_BUFCOUNT)
-    return offset;
-
-  data_len = tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF + sizeof(guint32) * buf_num);
-  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); /* align on 8 bytes */
-
-  return offset;
-}
-/* ------------------------------------------------------------------------ */
 
 
 /* Process REINT opcode requests */
@@ -8288,32 +8273,53 @@ 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_string(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_string(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 :
+    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_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa, 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 */
+      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 {
@@ -8321,22 +8327,35 @@ static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *
         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_string(tvb, offset, pinfo, tree, hf_lustre_reint_old_name, LUSTRE_REQ_REC_OFF+3);
+      offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_new_name, LUSTRE_REQ_REC_OFF+4);
+      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_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] */
+      /* 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_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);
+      } else if (LUSTRE_BUFCOUNT == 2)
+       offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree,
+                                                 hf_lustre_ldlm_request);
       break;
     default:
       break;
@@ -8369,9 +8388,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) ;
@@ -8381,44 +8404,38 @@ 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_string(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 */
-      }
-
       break;
     case OST_CONNECT:
       if (pb_type==PTL_RPC_MSG_REQUEST) /* [targetuuid][clientuuid][lustre_handle][obd_connect_data] */
@@ -8430,23 +8447,27 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       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_string(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 */
@@ -8463,7 +8484,6 @@ lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       /* [quota_adjust_qunit] in both case ? */
       offset=lustre_dissect_struct_quota_adjust_qunit(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit) ;
   };
-
   return offset;
 }
 
@@ -8475,8 +8495,11 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       /*[nothing]*/
       break;
     case MDS_GETSTATUS:
-      /*[mds body]*/
+      /*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)
@@ -8485,17 +8508,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_element_string(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)
@@ -8521,19 +8558,19 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       { /* [mdt_ioepoch][rec_reint][capa1] */
        offset=lustre_dissect_struct_mdt_ioepoch(tvb, offset, pinfo, tree, hf_lustre_mdt_ioepoch);
 
-       if(LUSTRE_BUFCOUNT>=3)
+       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);
 
-       if(LUSTRE_BUFCOUNT>=4)
-         offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, 4);
+       offset=lustre_dissect_struct_capa(tvb,offset,pinfo,tree, hf_lustre_capa, LUSTRE_REQ_REC_OFF+2);
       }
       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;
 
@@ -8553,22 +8590,22 @@ lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       /* 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] */
+
+      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) ;
-       if(tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+1)) > 0){
-         /* OPEN, RENAME, and UNLINK */
-         /* rec_unlink or rec_rename */
-         if(tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+1)) > 0){
-           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=lustre_dissect_struct_lov_mds_md(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_v1, 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:
@@ -8592,7 +8629,7 @@ 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]*/
+      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);
       break;
     default:
@@ -8612,73 +8649,70 @@ lustre_ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
     /* [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)
-    {
+    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)
-    {
+    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+sizeof(guint32)*2) == 40))
+                                             &ldlm_type);
+      /* check if we're done processing */
+      if (LUSTRE_BUFCOUNT <= 2)
+         break;
+
+      if (LUSTRE_BUFFER_LEN(LUSTRE_REPLY_REC_OFF) == 40)
        /* TODO :this code need to be check and test, the
-        * lustre corresponding code is'nt explicit, so not
+        * 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);
 
-      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;
-         };
-       }
+      else if (ldlm_type == LDLM_EXTENT) {
+       offset=lustre_dissect_struct_lov_mds_md(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_v1,
+                                               LUSTRE_DLM_REPLY_REC_OFF);
+       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_lov_mds_md_v1,
+                                             LUSTRE_DLM_INTENT_REC_OFF);
+
+      /* ldlm_intent_server : ACL */
+      offset=lustre_dissect_struct_acl(tvb, offset, pinfo, tree,
+                                      hf_lustre_acl, LUSTRE_DLM_INTENT_REC_OFF+1);
+
+      /* ldlm_intent_open_server : [capa1][capa2] */
+      offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree,
+                                       hf_lustre_capa, LUSTRE_DLM_INTENT_REC_OFF+2);
+      offset=lustre_dissect_struct_capa(tvb, offset, pinfo, tree,
+                                       hf_lustre_capa, LUSTRE_DLM_INTENT_REC_OFF+3);
     }
     break;
 
   case LDLM_CONVERT:
-    if(pb_type==PTL_RPC_MSG_REQUEST)
-      /*[ldlm_request]*/
+    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]*/
+    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_CANCEL:
-    if(pb_type==PTL_RPC_MSG_REQUEST)
-      /*[ldlm_request]*/
+    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_BL_CALLBACK: /* TODO : check the corresponding code in lustre*/
-    if(pb_type==PTL_RPC_MSG_REQUEST)
-      /*[ldlm_request]*/
+  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;
 
@@ -8687,20 +8721,20 @@ lustre_ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
       /*[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)
+      if(LUSTRE_BUFFER_LEN(LUSTRE_DLM_REPLY_REC_OFF) > 0)
        offset=lustre_dissect_struct_ost_lvb(tvb,offset,pinfo,tree,hf_lustre_ost_lvb);
     }
     /*reply : [nothing] */
     break;
 
   case LDLM_GL_CALLBACK:
-    if(pb_type==PTL_RPC_MSG_REQUEST)
-      /*[ldlm_request] */
+    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) ;
-    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);
+      if(LUSTRE_BUFFER_LEN(LUSTRE_DLM_REPLY_REC_OFF) > 0)
+       offset=lustre_dissect_struct_ost_lvb(tvb,offset,pinfo,tree,hf_lustre_ost_lvb);
+    }
+    if(pb_type==PTL_RPC_MSG_REPLY) /* [ost_lvb] */
+      offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree, hf_lustre_ost_lvb);
     break;
 
   default :
@@ -8736,6 +8770,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;
   };
@@ -8770,22 +8810,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);
+                                              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);
@@ -8805,22 +8846,21 @@ 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_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);
+                                              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 */
@@ -8829,7 +8869,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*/
@@ -8849,8 +8889,8 @@ lustre_seq_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
   switch (opc) {
   case SEQ_QUERY:
     if (pb_type == PTL_RPC_MSG_REQUEST)
-      offset=lustre_dissect_struct_seq_opc(tvb, offset, pinfo, tree);
-    offset=lustre_dissect_struct_seq_range(tvb, offset, pinfo, tree, hf_lustre_seq_range);
+      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:
@@ -8862,11 +8902,38 @@ lustre_seq_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 
   return offset;
 }
+
+static int
+lustre_fld_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
+                         proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type)
+{
+  switch (opc) {
+  case FLD_QUERY:
+    if (pb_type == PTL_RPC_MSG_REQUEST)
+      offset=lustre_dissect_struct_seq(tvb, offset, pinfo, tree, hf_lustre_fld_opc);
+    offset=lustre_dissect_struct_seq_range(tvb, offset, pinfo, tree);
+    break;
+
+  default:
+    g_print("error: FLD Opcode: %d unknown\n", opc);
+    if (check_col(pinfo->cinfo, COL_INFO))
+      col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG");
+    break;
+  };
+
+  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) ;
 
@@ -8888,6 +8955,9 @@ lustre_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
   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;
 }
 
@@ -8915,7 +8985,7 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
   /* if 0x0003 we have CREAT + OPEN
    */
   if (intent_opc & IT_OPEN) {
-    /* mdc_intent_open_pack(), d'où [opcode][mdc_rec_create][name][eada] */
+    /* mdc_intent_open_pack(), d'où [opcode][mdc_rec_create][capa1][capa2][name][eada] */
     offset=lustre_dissect_struct_mdt_rec_create(tvb, offset, pinfo, tree,
                                                hf_lustre_mdt_rec_create);
     offset=lustre_dissect_element_string(tvb, offset, pinfo, tree,
@@ -8924,28 +8994,32 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
     offset=lustre_dissect_element_data(tvb, offset, pinfo, tree,
                                       hf_lustre_mds_xattr_eadata,
                                       LUSTRE_DLM_INTENT_REC_OFF+4);
-    /* TODO : replace hf with eada hf */
   }
 
   if (intent_opc & IT_UNLINK){
-    /* mdc_intent_unlink_pack(), d'où [opcode][mdt_rec_unlink][name] */
+    /* 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_string(tvb, offset, pinfo, tree,
                                         hf_lustre_reint_name,
-                                        LUSTRE_DLM_INTENT_REC_OFF+1);
+                                        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_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa,
+                                     LUSTRE_DLM_INTENT_REC_OFF+1);
     offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name,
-                                        LUSTRE_DLM_INTENT_REC_OFF+1);
+                                        LUSTRE_DLM_INTENT_REC_OFF+2);
   }
 
   if (intent_opc & IT_LOOKUP){
     /* 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_struct_capa(tvb, offset, pinfo, tree, hf_lustre_capa,
+                                     LUSTRE_DLM_INTENT_REC_OFF+1);
     offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name,
                                         LUSTRE_DLM_INTENT_REC_OFF+2);
   }
@@ -8959,12 +9033,10 @@ ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_,
 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 +
@@ -9632,33 +9704,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;
     }
-
   }
 }
 
@@ -10022,7 +10090,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,
@@ -10032,15 +10100,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_DEC, 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,
@@ -10225,9 +10293,9 @@ void proto_register_dcerpc_lustre(void)
       { "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,
@@ -10358,37 +10426,9 @@ void proto_register_dcerpc_lustre(void)
     { &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 } },
+#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 }},
@@ -10423,9 +10463,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 }},
     /*-------------------------------------------------------------------------------------------------------------*/
@@ -10480,14 +10517,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,
@@ -10511,8 +10542,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,
@@ -10610,8 +10639,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 } },
@@ -10619,9 +10646,6 @@ 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 }},
     { &hf_lustre_obdo_o_padding_3,
@@ -10629,8 +10653,6 @@ void proto_register_dcerpc_lustre(void)
     { &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 }},
     { &hf_lustre_mgs_target_info_mti_params,
@@ -10681,16 +10703,12 @@ void proto_register_dcerpc_lustre(void)
     { &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 }},
     { &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,
@@ -10716,8 +10734,6 @@ 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,
@@ -10739,9 +10755,6 @@ void proto_register_dcerpc_lustre(void)
       { "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,
@@ -10791,6 +10804,29 @@ void proto_register_dcerpc_lustre(void)
       { "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 }},
@@ -10860,7 +10896,7 @@ void proto_register_dcerpc_lustre(void)
     { &hf_lustre_seq_opc,
       { "Seq OPC", "lustre.seq_opc", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL } },
     { &hf_lustre_seq_range,
-      { "Seq Range", "lustre.range", FT_NONE, BASE_NONE, NULL, 0, "", HFILL } },
+      { "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,
@@ -10870,6 +10906,20 @@ void proto_register_dcerpc_lustre(void)
     { &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 } },
@@ -10885,6 +10935,28 @@ void proto_register_dcerpc_lustre(void)
     /* 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 } },
   };
 
 
@@ -10929,6 +11001,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,
@@ -10936,8 +11010,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,
@@ -10955,8 +11027,10 @@ void proto_register_dcerpc_lustre(void)
     &ett_lustre_ldlm_lock_flags,
     &ett_lustre_llog_log_llh_flags,
     &ett_lustre_seq_range,
+    &ett_lustre_fld_range,
     &ett_lustre_mdt_ioepoch,
     &ett_lustre_capa,
+    &ett_lustre_acl,
        };
 
   proto_lustre = proto_register_protocol("Lustre", "lustre", "lustre");
@@ -10971,27 +11045,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);
 }