diff --git a/lustre/contrib/packet-lnet.c b/lustre/contrib/packet-lnet.c new file mode 100644 index 0000000000000000000000000000000000000000..32feb9553a71d3078791b657c6f7cd8de8317407 --- /dev/null +++ b/lustre/contrib/packet-lnet.c @@ -0,0 +1,783 @@ +/* packet-lnet.c + * Lnet packet dissection + * Author: Laurent George <george@ocre.cea.fr> + * based on packet-agentx.c and packet-afs.c + * 20080903 + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1999 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <ctype.h> +#include <time.h> +#include <string.h> +#include <glib.h> + +#include <epan/packet.h> +#include <epan/conversation.h> +#include <epan/prefs.h> +#include <epan/emem.h> + +#include <epan/dissectors/packet-tcp.h> + +/* how much data has at least to be available to be able to determine the + * length of the lnet message */ +#define LNET_HEADER_LEN 52 +#define LNET_NID_DEST_OFFSET 24 +#define LNET_NID_SRC_OFFSET 32 +#define LNET_MSG_TYPE_OFFSET 48 + +static guint global_lnet_tcp_port = 988; +static guint lnet_tcp_port = 988; + +void proto_reg_handoff_lnet(void); + +#define LNET_PTL_INDEX_OFFSET_PUT 88 + +/* Define the lnet proto */ +static int proto_lnet = -1; + +static int hf_lnet_src_nid = -1 ; +static int hf_lnet_src_nid_addr = -1 ; +static int hf_lnet_src_nid_lnet_type = -1 ; +static int hf_lnet_src_nid_interface = -1 ; + +static int hf_lnet_ksm_type = -1 ; +static int hf_lnet_ksm_csum= -1; +static int hf_lnet_ksm_zc_req_cookie=-1; +static int hf_lnet_ksm_zc_ack_cookie=-1; + +static int hf_lnet_dest_nid = -1 ; +static int hf_lnet_dest_nid_addr = -1 ; +static int hf_lnet_dest_nid_lnet_type = -1 ; +static int hf_lnet_dest_nid_interface = -1 ; + +static int hf_lnet_dest_pid = -1 ; +static int hf_lnet_src_pid = -1 ; + +static int hf_lnet_msg_type = -1 ; +static int hf_lnet_payload_length = -1; +static int hf_lnet_payload = -1 ; +static int hf_lnet_msg_header = -1 ; +static int hf_lnet_msg_filler = -1 ; + +static int hf_dst_wmd = -1 ; +static int hf_dst_wmd_interface = -1 ; +static int hf_dst_wmd_object = -1 ; + +static int hf_match_bits = -1 ; +static int hf_mlength = -1 ; + +static int hf_hdr_data = -1 ; +static int hf_ptl_index = -1 ; +static int hf_offset = -1 ; +static gint ett_lnet = -1; + +static int hf_src_offset = -1; +static int hf_sink_length = -1; + +static int hf_hello_incarnation = -1 ; +static int hf_hello_type = -1 ; + +static gint ett_lnet_dest_nid= -1; +static gint ett_lnet_src_nid= -1; + +tvbuff_t *next_tvb; + +/*static heur_dissector_list_t heur_subdissector_list; */ +static dissector_table_t subdissector_table; + +static const value_string lnetnames[] = { + { 1, "QSWLND "}, + { 2, "SOCKLND "}, + { 3, "GMLND "}, + { 4, "PTLLND "}, + { 5, "O2IBLND "}, + { 6, "CIBLND "}, + { 7, "OPENIBLND"}, + { 8, "IIBLND "}, + { 9, "LOLND "}, + { 10,"RALND "}, + { 11,"VIBLND "}, + { 12,"MXLND "} +}; + +enum MSG_type{ + LNET_MSG_ACK = 0, + LNET_MSG_PUT, + LNET_MSG_GET, + LNET_MSG_REPLY, + LNET_MSG_HELLO, +} ; + +static const value_string lnet_msg_type_t[] = { + { LNET_MSG_ACK , "ACK"}, + { LNET_MSG_PUT , "PUT"}, + { LNET_MSG_GET , "GET"}, + { LNET_MSG_REPLY, "REPLY"}, + { LNET_MSG_HELLO, "HELLO"} +}; + +/* defined in lustre/include/lustre/lustre_idl.h */ +static const value_string portal_indices[] = { + { 1 , "CONNMGR_REQUEST_PORTAL"}, + { 2 , "CONNMGR_REPLY_PORTAL"}, + { 3 , "OSC_REQUEST_PORTAL(obsolete)"}, + { 4 , "OSC_REPLY_PORTAL"}, + { 5 , "OSC_BULK_PORTAL(obsolete)"}, + { 6 , "OST_IO_PORTAL"}, + { 7 , "OST_CREATE_PORTAL"}, + { 8 , "OST_BULK_PORTAL"}, + { 9 , "MDC_REQUEST_PORTAL(obsolete)"}, + { 10 , "MDC_REPLY_PORTAL"}, + { 11 , "MDC_BULK_PORTAL(obsolete)"}, + { 12 , "MDS_REQUEST_PORTAL"}, + { 13 , "MDS_REPLY_PORTAL(obsolete)"}, + { 14 , "MDS_BULK_PORTAL"}, + { 15 , "LDLM_CB_REQUEST_PORTAL"}, + { 16 , "LDLM_CB_REPLY_PORTAL"}, + { 17 , "LDLM_CANCEL_REQUEST_PORTAL"}, + { 18 , "LDLM_CANCEL_REPLY_PORTAL"}, + { 19 , "PTLBD_REQUEST_PORTAL(obsolete)"}, + { 20 , "PTLBD_REPLY_PORTAL(obsolete)"}, + { 21 , "PTLBD_BULK_PORTAL(obsolete)"}, + { 22 , "MDS_SETATTR_PORTAL"}, + { 23 , "MDS_READPAGE_PORTAL"}, + { 25 , "MGC_REPLY_PORTAL"}, + { 26 , "MGS_REQUEST_PORTAL"}, + { 27 , "MGS_REPLY_PORTAL"}, + { 28 , "OST_REQUEST_PORTAL"} +}; + +#define KSOCK_MSG_NOOP 0xc0 /* ksm_u empty */ +#define KSOCK_MSG_LNET 0xc1 /* lnet msg */ + +static const value_string ksm_type_t[] = { + {0xc0, "KSOCK_MSG_NOOP"},/* ksm_u empty */ + {0xc1, "KSOCK_MSG_LNET"} /* lnet msg */ +}; + + +static int dissect_csum(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + guint32 csum; + csum = tvb_get_letohl(tvb, offset); + if (!csum) + proto_tree_add_text(tree, tvb, offset, 4, "checksum disabled"); + else + proto_tree_add_item(tree, hf_lnet_ksm_csum, tvb, offset, 4, TRUE); + + offset+=4; + return offset; +} + + +static int dissect_req_cookie(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + guint32 req; + req= tvb_get_letoh64(tvb, offset); + if (!req) + proto_tree_add_text(tree, tvb, offset, 8, "ack not required"); + else + proto_tree_add_item(tree, hf_lnet_ksm_zc_req_cookie, tvb, offset, 8, TRUE); + offset+=8; + return offset; +} + +static int dissect_ack_cookie(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + guint32 ack; + ack= tvb_get_letoh64(tvb, offset); + if (!ack) + proto_tree_add_text(tree, tvb, offset, 8, "not ack"); + else + proto_tree_add_item(tree, hf_lnet_ksm_zc_ack_cookie, tvb, offset, 8, TRUE); + offset+=8; + return offset; +} + +static void +dissect_ksock_msg_noop( tvbuff_t * tvb, packet_info *pinfo _U_ , proto_tree *tree) +{ + guint32 offset; + offset=0; + proto_tree_add_item(tree, hf_lnet_ksm_type, tvb, offset, 4, TRUE);offset+=4; + offset=dissect_csum(tvb,tree,offset); + offset=dissect_req_cookie(tvb, tree, offset); + offset=dissect_ack_cookie(tvb,tree,offset); +} + + +static int dissect_ksock_msg(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + proto_tree_add_item(tree, hf_lnet_ksm_type, tvb, offset, 4, TRUE);offset+=4; + offset=dissect_csum(tvb,tree,offset); + offset=dissect_req_cookie(tvb, tree, offset); + offset=dissect_ack_cookie(tvb,tree,offset); + return offset; +} + +static int dissect_dest_nid(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + proto_tree_add_item(tree, hf_lnet_dest_nid_addr, tvb, offset, 4, TRUE);offset+=4; + proto_tree_add_item(tree, hf_lnet_dest_nid_interface, tvb, offset, 2, TRUE);offset+=2; + proto_tree_add_item(tree, hf_lnet_dest_nid_lnet_type, tvb, offset, 2, TRUE);offset+=2; + return offset; +} + + +static int dissect_src_nid(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + proto_tree_add_item(tree, hf_lnet_src_nid_addr, tvb, offset, 4, TRUE);offset+=4; + proto_tree_add_item(tree, hf_lnet_src_nid_interface, tvb, offset, 2, TRUE);offset+=2; + proto_tree_add_item(tree, hf_lnet_src_nid_lnet_type, tvb, offset, 2, TRUE);offset+=2; + return offset; +} + +static int dissect_lnet_put(tvbuff_t * tvb, proto_tree *tree, int offset, packet_info *pinfo _U_) +{ + /* typedef struct lnet_put { + lnet_handle_wire_t ack_wmd; + __u64 match_bits; + __u64 hdr_data; + __u32 ptl_index; + __u32 offset; + } WIRE_ATTR lnet_put_t; */ + + gboolean little_endian=TRUE ; + + proto_tree_add_item(tree,hf_dst_wmd_interface,tvb,offset,8,little_endian); offset+=8; + proto_tree_add_item(tree,hf_dst_wmd_object,tvb,offset,8,little_endian);offset+=8; + + proto_tree_add_item(tree,hf_match_bits,tvb,offset,8,little_endian);offset+=8; + proto_tree_add_item(tree,hf_hdr_data,tvb,offset,8,little_endian);offset+=8; + if (check_col(pinfo->cinfo, COL_INFO)) + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", val_to_str(tvb_get_letohl(tvb,offset), portal_indices, "Unknow")); /* add some nice value */ + proto_item_append_text(tree, ", %s" , val_to_str(tvb_get_letohl(tvb,offset), portal_indices, "Unknow")); /* print ptl_index */ + proto_tree_add_item(tree,hf_ptl_index,tvb,offset,4,little_endian);offset+=4; + proto_tree_add_item(tree,hf_offset,tvb,offset,4,little_endian);offset+=4; + return offset ; +} + +static int dissect_lnet_get(tvbuff_t * tvb, proto_tree *tree, int offset, packet_info *pinfo _U_) +{ + /* typedef struct lnet_get { + lnet_handle_wire_t return_wmd; + __u64 match_bits; + __u32 ptl_index; + __u32 src_offset; + __u32 sink_length; + } WIRE_ATTR lnet_get_t; */ + + gboolean little_endian=TRUE ; + proto_tree_add_item(tree,hf_dst_wmd_interface,tvb,offset,8,little_endian);offset+=8; + proto_tree_add_item(tree,hf_dst_wmd_object,tvb,offset,8,little_endian);offset+=8; + /*if (check_col(pinfo->cinfo, COL_INFO))*/ + /* col_prepend_fence_fstr(pinfo->cinfo, COL_INFO, " %" G_GINT64_MODIFIER "u ", tvb_get_letoh64(tvb,offset) );*/ + + proto_tree_add_item(tree,hf_match_bits,tvb,offset,8,little_endian);offset+=8; + if (check_col(pinfo->cinfo, COL_INFO)) + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", val_to_str(tvb_get_letohl(tvb,offset), portal_indices, "Unknow")); + proto_item_append_text(tree, ", %s" , val_to_str(tvb_get_letohl(tvb,offset), portal_indices, "Unknow")); /* print ptl_index */ + proto_tree_add_item(tree,hf_ptl_index,tvb,offset,4,little_endian);offset+=4; + proto_tree_add_item(tree,hf_src_offset,tvb,offset,4,little_endian);offset+=4; + proto_tree_add_item(tree,hf_sink_length,tvb,offset,4,little_endian);offset+=4; + return offset; +} + +static int dissect_lnet_reply(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + /* typedef struct lnet_reply { + lnet_handle_wire_t dst_wmd; + } WIRE_ATTR lnet_reply_t; */ + + gboolean little_endian=TRUE ; + proto_tree_add_item(tree,hf_dst_wmd_interface,tvb,offset,8,little_endian);offset+=8; + proto_tree_add_item(tree,hf_dst_wmd_object,tvb,offset,8,little_endian);offset+=8; + + return offset; +} + + +static int dissect_lnet_hello(tvbuff_t * tvb, proto_tree *tree, int offset) +{ + /* typedef struct lnet_hello { + __u64 incarnation; + __u32 type; + } WIRE_ATTR lnet_hello_t; */ + + gboolean little_endian=TRUE ; + proto_tree_add_item(tree,hf_hello_incarnation,tvb,offset,8,little_endian); offset+=8; + proto_tree_add_item(tree,hf_hello_type,tvb,offset,4,little_endian); offset+=4; + return offset; +} + +static int dissect_lnet_ack(tvbuff_t * tvb, proto_tree *tree, int offset, packet_info *pinfo _U_) +{ + /* typedef struct lnet_ack { + lnet_handle_wire_t dst_wmd; + __u64 match_bits; + __u32 mlength; + } WIRE_ATTR lnet_ack_t; */ + + proto_tree_add_item(tree,hf_dst_wmd_interface,tvb,offset,8,TRUE); offset+=8; + proto_tree_add_item(tree,hf_dst_wmd_object,tvb,offset,8,TRUE);offset+=8; + proto_tree_add_item(tree,hf_match_bits,tvb,offset,8,TRUE);offset+=8; + proto_tree_add_item(tree,hf_mlength, tvb,offset,4,TRUE); offset+=4; + return offset ; +} + +static void dissect_lnet_message(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree); +/* return the pdu length */ +static guint +get_lnet_message_len(packet_info __attribute__((__unused__))*pinfo, tvbuff_t *tvb, int offset) +{ + /* + * Get the payload length + */ + guint32 plen; + plen = tvb_get_letohl(tvb,offset+28+24); /*24 = ksm header, 28 = le reste des headers*/ + + /* + * That length doesn't include the header; add that in. + */ + return plen + 72 +24 ; /* +24 == ksock msg header.. :D */ + +} + +static guint +get_noop_message_len(packet_info __attribute__((__unused__))*pinfo, tvbuff_t *tvb _U_ , int offset _U_) +{ + return 24; +} + +static void +dissect_lnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + /* TODO : correct this, now we do a difference between packet with NOOP and others .. + but I don't find how to use pdu_dissect with a variable length<=LNET_HEADER_LEN */ + switch(tvb_get_letohl(tvb,0)){ + case KSOCK_MSG_NOOP: + /*g_print("ksock noop %d \n", pinfo->fd->num);*/ + tcp_dissect_pdus(tvb,pinfo,tree,TRUE,0, get_noop_message_len,dissect_ksock_msg_noop); + break; + case KSOCK_MSG_LNET: + tcp_dissect_pdus(tvb,pinfo,tree,TRUE,LNET_HEADER_LEN, get_lnet_message_len,dissect_lnet_message); + break; + } + +} + +typedef struct t_nid { + guint32 addr; + guint16 interface; + guint16 proto; +} t_nid ; + +static t_nid get_nid(tvbuff_t *tvb, gint offset) +{ + t_nid nid ; + nid.addr = g_htonl(tvb_get_ipv4(tvb,offset)); + nid.interface = tvb_get_letohs(tvb,offset+4); + nid.proto = tvb_get_letohs(tvb,offset+6); + return nid ; + /* example : + * get_nid(tvb, LNET_NID_DEST_OFFSET); + * get_nid(tvb, LNET_NID_SRC_OFFSET); + * */ +} + +/*----------------------------------------------------------- */ +/* For the conversation */ + +typedef struct { + guint64 match_bits; +} my_entry_t; + + +typedef struct lnet_request_key { + guint64 match_bits ; + guint32 conversation; +} lnet_request_key_t; + +typedef struct lnet_request_val { + guint64 match_bits; + guint32 packet_num_parent; +} lnet_request_val_t; + + +static GHashTable *lnet_request_hash = NULL; + +/* + * Hash Functions + */ +static gint +lnet_equal(gconstpointer v, gconstpointer w) +{ + const struct lnet_request_key *v1 = (const struct lnet_request_key *)v; + const struct lnet_request_key *v2 = (const struct lnet_request_key *)w; + + if (v1 -> conversation == v2 -> conversation && + v1 -> match_bits == v2 -> match_bits) + { + + return 1; + } + + return 0; +} + +static guint +lnet_hash (gconstpointer v) +{ + const struct lnet_request_key *key = (const struct lnet_request_key *)v; + guint val; + + val = key -> conversation + key -> match_bits ; + + return val; +} + + +static void +lnet_init_protocol(void) +{ + if (lnet_request_hash) + g_hash_table_destroy(lnet_request_hash); + + lnet_request_hash = g_hash_table_new(lnet_hash, lnet_equal); +} + + +static lnet_request_val_t* +get_lnet_conv(packet_info * pinfo , GHashTable * lnet_hash_table, guint64 match_bits ) +{ + conversation_t * conversation ; + lnet_request_key_t request_key, *new_request_key; + lnet_request_val_t *request_val=NULL ; + + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); + + + if (NULL == conversation) + /* It's not part of any conversation - create a new one. */ + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, proto_lnet, + pinfo->srcport, pinfo->destport, 0); + + request_key.conversation = conversation->index; + request_key.match_bits = match_bits; + + request_val = (struct lnet_request_val * ) g_hash_table_lookup(lnet_hash_table, &request_key); + if(!request_val){ + new_request_key = se_alloc(sizeof(struct lnet_request_key)); + *new_request_key = request_key; + request_val = se_alloc(sizeof(struct lnet_request_val)); + request_val -> match_bits = match_bits; + request_val -> packet_num_parent = pinfo->fd->num ; + /*request_val -> filename = "test" ; */ + g_hash_table_insert(lnet_hash_table, new_request_key, request_val); + + } + + return request_val ; + +} + + + +/*----------------------------------------------------------- */ +static void +dissect_lnet_message(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree) +{ + + guint64 match; + guint32 msg_type; + + lnet_request_val_t* conversation_val ; + + + if (check_col(pinfo->cinfo, COL_PROTOCOL)) { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "Lnet"); + } + + if (check_col(pinfo->cinfo, COL_INFO)) { + /* t_nid dest_nid ; */ + /*t_nid src_nid ; */ + /*guint32 msg_type;*/ + /*[> col_clear(pinfo->cinfo, COL_INFO); <]*/ + /*dest_nid = get_nid(tvb, LNET_NID_DEST_OFFSET);*/ + /*src_nid = get_nid(tvb, LNET_NID_SRC_OFFSET);*/ + + /*[> col_add_fstr(pinfo->cinfo, COL_INFO, "%s@tcp%d > %s@tcp%d", + ip_to_str((guint8 *) &src_nid.addr), src_nid.interface, + ip_to_str((guint8 *) & dest_nid.addr), dest_nid.interface); */ + + msg_type = tvb_get_letohl(tvb, LNET_MSG_TYPE_OFFSET ); + /* We delete the entire line and add LNET + msg_type */ + col_add_fstr(pinfo->cinfo, COL_INFO, "LNET_%s", (msg_type < sizeof(lnet_msg_type_t)/sizeof(value_string)) ? lnet_msg_type_t[msg_type].strptr : "Unknow") ; + } + + if (tree) { + t_nid dest_nid ; /* nid value */ + t_nid src_nid ; + + + proto_item *ti = NULL; /* principal node */ + proto_tree *lnet_tree = NULL ; /* principal tree */ + proto_tree *lnet_nid_src_tree= NULL ; /*subtree for the nids*/ + proto_tree *lnet_nid_dest_tree= NULL ; + proto_item *ti_src_nid ; /* node for the nids */ + proto_item *ti_dest_nid ; + + gint offset = 0 ; + + guint32 msg_type ; + guint32 payload_length; + guint32 msg_filler_length; + + + ti = proto_tree_add_item(tree,proto_lnet,tvb,0,-1,FALSE); /* principal node */ + /* ti=proto_tree_add_protocol_format(tree, proto_lnet, tvb, 0, -1, "Lnet"); */ + + lnet_tree = proto_item_add_subtree(ti,ett_lnet); /* add the subtree*/ + + /* dissect the 24first bytes (ksock_msg_t in lnet/socklnd.h */ + offset=dissect_ksock_msg(tvb,lnet_tree,offset); + + /* dest nid */ + dest_nid = get_nid(tvb, LNET_NID_DEST_OFFSET); + ti_dest_nid = proto_tree_add_text(lnet_tree, tvb, offset, 8, "dest_nid = %s@tcp%d", ip_to_str((guint8 *) &dest_nid.addr), dest_nid.interface); + lnet_nid_dest_tree = proto_item_add_subtree(ti_dest_nid,ett_lnet_dest_nid) ; + offset=dissect_dest_nid(tvb,lnet_nid_dest_tree,offset); + + /* same for src_nid */ + src_nid = get_nid(tvb, LNET_NID_SRC_OFFSET); + ti_src_nid = proto_tree_add_text(lnet_tree, tvb, offset, 8, "src_nid = %s@tcp%d", ip_to_str((guint8 *) &src_nid.addr), src_nid.interface); + lnet_nid_src_tree = proto_item_add_subtree(ti_src_nid,ett_lnet_src_nid) ; + offset=dissect_src_nid(tvb,lnet_nid_src_tree,offset); + + /* pid */ + proto_tree_add_item(lnet_tree, hf_lnet_src_pid, tvb, offset, 4, TRUE); offset+=4; + proto_tree_add_item(lnet_tree, hf_lnet_dest_pid, tvb, offset, 4, TRUE); offset+=4; + + /* message_type (32 bits) */ + msg_type = tvb_get_letohl(tvb, offset+0); + /* put some nice info on lnet line */ + proto_item_append_text(ti," %s", (msg_type < sizeof(lnet_msg_type_t)/sizeof(value_string)) ? lnet_msg_type_t[msg_type].strptr : "Unknow") ; /* rajout de l'info dans l'arbre */ + proto_tree_add_item(lnet_tree, hf_lnet_msg_type, tvb, offset, 4, TRUE); offset+=4; + + /* payload data (to follow) length :*/ + payload_length = tvb_get_letohl(tvb,offset+0); + proto_tree_add_item(lnet_tree, hf_lnet_payload_length, tvb, offset, 4, TRUE); offset+=4; + + /* here offset = 24+8+8+4+4+4+4 = 56 */ + match = 0 ; + switch(msg_type) { + case LNET_MSG_ACK: + offset=dissect_lnet_ack(tvb,lnet_tree,offset,pinfo); + match = tvb_get_letoh64(tvb,72 ); + break; + case LNET_MSG_PUT: + offset=dissect_lnet_put(tvb,lnet_tree,offset,pinfo); + match = tvb_get_letoh64(tvb, 72); + break; + case LNET_MSG_GET: + offset=dissect_lnet_get(tvb,lnet_tree,offset,pinfo); + match = tvb_get_letoh64(tvb, 72); + break; + case LNET_MSG_REPLY: + offset=dissect_lnet_reply(tvb,lnet_tree,offset); + break; + case LNET_MSG_HELLO: + offset=dissect_lnet_hello(tvb,lnet_tree,offset); + break; + default: + break; + } + + + conversation_val = get_lnet_conv(pinfo , lnet_request_hash, match ); + /* proto_tree_add_text(tree, tvb, 0 , 0, "match = %" G_GINT64_MODIFIER "u parent = %d", conversation_val -> match_bits , conversation_val -> packet_num_parent); */ + + + /* padding */ + msg_filler_length = 72 - offset + 24 ; + if ( msg_filler_length > 72) + return ; + /* +24 : ksosck_message take 24bytes, and allready in offset */ + + proto_tree_add_item(lnet_tree, hf_lnet_msg_filler, tvb, offset, msg_filler_length, TRUE); + offset+=msg_filler_length; + + if (payload_length>0) + { + + /* display of payload */ + proto_tree_add_item(lnet_tree,hf_lnet_payload, tvb, offset, payload_length, TRUE); + + next_tvb = tvb_new_subset (tvb, offset, payload_length, payload_length); + if(msg_type==LNET_MSG_PUT) + dissector_try_port(subdissector_table, tvb_get_letohl(tvb,LNET_PTL_INDEX_OFFSET_PUT), next_tvb, pinfo, tree); + + } + + offset+=payload_length; + } +} + +void +proto_register_lnet(void) +{ + static hf_register_info hf[] = { + { &hf_lnet_ksm_type , + { "Type of socklnd message" , "lnet.ksm_type" , FT_UINT32 , BASE_HEX , VALS(ksm_type_t) , 0x0 , "" , HFILL }} , + { &hf_lnet_ksm_csum , + { "Checksum" , "lnet.ksm_csum" , FT_UINT32 , BASE_DEC , NULL , 0x0 , "" , HFILL }} , + { &hf_lnet_ksm_zc_req_cookie , + { "Ack required" , "lnet.ksm_zc_req_cookie" , FT_UINT64 , BASE_HEX , NULL , 0x0 , "" , HFILL }} , + { &hf_lnet_ksm_zc_ack_cookie , + { "Ack" , "lnet.ksm_zc_ack_cookie" , FT_UINT64 , BASE_HEX , NULL , 0x0 , "" , HFILL }} , + + { &hf_lnet_src_nid , + { "Src nid" , "lnet.src_nid" , FT_UINT64 , BASE_HEX , NULL , 0x0 , "src nid" , HFILL }} , + { &hf_lnet_src_nid_addr , + { "Src nid" , "lnet.src_nid_addr" , FT_IPv4 , BASE_NONE , NULL , 0x0 , "" , HFILL }} , + { &hf_lnet_src_nid_lnet_type , + { "lnd network type" , "lnet.src_nid_type" , FT_UINT16 , BASE_DEC , VALS(lnetnames) , 0x0 , "" , HFILL }} , + { &hf_lnet_src_nid_interface , + { "lnd network interface" , "lnet.src_nid_net_interface" , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }} , + + { &hf_lnet_dest_nid , + { "Dest nid" , "lnet.dest_nid" , FT_UINT64 , BASE_HEX , NULL , 0x0 , "" , HFILL }} , + + { &hf_lnet_dest_nid_addr , + { "Destination nid" , "lnet.dest_nid_addr" , FT_IPv4 , BASE_NONE , NULL , 0x0 , "" , HFILL }} , + { &hf_lnet_dest_nid_lnet_type , + { "lnd network type" , "lnet.dest_nid_type" , FT_UINT16 , BASE_DEC , VALS(lnetnames) , 0x0 , "" , HFILL }} , + { &hf_lnet_dest_nid_interface , + { "lnd network interface" , "lnet.dest_nid_net_interface" , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }} , + + { &hf_lnet_dest_pid , + { "Dest pid" , "lnet.dest_pid" , FT_UINT32 , BASE_DEC_HEX , NULL , 0x0 , "dest pid" , HFILL }} , + { &hf_lnet_src_pid , + { "Src pid" , "lnet.src_pid" , FT_UINT32 , BASE_DEC_HEX , NULL , 0x0 , "src nid" , HFILL }} , + + { &hf_lnet_msg_type , + { "Message type" , "lnet.msg_type" , FT_UINT32 , BASE_DEC , VALS(lnet_msg_type_t) , 0x0 , "msg type" , HFILL }} , + { &hf_lnet_payload_length , + { "Payload length" , "lnet.payload_length" , FT_UINT32 , BASE_DEC , NULL , 0x0 , "" , HFILL }} , + { &hf_lnet_payload , + { "Payload" , "lnet.payload" , FT_NONE , BASE_NONE , NULL , 0x0 , "" , HFILL }} , + + {&hf_dst_wmd , + { "DST MD index " , "lnet.msg_dst_cookie" , FT_BYTES , BASE_NONE , NULL , 0x0 , "" , HFILL }} , + { &hf_dst_wmd_interface , + { "DST MD index interface" , "lnet.msg_dst_inteface_cookie" , FT_UINT64 , BASE_HEX_DEC , NULL , 0x0 , "" , HFILL }} , + { &hf_dst_wmd_object , + { "DST MD index object" , "lnet.msg_dst_object_cookie" , FT_UINT64 , BASE_HEX_DEC , NULL , 0x0 , "" , HFILL }} , + { &hf_match_bits , + { "Match bits" , "lnet.msg_dst_match_bits" , FT_UINT64 , BASE_HEX_DEC , NULL , 0x0 , "" , HFILL}} , + { &hf_mlength , + { "Message length" , "lnet.msg_length" , FT_UINT32 , BASE_DEC , NULL , 0x0 , "" , HFILL}} , + + + /* Put */ + { &hf_hdr_data , + { "hdr data" , "lnet.msg_hdr_data" , FT_UINT64 , BASE_HEX_DEC , NULL , 0x0 , "" , HFILL}} , + { &hf_ptl_index , + { "ptl index" , "lnet.ptl_index" , FT_UINT32 , BASE_DEC , VALS(portal_indices) , 0x0 , "" , HFILL}} , + { &hf_offset , + { "offset" , "lnet.offset" , FT_UINT32 , BASE_DEC , NULL , 0x0 , "" , HFILL}} , + + /* Get*/ + { &hf_src_offset , + { "src offset" , "lnet.src_offset" , FT_UINT32 , BASE_DEC , NULL , 0x0 , "" , HFILL}} , + { &hf_sink_length , + { "sink length" , "lnet.sink_length" , FT_UINT32 , BASE_DEC , NULL , 0x0 , "" , HFILL}} , + + /* Hello*/ + { &hf_hello_incarnation , + { "hello incarnation " , "lnet.hello_incarnation" , FT_UINT64 , BASE_HEX_DEC , NULL , 0x0 , "" , HFILL}} , + { &hf_hello_type , + { "hello type" , "lnet.hello_type" , FT_UINT32 , BASE_DEC , NULL , 0x0 , "" , HFILL}} , + + { &hf_lnet_msg_header , + { "ptl header" , "lnet.ptl_header" , FT_NONE , BASE_NONE , NULL , 0x0 , "" , HFILL}} , + + { &hf_lnet_msg_filler , + { "msg filler (padding)" , "lnet.ptl_filler" , FT_NONE , BASE_NONE , NULL , 0x0 , "" , HFILL}} , + + /* Add more fields here */ + }; + + static gint *ett[] = { + &ett_lnet, + &ett_lnet_dest_nid, + &ett_lnet_src_nid + }; + + + module_t *lnet_module; + + proto_lnet = proto_register_protocol("Lnet", /*name*/ + "Lnet", /*short name*/ + "lnet"); /*abbrev*/ + + proto_register_field_array(proto_lnet, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + lnet_module = prefs_register_protocol(proto_lnet, proto_reg_handoff_lnet); + + prefs_register_uint_preference(lnet_module, "tcp.lnet_port", + "Lnet listener TCP Port", + "Set the TCP port for Lnet" + "(if other than the default of 988)", + 10, &global_lnet_tcp_port); + + subdissector_table = register_dissector_table("lnet.ptl_index", "lnet portal index", FT_UINT32 , BASE_DEC); + + register_init_routine(&lnet_init_protocol); + +} + + +/* The registration hand-off routine */ +void +proto_reg_handoff_lnet(void) +{ + static int lnet_prefs_initialized = FALSE; + static dissector_handle_t lnet_handle; + + if(!lnet_prefs_initialized) { + lnet_handle = create_dissector_handle(dissect_lnet, proto_lnet); + lnet_prefs_initialized = TRUE; + } + else { + dissector_delete("tcp.port",global_lnet_tcp_port, lnet_handle); + } + + lnet_tcp_port = global_lnet_tcp_port; + + dissector_add("tcp.port", lnet_tcp_port, lnet_handle); +} diff --git a/lustre/contrib/packet-lustre.c b/lustre/contrib/packet-lustre.c new file mode 100644 index 0000000000000000000000000000000000000000..3d34cb2cd4aacefb6930176348f0b9a4c44d3411 --- /dev/null +++ b/lustre/contrib/packet-lustre.c @@ -0,0 +1,10146 @@ +/* packet-lustre.c + * Lustre 1.6 dissection (http://www.lustre.org/) + * Author: Laurent George <george@ocre.cea.fr> + * based on packet-agentx.c and packet-afs.c + * partially generated by Pidl + * 20080903 + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1999 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include <glib.h> +#include <string.h> +#include <epan/packet.h> + +#include <epan/dissectors/packet-windows-common.h> +#include <plugins/lnet/packet-lnet.h> + + +/* --------------------------------------------------------------------------------------- */ +/* def and macro to know where we are the the lustre payload */ +#define LUSTRE_MAGIC_OFFSET 8 +#define LUSTRE_MSG_MAGIC_V1 0x0BD00BD0 +#define LUSTRE_MSG_MAGIC_V2 0x0BD00BD3 + +#define LUSTRE_BUFCOUNT_OFF ((tvb_get_letohl(tvb, LUSTRE_MAGIC_OFFSET)== LUSTRE_MSG_MAGIC_V2) ? 0 : 60) +#define LUSTRE_BUFCOUNT ((tvb_get_letohl(tvb, LUSTRE_MAGIC_OFFSET)== LUSTRE_MSG_MAGIC_V2) \ + ? (tvb_get_letohl(tvb, LUSTRE_BUFCOUNT_OFF)) : ((tvb_get_letohl(tvb, LUSTRE_BUFCOUNT_OFF))) ) +/* remark : BUFLENOFF don't have the same meaning if it's for v1 or v2 + * v1 : LUSTRE_BUFLEN_OFF = offset buflen[0] - 4 bytes. + * v2 : LUSTRE_BUFLEN_OFF = offset buflen[0] + */ +#define LUSTRE_BUFLEN_OFF ((tvb_get_letohl(tvb, LUSTRE_MAGIC_OFFSET)== LUSTRE_MSG_MAGIC_V2) ? 32 : 60) + +#define LUSTRE_REQ_REC_OFF 1 /* normal request record offset */ +#define LUSTRE_REPLY_REC_OFF 1 /* normal reply record offset */ + +#define LUSTRE_DLM_INTENT_IT_OFF 2 /* intent lock it offset */ +#define LUSTRE_DLM_INTENT_REC_OFF 3 /* intent lock record offset */ +#define LUSTRE_DLM_LOCKREPLY_OFF 1 /* lockrep offset */ +#define LUSTRE_DLM_REPLY_REC_OFF 2 /* reply record offset */ +/* --------------------------------------------------------------------------------------- */ + + +#define LUSTRE_PTLRPC_MSG_VERSION 0x00000003 +#define LUSTRE_VERSION_MASK 0xffff0000 +#define LUSTRE_OBD_VERSION 0x00010000 +#define LUSTRE_MDS_VERSION 0x00020000 +#define LUSTRE_OST_VERSION 0x00030000 +#define LUSTRE_DLM_VERSION 0x00040000 +#define LUSTRE_LOG_VERSION 0x00050000 +#define LUSTRE_MGS_VERSION 0x00060000 + + + +#define LOV_MAGIC_V1 0x0BD10BD0 +#define LOV_MAGIC LOV_MAGIC_V1 +#define LOV_MAGIC_JOIN 0x0BD20BD0 + +typedef enum { + OST_REPLY = 0, /* reply ? */ + OST_GETATTR = 1, + OST_SETATTR = 2, + OST_READ = 3, + OST_WRITE = 4, + OST_CREATE = 5, + OST_DESTROY = 6, + OST_GET_INFO = 7, + OST_CONNECT = 8, + OST_DISCONNECT = 9, + OST_PUNCH = 10, + OST_OPEN = 11, + OST_CLOSE = 12, + OST_STATFS = 13, + /* OST_SAN_READ = 14, deprecated */ + /* OST_SAN_WRITE = 15, deprecated */ + OST_SYNC = 16, + OST_SET_INFO = 17, + OST_QUOTACHECK = 18, + OST_QUOTACTL = 19, + OST_QUOTA_ADJUST_QUNIT = 20, + OST_LAST_OPC +} ost_cmd_t ; + + +typedef enum { + OBD_PING = 400, + OBD_LOG_CANCEL, + OBD_QC_CALLBACK, + OBD_LAST_OPC +} obd_cmd_t; +#define OBD_FIRST_OPC OBD_PING + +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_LAST_OPC +} mds_cmd_t; + +#define IT_OPEN 0x0001 +#define IT_CREAT 0x0002 +#define IT_READDIR 0x0004 +#define IT_GETATTR 0x0008 +#define IT_LOOKUP 0x0010 +#define IT_UNLINK 0x0020 +#define IT_GETXATTR 0x0040 +#define IT_EXEC 0x0080 +#define IT_PIN 0x0100 + + + +#define MDS_FIRST_OPC MDS_GETATTR +#define LDLM_FIRST_OPC LDLM_ENQUEUE + +typedef enum { + REINT_SETATTR = 1, + REINT_CREATE = 2, + REINT_LINK = 3, + REINT_UNLINK = 4, + REINT_RENAME = 5, + REINT_OPEN = 6, + // REINT_CLOSE = 7, + // REINT_WRITE = 8, + REINT_MAX +} mds_reint_t; + +typedef enum { + LDLM_ENQUEUE = 101, + LDLM_CONVERT = 102, + LDLM_CANCEL = 103, + LDLM_BL_CALLBACK = 104, + LDLM_CP_CALLBACK = 105, + LDLM_GL_CALLBACK = 106, + LDLM_LAST_OPC +} ldlm_cmd_t; +#define LDLM_FIRST_OPC LDLM_ENQUEUE + +#define LDLM_FL_LOCK_CHANGED 0x000001 +#define LDLM_FL_BLOCK_GRANTED 0x000002 +#define LDLM_FL_BLOCK_CONV 0x000004 +#define LDLM_FL_BLOCK_WAIT 0x000008 +#define LDLM_FL_CBPENDING 0x000010 +#define LDLM_FL_AST_SENT 0x000020 +#define LDLM_FL_WAIT_NOREPROC 0x000040 +#define LDLM_FL_CANCEL 0x000080 +#define LDLM_FL_REPLAY 0x000100 +#define LDLM_FL_INTENT_ONLY 0x000200 +#define LDLM_FL_LOCAL_ONLY 0x000400 +#define LDLM_FL_FAILED 0x000800 +#define LDLM_FL_HAS_INTENT 0x001000 +#define LDLM_FL_CANCELING 0x002000 +#define LDLM_FL_LOCAL 0x004000 +#define LDLM_FL_WARN 0x008000 +#define LDLM_FL_DISCARD_DATA 0x010000 +#define LDLM_FL_NO_TIMEOUT 0x020000 +#define LDLM_FL_BLOCK_NOWAIT 0x040000 +#define LDLM_FL_TEST_LOCK 0x080000 +#define LDLM_FL_LVB_READY 0x100000 +#define LDLM_FL_KMS_IGNORE 0x200000 +#define LDLM_FL_NO_LRU 0x400000 +#define LDLM_FL_CANCEL_ON_BLOCK 0x800000 +#define LDLM_FL_CP_REQD 0x1000000 +#define LDLM_FL_CLEANED 0x2000000 +#define LDLM_FL_ATOMIC_CB 0x4000000 +#define LDLM_FL_BL_AST 0x10000000 +#define LDLM_FL_BL_DONE 0x20000000 +#define LDLM_FL_DENY_ON_CONTENTION 0x40000000 +#define LDLM_AST_DISCARD_DATA 0x80000000 + + + +#define LDLM_ENQUEUE (101) +#define LDLM_CONVERT (102) +#define LDLM_CANCEL (103) +#define LDLM_BL_CALLBACK (104) +#define LDLM_CP_CALLBACK (105) +#define LDLM_GL_CALLBACK (106) +#define LCK_MINMODE (0) +#define LCK_EX (1) +#define LCK_PW (2) +#define LCK_PR (4) +#define LCK_CW (8) +#define LCK_CR (16) +#define LCK_NL (32) +#define LCK_GROUP (64) +#define LDLM_PLAIN (10) +#define LDLM_EXTENT (11) +#define LDLM_FLOCK (12) +#define LDLM_IBITS (13) +//#define MGS_CONNECT (250) +#define OBD_PING (400) + +/* + * Opcodes for mountconf (mgs and mgc) + */ +typedef enum { + MGS_CONNECT = 250, + MGS_DISCONNECT, + MGS_EXCEPTION, /* node died, etc. */ + MGS_TARGET_REG, /* whenever target starts up */ + MGS_TARGET_DEL, + MGS_SET_INFO, + MGS_LAST_OPC +} mgs_cmd_t; +#define MGS_FIRST_OPC MGS_CONNECT + +/* llog protocol */ +typedef enum { + LLOG_ORIGIN_HANDLE_CREATE = 501, + LLOG_ORIGIN_HANDLE_NEXT_BLOCK = 502, + LLOG_ORIGIN_HANDLE_READ_HEADER = 503, + LLOG_ORIGIN_HANDLE_WRITE_REC = 504, + LLOG_ORIGIN_HANDLE_CLOSE = 505, + LLOG_ORIGIN_CONNECT = 506, + LLOG_CATINFO = 507, /* for lfs catinfo */ + LLOG_ORIGIN_HANDLE_PREV_BLOCK = 508, + LLOG_ORIGIN_HANDLE_DESTROY = 509, /* for destroy llog object*/ + LLOG_LAST_OPC +} llog_cmd_t; + +#define LLOG_FIRST_OPC LLOG_ORIGIN_HANDLE_CREATE +/*flag for the LLOG*/ +#define LLOG_OP_MAGIC 0x10600000 +#define LLOG_OP_MASK 0xfff00000 + +typedef enum { + LLOG_PAD_MAGIC = LLOG_OP_MAGIC | 0x00000, + OST_SZ_REC = LLOG_OP_MAGIC | 0x00f00, + OST_RAID1_REC = LLOG_OP_MAGIC | 0x01000, + MDS_UNLINK_REC = LLOG_OP_MAGIC | 0x10000 | (MDS_REINT << 8) | REINT_UNLINK, + MDS_SETATTR_REC = LLOG_OP_MAGIC | 0x10000 | (MDS_REINT << 8) | REINT_SETATTR, + OBD_CFG_REC = LLOG_OP_MAGIC | 0x20000, + PTL_CFG_REC = LLOG_OP_MAGIC | 0x30000, /* obsolete */ + LLOG_GEN_REC = LLOG_OP_MAGIC | 0x40000, + LLOG_JOIN_REC = LLOG_OP_MAGIC | 0x50000, + LLOG_HDR_MAGIC = LLOG_OP_MAGIC | 0x45539, + LLOG_LOGID_MAGIC = LLOG_OP_MAGIC | 0x4553b, +} llog_op_type; + +/* LLOG flag */ +/*defined in lustre/include/lustre/lustre_idl.h*/ +#define LLOG_F_ZAP_WHEN_EMPTY 0x1 +#define LLOG_F_IS_CAT 0x2 +#define LLOG_F_IS_PLAIN 0x4 + +#define PTL_RPC_MSG_REQUEST 4711 +#define PTL_RPC_MSG_ERR 4712 +#define PTL_RPC_MSG_REPLY 4713 + + +/* Ett declarations */ +static gint ett_lustre_llog_log_llh_flags = -1 ; +static gint ett_lustre = -1; +static gint ett_lustre_lustre_handle_cookie = -1; +static gint ett_lustre_lustre_msg_v1 = -1; +static gint ett_lustre_lustre_handle_v1 = -1; +static gint ett_lustre_lustre_msg_v2 = -1; +static gint ett_lustre_ptlrpc_body = -1; +static gint ett_lustre_lustre_handle_v2 = -1; +static gint ett_lustre_obd_connect_data = -1; +static gint ett_lustre_lov_mds_md_v1 = -1; +static gint ett_lustre_lov_ost_data_v1 = -1; +static gint ett_lustre_obd_statfs = -1; +static gint ett_lustre_obd_ioobj = -1; +static gint ett_lustre_niobuf_remote = -1; +static gint ett_lustre_ost_lvb = -1; +static gint ett_lustre_ll_fid = -1; +static gint ett_lustre_mds_status_req = -1; +static gint ett_lustre_mds_body = -1; +static gint ett_lustre_obd_quotactl = -1; +static gint ett_lustre_obd_dqinfo = -1; +static gint ett_lustre_obd_dqblk = -1; +static gint ett_lustre_quota_adjust_qunit = -1; +static gint ett_lustre_mds_rec_setattr = -1; +static gint ett_lustre_mds_rec_create = -1; +static gint ett_lustre_mds_rec_join = -1; +static gint ett_lustre_mds_rec_link = -1; +static gint ett_lustre_mds_rec_unlink = -1; +static gint ett_lustre_mds_rec_rename = -1; +static gint ett_lustre_lov_desc = -1; +static gint ett_lustre_obd_uuid = -1; +static gint ett_lustre_ldlm_res_id = -1; +static gint ett_lustre_ldlm_extent = -1; +static gint ett_lustre_ldlm_inodebits = -1; +static gint ett_lustre_ldlm_flock = -1; +static gint ett_lustre_ldlm_intent_opc = -1; +static gint ett_lustre_ldlm_resource_desc = -1; +static gint ett_lustre_ldlm_lock_desc = -1; +static gint ett_lustre_ldlm_request = -1; +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_cfg_marker = -1; +static gint ett_lustre_llog_catid = -1; +static gint ett_lustre_lov_mds_md_join = -1; +static gint ett_lustre_llog_rec_hdr = -1; +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_array_rec = -1; +static gint ett_lustre_mds_extent_desc = -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; +static gint ett_lustre_llog_gen_rec = -1; +static gint ett_lustre_llog_log_hdr = -1; +static gint ett_lustre_llog_cookie = -1; +static gint ett_lustre_llogd_body = -1; +static gint ett_lustre_llogd_conn_body = -1; +static gint ett_lustre_llog_gen = -1; +static gint ett_lustre_lov_user_md_join = -1; +static gint ett_lustre_lov_user_ost_data_join = -1; +static gint ett_lustre_obdo = -1; +static gint ett_lustre_ost_body = -1; +static gint ett_lustre_qunit_data = -1; +static gint ett_lustre_qunit_data_old2 = -1; +static gint ett_lustre_qunit_data_old = -1; +static gint ett_lustre_ldlm_lock_flags = -1 ; + +/* -----------------------------------------------*/ +/* Header field declarations */ +static int hf_lustre_ptlrpc_body_pb = -1 ; +static int hf_lustre_mds_body = -1 ; +static int hf_lustre_ost_body = -1 ; +static int hf_lustre_obd_statfs = -1 ; +static int hf_lustre_obd_quotactl = -1 ; +static int hf_lustre_quota_adjust_qunit = -1 ; +static int hf_lustre_extra_padding = -1 ; +static int hf_lustre_ldlm_reply = -1 ; +static int hf_lustre_ldlm_request = -1 ; +static int hf_lustre_mds_rec_create = -1 ; +static int hf_lustre_mds_rec_link = -1 ; +static int hf_lustre_mds_rec_unlink = -1 ; +static int hf_lustre_obd_uuid = -1 ; +static int hf_lustre_obd_connect_data = -1 ; +static int hf_lustre_ldlm_intent = -1; +static int hf_lustre_lov_user_md_join = -1 ; +static int hf_lustre_obd_ioobj = -1 ; +static int hf_lustre_niobuf_remote = -1 ; +static int hf_lustre_ost_key = -1 ; +static int hf_lustre_nio= -1 ; +static int hf_lustre_ost_val= -1; +static int hf_lustre_llogd_body = -1; +static int hf_lustre_llogd_log_hdr= -1; +static int hf_lustre_llog_logid_rec =-1 ; +static int hf_lustre_llogd_chunk= -1; +static int hf_lustre_llogd_keyword= -1; +static int hf_lustre_llogd_client= -1; +static int hf_lustre_llogd_name= -1; + +static int hf_lustre_mds_xattr_name = -1; +static int hf_lustre_lov_mds_md_v1= -1; +static int hf_lustre_llog_cookie= -1; +static int hf_lustre_mds_md_data= -1; +static int hf_lustre_mds_reint_opcode= -1; +static int hf_lustre_mds_xattr_eadata = -1; +static int hf_lustre_lov_mds_md_join = -1 ; + +static int hf_lustre_reint_name= -1; +static int hf_lustre_reint_old_name= -1; +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_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; + +static int hf_lustre_mds_body_ctime = -1; +static int hf_lustre_mds_body_fid1 = -1; +static int hf_lustre_mds_body_nlink = -1; +static int hf_lustre_mds_body_flags = -1; +static int hf_lustre_mds_body_fsgid = -1; +static int hf_lustre_mds_body_mtime = -1; +static int hf_lustre_mds_body_uid = -1; +static int hf_lustre_mds_body_mode = -1; +static int hf_lustre_mds_body_max_cookiesize = -1; +static int hf_lustre_mds_body_io_epoch = -1; +static int hf_lustre_mds_body_ino = -1; +static int hf_lustre_mds_body_fid2 = -1; +static int hf_lustre_mds_body_padding_4 = -1; +static int hf_lustre_mds_body_aclsize = -1; +static int hf_lustre_mds_body_valid = -1; +static int hf_lustre_mds_body_generation = -1; +static int hf_lustre_mds_body_atime = -1; +static int hf_lustre_mds_body_handle = -1; +static int hf_lustre_mds_body_max_mdsize = -1; +static int hf_lustre_mds_body_rdev = -1; +static int hf_lustre_mds_body_blocks = -1; +static int hf_lustre_mds_body_fsuid = -1; +static int hf_lustre_mds_body_gid = -1; +static int hf_lustre_lustre_handle_cookie = -1; +static int hf_lustre_mds_body_suppgid = -1; +static int hf_lustre_mds_body_size = -1; +static int hf_lustre_mds_body_eadatasize = -1; +static int hf_lustre_mds_body_capability = -1; + +static int hf_lustre_ptlrpc_body_pb_last_committed = -1; +static int hf_lustre_ptlrpc_body_pb_version = -1; +static int hf_lustre_lustre_msg_v1_lm_bufcount = -1; +static int hf_lustre_obd_ioobj_ioo_id = -1; +static int hf_lustre_ptlrpc_body_pb_slv = -1; +static int hf_lustre_lustre_msg_v1_lm_handle = -1; +static int hf_lustre_ost_lvb_lvb_atime = -1; +static int hf_lustre_ptlrpc_body_pb_timeout = -1; +static int hf_lustre_obd_statfs_os_bavail = -1; +static int hf_lustre_obd_statfs_os_bsize = -1; +static int hf_lustre_lustre_msg_v2_lm_repsize = -1; +static int hf_lustre_lov_mds_md_v1_lmm_stripe_size = -1; +static int hf_lustre_lustre_msg_v1_lm_last_xid = -1; +static int hf_lustre_ll_fid_f_type = -1; +static int hf_lustre_lustre_msg_v2_lm_cksum = -1; +static int hf_lustre_lustre_msg_v2_lm_buflens = -1; +static int hf_lustre_lustre_msg_v1_lm_status = -1; +static int hf_lustre_lustre_msg_v1_lm_type = -1; +static int hf_lustre_niobuf_remote_len = -1; +static int hf_lustre_lov_mds_md_v1_lmm_magic = -1; +static int hf_lustre_ptlrpc_body_pb_op_flags = -1; +static int hf_lustre_ost_lvb_lvb_ctime = -1; +static int hf_lustre_ptlrpc_body_pb_type = -1; +static int hf_lustre_obd_connect_data_ocd_nllg = -1; +static int hf_lustre_obd_connect_data_ocd_nllu = -1; +static int hf_lustre_ll_fid_generation = -1; +static int hf_lustre_ost_lvb_lvb_mtime = -1; +static int hf_lustre_obd_connect_data_ocd_ibits_known = -1; +static int hf_lustre_lustre_msg_v2_lm_padding_3 = -1; +static int hf_lustre_ptlrpc_body_pb_flags = -1; +static int hf_lustre_obd_statfs_os_spare4 = -1; +static int hf_lustre_obd_connect_data_ocd_group = -1; +static int hf_lustre_lov_ost_data_v1_l_object_gr = -1; +static int hf_lustre_lov_mds_md_v1_lmm_object_gr = -1; +static int hf_lustre_obd_connect_data_ocd_brw_size = -1; +static int hf_lustre_ptlrpc_body_pb_limit = -1; +static int hf_lustre_obd_statfs_os_maxbytes = -1; +static int hf_lustre_obd_statfs_os_spare5 = -1; +static int hf_lustre_lustre_msg_v2_lm_flags = -1; +static int hf_lustre_obd_statfs_os_ffree = -1; +static int hf_lustre_obd_statfs_os_files = -1; +static int hf_lustre_lov_mds_md_v1_lmm_stripe_count = -1; +static int hf_lustre_lustre_msg_v1_lm_flags = -1; +static int hf_lustre_lustre_msg_v1_lm_last_committed = -1; +static int hf_lustre_obd_statfs_os_spare9 = -1; +static int hf_lustre_obd_connect_data_ocd_index = -1; +static int hf_lustre_opnum = -1; +static int hf_lustre_lustre_msg_v1_lm_buflens = -1; +static int hf_lustre_obd_statfs_os_spare1 = -1; +static int hf_lustre_obd_statfs_os_spare8 = -1; +static int hf_lustre_lustre_msg_v1_lm_conn_cnt = -1; +static int hf_lustre_ptlrpc_body_pb_transno = -1; +static int hf_lustre_ptlrpc_body_pb_service_time = -1; +static int hf_lustre_ptlrpc_body_pb_conn_cnt = -1; +static int hf_lustre_ptlrpc_body_pb_opc = -1; +static int hf_lustre_obd_connect_data_ocd_connect_flags = -1; +static int hf_lustre_lov_ost_data_v1_l_object_id = -1; +static int hf_lustre_lov_ost_data_v1_l_ost_gen = -1; +static int hf_lustre_obd_statfs_os_bfree = -1; +static int hf_lustre_obd_connect_data_ocd_version = -1; +static int hf_lustre_lov_mds_md_v1_lmm_objects = -1; +static int hf_lustre_mds_status_req_flags = -1; +static int hf_lustre_obd_statfs_os_namelen = -1; +static int hf_lustre_obd_statfs_os_blocks = -1; +static int hf_lustre_lustre_msg_v2_lm_secflvr = -1; +static int hf_lustre_lustre_msg_v1_lm_transno = -1; +static int hf_lustre_lov_mds_md_v1_lmm_pattern = -1; +static int hf_lustre_lustre_msg_v1_lm_opc = -1; +static int hf_lustre_obd_connect_data_ocd_grant = -1; +static int hf_lustre_obd_ioobj_ioo_bufcnt = -1; +static int hf_lustre_lustre_msg_v1_lm_version = -1; +static int hf_lustre_obd_statfs_os_spare7 = -1; +static int hf_lustre_obd_statfs_os_fsid = -1; +static int hf_lustre_obd_connect_data_ocd_cksum_types = -1; +static int hf_lustre_ost_lvb_lvb_size = -1; +static int hf_lustre_obd_statfs_os_type = -1; +static int hf_lustre_obd_statfs_os_spare6 = -1; +static int hf_lustre_obd_statfs_os_state = -1; +static int hf_lustre_obd_statfs_os_spare3 = -1; +static int hf_lustre_lustre_msg_v2_lm_magic = -1; +static int hf_lustre_lov_mds_md_v1_lmm_object_id = -1; +static int hf_lustre_ptlrpc_body_pb_last_seen = -1; +static int hf_lustre_obd_ioobj_ioo_type = -1; +static int hf_lustre_ptlrpc_body_pb_last_xid = -1; +static int hf_lustre_ptlrpc_body_pb_status = -1; +static int hf_lustre_niobuf_remote_flags = -1; +static int hf_lustre_ll_fid_id = -1; +static int hf_lustre_ost_lvb_lvb_blocks = -1; +static int hf_lustre_lustre_msg_v2_lm_padding_2 = -1; +static int hf_lustre_obd_connect_data_padding1 = -1; +static int hf_lustre_lov_ost_data_v1_l_ost_idx = -1; +static int hf_lustre_obd_connect_data_padding2 = -1; +static int hf_lustre_obd_ioobj_ioo_gr = -1; +static int hf_lustre_niobuf_remote_offset=-1; +static int hf_lustre_mds_status_req_repbuf = -1; +static int hf_lustre_obd_statfs_os_spare2 = -1; +static int hf_lustre_lustre_msg_v2_lm_bufcount = -1; +static int hf_lustre_ptlrpc_body_pb_handle = -1; +static int hf_lustre_obd_connect_data_ocd_transno = -1; +static int hf_lustre_lustre_msg_v1_lm_magic = -1; +static int hf_lustre_llog_unlink_rec_lur_tail = -1; +static int hf_lustre_llog_size_change_rec_lsc_io_epoch = -1; +static int hf_lustre_mgs_target_info_mti_flags = -1; +static int hf_lustre_ldlm_reply_lock_policy_res1 = -1; +static int hf_lustre_mds_rec_link_lk_fsuid = -1; +static int hf_lustre_llogd_body_lgd_len = -1; +static int hf_lustre_qunit_data_old_qd_id = -1; +static int hf_lustre_lov_user_md_join_lmm_stripe_count = -1; +static int hf_lustre_llog_logid_rec_padding1 = -1; +static int hf_lustre_quota_adjust_qunit_padding1 = -1; +static int hf_lustre_llog_size_change_rec_lsc_fid = -1; +static int hf_lustre_llog_rec_hdr_padding = -1; +static int hf_lustre_mds_rec_create_cr_time = -1; +static int hf_lustre_mds_rec_create_cr_padding_1 = -1; +static int hf_lustre_obdo_o_nlink = -1; +static int hf_lustre_mds_rec_rename_rn_suppgid2 = -1; +static int hf_lustre_mds_rec_link_lk_padding_4 = -1; +static int hf_lustre_mds_rec_link_lk_cap = -1; +static int hf_lustre_ldlm_extent_gid = -1; +static int hf_lustre_obdo_o_uid = -1; +static int hf_lustre_mds_rec_create_cr_padding_5 = -1; +static int hf_lustre_obdo_o_valid = -1; +static int hf_lustre_ldlm_reply_lock_flags = -1; +static int hf_lustre_mds_rec_link_lk_padding_3 = -1; +static int hf_lustre_obdo_o_misc = -1; +static int hf_lustre_mds_rec_setattr_sa_suppgid = -1; +static int hf_lustre_mds_rec_setattr_sa_attr_flags = -1; +static int hf_lustre_mds_rec_rename_rn_padding_2 = -1; +static int hf_lustre_ldlm_request_lock_handle = -1; +static int hf_lustre_llog_logid_lgl_oid = -1; +static int hf_lustre_ldlm_inodebits_bits = -1; +static int hf_lustre_llog_log_hdr_llh_count = -1; +static int hf_lustre_mds_rec_unlink_ul_padding_4 = -1; +static int hf_lustre_lov_user_md_join_lmm_stripe_size = -1; +static int hf_lustre_llog_gen_rec_lgr_tail = -1; +static int hf_lustre_llog_catid_lci_padding3 = -1; +static int hf_lustre_qunit_data_qd_qunit = -1; +static int hf_lustre_mds_rec_unlink_ul_fid1 = -1; +static int hf_lustre_llog_setattr_rec_padding = -1; +static int hf_lustre_mds_rec_rename_rn_opcode = -1; +static int hf_lustre_mds_rec_create_cr_flags = -1; +static int hf_lustre_mds_rec_rename_rn_fid1 = -1; +static int hf_lustre_mds_extent_desc_med_start = -1; +static int hf_lustre_llog_cookie_lgc_lgl = -1; +static int hf_lustre_obd_quotactl_qc_dqinfo = -1; +static int hf_lustre_llog_log_hdr_llh_bitmap = -1; +static int hf_lustre_mds_rec_setattr_sa_size = -1; +static int hf_lustre_mds_rec_rename_rn_suppgid1 = -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_mds_rec_unlink_ul_mode = -1; +static int hf_lustre_llog_orphan_rec_lor_tail = -1; +static int hf_lustre_llog_logid_rec_padding5 = -1; +static int hf_lustre_mds_rec_create_cr_fsgid = -1; +static int hf_lustre_mds_rec_join_jr_fid = -1; +static int hf_lustre_ldlm_intent_opc = -1; +static int hf_lustre_llog_rec_hdr_lrh_type = -1; +static int hf_lustre_mds_rec_link_lk_fsgid = -1; +static int hf_lustre_llog_rec_hdr_lrh_len = -1; +static int hf_lustre_llog_setattr_rec_lsr_uid = -1; +static int hf_lustre_lov_desc_ld_padding_1 = -1; +static int hf_lustre_obdo_o_padding_4 = -1; +static int hf_lustre_mgs_target_info_padding = -1; +static int hf_lustre_obd_quotactl_qc_dqblk = -1; +static int hf_lustre_llogd_conn_body_lgdc_gen = -1; +static int hf_lustre_mds_rec_create_cr_padding_2 = -1; +static int hf_lustre_mds_rec_setattr_sa_ctime = -1; +static int hf_lustre_llog_log_hdr_llh_tail = -1; +static int hf_lustre_obdo_o_size = -1; +static int hf_lustre_mds_rec_setattr_sa_cap = -1; +static int hf_lustre_ldlm_extent_start = -1; +static int hf_lustre_mds_rec_unlink_ul_opcode = -1; +static int hf_lustre_llog_size_change_rec_lsc_hdr = -1; +static int hf_lustre_mds_rec_unlink_ul_time = -1; +static int hf_lustre_lov_user_ost_data_join_l_extent_start = -1; +static int hf_lustre_lov_user_md_join_lmm_tree_id = -1; +static int hf_lustre_llog_create_rec_lcr_tail = -1; +static int hf_lustre_mds_rec_setattr_sa_mode = -1; +static int hf_lustre_llog_logid_lgl_ogr = -1; +static int hf_lustre_llog_create_rec_lcr_hdr = -1; +static int hf_lustre_llog_cookie_lgc_padding = -1; +static int hf_lustre_mds_rec_create_cr_cap = -1; +static int hf_lustre_qunit_data_old_qd_type = -1; +static int hf_lustre_ldlm_flock_blocking_export = -1; +static int hf_lustre_mds_rec_setattr_sa_gid = -1; +static int hf_lustre_lov_desc_ld_pattern = -1; +static int hf_lustre_qunit_data_qd_id = -1; +static int hf_lustre_mgs_target_info_mti_fsname = -1; +static int hf_lustre_lov_user_md_join_lmm_object_gr = -1; +static int hf_lustre_ldlm_request_lock_flags = -1; +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_mds_rec_create_cr_opcode = -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; +static int hf_lustre_mds_rec_rename_rn_fid2 = -1; +static int hf_lustre_mds_rec_create_cr_replayfid = -1; +static int hf_lustre_ldlm_lock_desc_l_policy_data = -1; +static int hf_lustre_mds_rec_link_lk_suppgid1 = -1; +static int hf_lustre_obd_quotactl_qc_cmd = -1; +static int hf_lustre_lov_user_md_join_lmm_object_id = -1; +static int hf_lustre_mds_rec_rename_rn_padding_3 = -1; +static int hf_lustre_qunit_data_padding = -1; +static int hf_lustre_lov_user_md_join_lmm_objects = -1; +static int hf_lustre_quota_adjust_qunit_qaq_flags = -1; +static int hf_lustre_lov_user_ost_data_join_l_object_gr = -1; +static int hf_lustre_ldlm_lock_desc_l_granted_mode = -1; +static int hf_lustre_obdo_o_gr = -1; +static int hf_lustre_mds_rec_unlink_ul_padding_2 = -1; +static int hf_lustre_obdo_o_gid = -1; +static int hf_lustre_llog_catid_lci_logid = -1; +static int hf_lustre_llog_rec_tail_lrt_index = -1; +static int hf_lustre_obdo_o_mds = -1; +static int hf_lustre_mds_extent_desc_med_lmm = -1; +static int hf_lustre_lov_desc_ld_default_stripe_count = -1; +static int hf_lustre_ldlm_resource_desc_lr_padding = -1; +static int hf_lustre_cfg_marker_cm_vers = -1; +static int hf_lustre_mds_rec_create_cr_fid = -1; +static int hf_lustre_llog_unlink_rec_lur_hdr = -1; +static int hf_lustre_llogd_body_lgd_index = -1; +static int hf_lustre_cfg_marker_cm_tgtname = -1; +static int hf_lustre_mds_rec_unlink_ul_padding_1 = -1; +static int hf_lustre_mds_rec_unlink_ul_cap = -1; +static int hf_lustre_llog_array_rec_lmr_med = -1; +static int hf_lustre_llog_setattr_rec_lsr_ogen = -1; +static int hf_lustre_mds_rec_create_cr_padding_3 = -1; +static int hf_lustre_llog_logid_rec_lid_hdr = -1; +static int hf_lustre_lov_user_ost_data_join_l_ost_idx = -1; +static int hf_lustre_obdo_o_easize = -1; +static int hf_lustre_lov_user_md_join_lmm_array_id = -1; +static int hf_lustre_ost_body_oa = -1; +static int hf_lustre_llog_logid_rec_padding3 = -1; +static int hf_lustre_llog_log_hdr_llh_flags = -1; +static int hf_lustre_llog_setattr_rec_lsr_oid = -1; +static int hf_lustre_mds_rec_create_cr_mode = -1; +static int hf_lustre_llog_size_change_rec_padding = -1; +static int hf_lustre_mgs_target_info_mti_config_ver = -1; +static int hf_lustre_cfg_marker_cm_createtime = -1; +static int hf_lustre_qunit_data_old_qd_count = -1; +static int hf_lustre_lov_mds_md_join_lmmj_array_id = -1; +static int hf_lustre_mds_rec_setattr_sa_uid = -1; +static int hf_lustre_llog_catid_lci_padding1 = -1; +static int hf_lustre_mds_rec_setattr_sa_atime = -1; +static int hf_lustre_lov_desc_ld_active_tgt_count = -1; +static int hf_lustre_obdo_o_lcookie = -1; +static int hf_lustre_llog_gen_rec_lgr_gen = -1; +static int hf_lustre_lov_user_ost_data_join_l_object_id = -1; +static int hf_lustre_obdo_o_id = -1; +static int hf_lustre_mgs_target_info_mti_uuid = -1; +static int hf_lustre_mds_rec_link_lk_padding_1 = -1; +static int hf_lustre_llog_rec_hdr_lrh_index = -1; +static int hf_lustre_llog_setattr_rec_lsr_hdr = -1; +static int hf_lustre_mgs_target_info_mti_stripe_index = -1; +static int hf_lustre_llog_gen_conn_cnt = -1; +static int hf_lustre_obdo_o_padding_6 = -1; +static int hf_lustre_mds_rec_create_cr_suppgid = -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_mds_rec_rename_rn_fsuid = -1; +static int hf_lustre_cfg_marker_cm_flags = -1; +static int hf_lustre_obdo_o_padding_3 = -1; +static int hf_lustre_lov_user_ost_data_join_l_ost_gen = -1; +static int hf_lustre_mds_rec_create_cr_fsuid = -1; +static int hf_lustre_mds_rec_unlink_ul_fsgid = -1; +static int hf_lustre_ldlm_request_lock_desc = -1; +static int hf_lustre_lov_user_md_join_lmm_pattern = -1; +static int hf_lustre_mds_rec_unlink_ul_fsuid = -1; +static int hf_lustre_mds_rec_link_lk_suppgid2 = -1; +static int hf_lustre_llog_orphan_rec_padding = -1; +static int hf_lustre_lov_user_md_join_lmm_tree_gen = -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; +static int hf_lustre_mds_rec_setattr_sa_valid = -1; +static int hf_lustre_cfg_marker_cm_comment = -1; +static int hf_lustre_llog_unlink_rec_lur_oid = -1; +static int hf_lustre_qunit_data_qd_count = -1; +static int hf_lustre_mds_rec_rename_rn_padding_1 = -1; +static int hf_lustre_obdo_o_mtime = -1; +static int hf_lustre_lov_mds_md_join_lmmj_md = -1; +static int hf_lustre_mds_rec_rename_rn_fsgid = -1; +static int hf_lustre_mds_rec_rename_rn_cap = -1; +static int hf_lustre_obdo_o_blksize = -1; +static int hf_lustre_mds_rec_unlink_ul_suppgid = -1; +static int hf_lustre_ldlm_res_id_name = -1; +static int hf_lustre_mds_rec_link_lk_time = -1; +static int hf_lustre_ldlm_reply_lock_handle = -1; +static int hf_lustre_mds_rec_unlink_ul_padding_3 = -1; +static int hf_lustre_llogd_body_lgd_saved_index = -1; +static int hf_lustre_mds_rec_join_jr_headsize = -1; +static int hf_lustre_mds_rec_rename_rn_padding_4 = -1; +static int hf_lustre_qunit_data_old_qd_isblk = -1; +static int hf_lustre_obdo_o_blocks = -1; +static int hf_lustre_lov_desc_ld_padding_2 = -1; +static int hf_lustre_mds_rec_link_lk_fid2 = -1; +static int hf_lustre_llog_logid_rec_lid_tail = -1; +static int hf_lustre_obdo_o_grant = -1; +static int hf_lustre_obdo_o_padding_2 = -1; +static int hf_lustre_quota_adjust_qunit_qaq_iunit_sz = -1; +static int hf_lustre_llog_unlink_rec_padding = -1; +static int hf_lustre_ldlm_lock_desc_l_req_mode = -1; +static int hf_lustre_ldlm_extent_end = -1; +static int hf_lustre_llog_gen_rec_lgr_hdr = -1; +static int hf_lustre_llog_orphan_rec_lor_ogen = -1; +static int hf_lustre_lov_user_md_join_lmm_extent_count = -1; +static int hf_lustre_mds_extent_desc_med_len = -1; +static int hf_lustre_llogd_body_lgd_llh_flags = -1; +static int hf_lustre_llog_array_rec_lmr_hdr = -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_mds_rec_create_cr_padding_4 = -1; +static int hf_lustre_llog_logid_rec_padding4 = -1; +static int hf_lustre_mds_rec_link_lk_padding_2 = -1; +static int hf_lustre_llog_setattr_rec_lsr_gid = -1; +static int hf_lustre_lov_user_md_join_lmm_magic = -1; +static int hf_lustre_obd_quotactl_qc_type = -1; +static int hf_lustre_cfg_marker_padding = -1; +static int hf_lustre_mgs_target_info_mti_nids = -1; +static int hf_lustre_lov_user_ost_data_join_l_extent_end = -1; +static int hf_lustre_obdo_o_stripe_idx = -1; +static int hf_lustre_llogd_conn_body_lgdc_logid = -1; +static int hf_lustre_mds_rec_setattr_sa_fsuid = -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; +static int hf_lustre_quota_adjust_qunit_qaq_bunit_sz = -1; +static int hf_lustre_llog_array_rec_lmr_tail = -1; +static int hf_lustre_ldlm_flock_pid = -1; +static int hf_lustre_lov_desc_ld_default_stripe_size = -1; +static int hf_lustre_mds_rec_setattr_sa_opcode = -1; +static int hf_lustre_llog_log_hdr_llh_tgtuuid = -1; +static int hf_lustre_mds_rec_link_lk_fid1 = -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; +static int hf_lustre_mds_rec_setattr_sa_mtime = -1; +static int hf_lustre_llog_log_hdr_llh_timestamp = -1; +static int hf_lustre_llog_catid_lci_padding2 = -1; +static int hf_lustre_llogd_conn_body_lgdc_ctxt_idx = -1; +static int hf_lustre_cfg_marker_cm_canceltime = -1; +static int hf_lustre_mgs_target_info_mti_lustre_ver = -1; +static int hf_lustre_obdo_o_padding_1 = -1; +static int hf_lustre_qunit_data_qd_flags = -1; +static int hf_lustre_llog_logid_rec_lid_id = -1; +static int hf_lustre_obdo_o_generation = -1; +static int hf_lustre_llog_gen_mnt_cnt = -1; +static int hf_lustre_llog_size_change_rec_lsc_tail = -1; +static int hf_lustre_obdo_o_padding_5 = -1; +static int hf_lustre_ldlm_lock_desc_l_resource = -1; +static int hf_lustre_mds_rec_rename_rn_time = -1; +static int hf_lustre_mds_rec_create_cr_rdev = -1; +static int hf_lustre_obdo_o_fid = -1; +static int hf_lustre_mds_rec_setattr_sa_fid = -1; +static int hf_lustre_ldlm_request_lock_count = -1; +static int hf_lustre_ldlm_flock_end = -1; +static int hf_lustre_mds_rec_link_lk_opcode = -1; +static int hf_lustre_mgs_target_info_mti_nid_count = -1; +static int hf_lustre_obdo_o_ctime = -1; +static int hf_lustre_ldlm_reply_lock_policy_res2 = -1; +static int hf_lustre_llogd_body_lgd_ctxt_idx = -1; +static int hf_lustre_mds_rec_unlink_ul_fid2 = -1; +static int hf_lustre_lov_desc_ld_qos_maxage = -1; +static int hf_lustre_ldlm_resource_desc_lr_type = -1; +static int hf_lustre_llog_setattr_rec_lsr_tail = -1; +static int hf_lustre_llog_cookie_lgc_subsys = -1; +static int hf_lustre_llog_log_hdr_llh_hdr = -1; +static int hf_lustre_mds_rec_setattr_sa_fsgid = -1; +static int hf_lustre_mds_rec_setattr_sa_padding = -1; +static int hf_lustre_lov_mds_md_join_lmmj_extent_count = -1; +static int hf_lustre_llog_log_hdr_llh_reserved = -1; + +/* Header field declarations for field from lustre_user.h*/ +static int hf_lustre_obd_dqinfo_dqi_valid = -1; +static int hf_lustre_obd_dqblk_dqb_isoftlimit = -1; +static int hf_lustre_obd_dqblk_dqb_bhardlimit = -1; +static int hf_lustre_obd_dqblk_dqb_curspace = -1; +static int hf_lustre_obd_dqblk_dqb_itime = -1; +static int hf_lustre_obd_dqblk_dqb_valid = -1; +static int hf_lustre_obd_dqinfo_dqi_igrace = -1; +static int hf_lustre_obd_dqinfo_dqi_bgrace = -1; +static int hf_lustre_obd_dqblk_padding = -1; +static int hf_lustre_obd_dqblk_dqb_curinodes = -1; +static int hf_lustre_obd_dqblk_dqb_bsoftlimit = -1; +static int hf_lustre_obd_dqinfo_dqi_flags = -1; +static int hf_lustre_obd_dqblk_dqb_btime = -1; +static int hf_lustre_obd_dqblk_dqb_ihardlimit = -1; +static int hf_lustre_ldlm_intent_opc_open = -1 ; +static int hf_lustre_ldlm_intent_opc_creat = -1; +static int hf_lustre_ldlm_intent_opc_readdir = -1; +static int hf_lustre_ldlm_intent_opc_getattr = -1; +static int hf_lustre_ldlm_intent_opc_lookup = -1; +static int hf_lustre_ldlm_intent_opc_unlink = -1; +static int hf_lustre_ldlm_intent_opc_getxattr = -1; +static int hf_lustre_ldlm_intent_opc_exec = -1; +static int hf_lustre_ldlm_intent_opc_pin = -1; +static int hf_lustre_llog_hdr_llh_flag_zap_when_empty = -1; +static int hf_lustre_llog_hdr_llh_flag_is_cat = -1; +static int hf_lustre_llog_hdr_llh_flag_is_play = -1; +/* --------------------------------------------------------------------*/ + + +/* proto declaration */ +static gint proto_lustre = -1; + + + + +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_) ; + + +/* ======================================================================== */ +/*the value_string*/ +const value_string lustre_ldlm_opcode[] = { + { IT_OPEN , "IT_OPEN "}, + { IT_CREAT , "IT_CREAT "}, + { IT_READDIR , "IT_READDIR "}, + { IT_GETATTR , "IT_GETATTR "}, + { IT_LOOKUP , "IT_LOOKUP "}, + { IT_UNLINK , "IT_UNLINK "}, + { IT_GETXATTR, "IT_GETXATTR"}, + { IT_EXEC , "IT_EXEC "}, + { IT_PIN , "IT_PIN "}, + { 0, NULL } +}; + +const value_string lustre_lov_magic[] = { + { LOV_MAGIC_V1, "LOV_MAGIC_V1" }, + { LOV_MAGIC_JOIN, "LOV_MAGIC_JOIN" }, + {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 "}, + {OST_RAID1_REC ,"OST_RAID1_REC "}, + {MDS_UNLINK_REC ,"MDS_UNLINK_REC "}, + {MDS_SETATTR_REC ,"MDS_SETATTR_REC "}, + {OBD_CFG_REC ,"OBD_CFG_REC "}, + {PTL_CFG_REC ,"PTL_CFG_REC "}, + {LLOG_GEN_REC ,"LLOG_GEN_REC "}, + {LLOG_JOIN_REC ,"LLOG_JOIN_REC "}, + {LLOG_HDR_MAGIC ,"LLOG_HDR_MAGIC "}, + {LLOG_LOGID_MAGIC ,"LLOG_LOGID_MAGIC"}, + { 0, NULL } +}; + +const value_string lustre_llog_hdr_llh_flags[]= { + {LLOG_F_ZAP_WHEN_EMPTY , "LLOhdr_llh_G_F_ZAP_WHEN_EMPTY"}, + {LLOG_F_IS_CAT , "LLOhdr_llh_G_F_IS_CAT"}, + {LLOG_F_IS_PLAIN , "LLOG_F_IS_PLAIN"}, + { 0, NULL } +}; + +const value_string lustre_mds_flags_vals[] = { + {0x1,"MDS_BFLAG_UNCOMMITTED_WRITES"}, + {0x80000000, "MDS_BFLAG_EXT_FLAGS"}, /* == EXT3_RESERVED_FL */ + {0x00000008, "MDS_SYNC_FL "}, /* Synchronous updates */ + {0x00000010, "MDS_IMMUTABLE_FL "}, /* Immutable file */ + {0x00000020, "MDS_APPEND_FL "}, /* writes to file may only append */ + {0x00000080, "MDS_NOATIME_FL "}, /* do not update atime */ + {0x00010000, "MDS_DIRSYNC_FL "}, /* dirsync behaviour (dir only) */ + { 0, NULL } +}; + +const value_string lustre_LMTypes[] = { + { PTL_RPC_MSG_REQUEST, "request"}, + { PTL_RPC_MSG_ERR , "error"}, + { PTL_RPC_MSG_REPLY , "reply"}, + { 0, NULL } +}; + +const value_string lustre_mds_reint_t_vals[] = { + { REINT_SETATTR, "REINT_SETATTR" }, + { REINT_CREATE, "REINT_CREATE" }, + { REINT_LINK, "REINT_LINK" }, + { REINT_UNLINK, "REINT_UNLINK" }, + { REINT_RENAME, "REINT_RENAME" }, + { REINT_OPEN, "REINT_OPEN" }, + { 0, NULL } +}; +const value_string lustre_op_codes[] = { + /*OST Opcodes*/ + {0 , "OST_REPLY"}, + {1 , "OST_GETATTR"}, + {2 , "OST_SETATTR"}, + {3 , "OST_READ"}, + {4 , "OST_WRITE"}, + {5 , "OST_CREATE"}, + {6 , "OST_DESTROY"}, + {7 , "OST_GET_INFO"}, + {8 , "OST_CONNECT"}, + {9 , "OST_DISCONNECT"}, + {10 , "OST_PUNCH"}, + {11 , "OST_OPEN"}, + {12 , "OST_CLOSE"}, + {13 , "OST_STATFS"}, + {14 , "OST_SAN_READ(deprecated)"}, + {15 , "OST_SAN_WRITE(deprecated)"}, + {16 , "OST_SYNC"}, + {17 , "OST_SET_INFO"}, + {18 , "OST_QUOTACHECK"}, + {19 , "OST_QUOTACTL"}, + {20 , "OST_LAST_OPC"}, + /*MDS Opcodes*/ + {33 , "MDS_GETATTR"}, + {34 , "MDS_GETATTR_NAME"}, + {35 , "MDS_CLOSE"}, + {36 , "MDS_REINT"}, + {37 , "MDS_READPAGE"}, + {38 , "MDS_CONNECT"}, + {39 , "MDS_DISCONNECT"}, + {40 , "MDS_GETSTATUS"}, + {41 , "MDS_STATFS"}, + {42 , "MDS_PIN"}, + {43 , "MDS_UNPIN"}, + {44 , "MDS_SYNC"}, + {45 , "MDS_DONE_WRITING"}, + {46 , "MDS_SET_INFO"}, + {47 , "MDS_QUOTACHECK"}, + {48 , "MDS_QUOTACTL"}, + {49 , "MDS_GETXATTR"}, + {50 , "MDS_SETXATTR"}, + {51 , "MDS_LAST_OPC"}, + /*LDLM Opcodes*/ + {101 , "LDLM_ENQUEUE"}, + {102 , "LDLM_CONVERT"}, + {103 , "LDLM_CANCEL"}, + {104 , "LDLM_BL_CALLBACK"}, + {105 , "LDLM_CP_CALLBACK"}, + {106 , "LDLM_GL_CALLBACK"}, + {107 , "LDLM_LAST_OPC"}, + /*MGS Opcodes*/ + {250 , "MGS_CONNECT"}, + {251 , "MGS_DISCONNECT"}, + {252 , "MGS_EXCEPTION"}, + {253 , "MGS_TARGET_REG"}, + {254 , "MGS_TARGET_DEL"}, + {255 , "MGS_SET_INFO"}, + {256 , "MGS_LAST_OPC"}, + /*OBD Opcodes*/ + {400 , "OBD_PING"}, + {401 , "OBD_LOG_CANCEL"}, + {402 , "OBD_QC_CALLBACK"}, + {403 , "OBD_LAST_OPC"}, + /* LLOG opcodes */ + { 501, "LLOG_ORIGIN_HANDLE_CREATE"}, + { 502, "LLOG_ORIGIN_HANDLE_NEXT_BLOCK"}, + { 503, "LLOG_ORIGIN_HANDLE_READ_HEADER"}, + { 504, "LLOG_ORIGIN_HANDLE_WRITE_REC"}, + { 505, "LLOG_ORIGIN_HANDLE_CLOSE"}, + { 506, "LLOG_ORIGIN_CONNECT"}, + { 507, "LLOG_CATINFO"}, + { 508, "LLOG_ORIGIN_HANDLE_PREV_BLOCK"}, + { 509, "LLOG_ORIGIN_HANDLE_DESTROY"}, + { 0, NULL } +}; +/*const value_string lustre_ldlm_mode_t_vals[] = {*/ +/* { LCK_MINMODE, "MINMODE" },*/ +/* { LCK_EX, "EX" },*/ +/* { LCK_PW, "PW" },*/ +/* { LCK_PR, "PR" },*/ +/* { LCK_CW, "CW" },*/ +/* { LCK_CR, "CR" },*/ +/* { LCK_NL, "NL" },*/ +/* { LCK_GROUP, "GROUP" },*/ +/* { 0, NULL }*/ +/*};*/ + +/* detailled version the information came from : http://wiki.lustre.org/images/e/e5/LustreInternals_Architecture.pdf */ +const value_string lustre_ldlm_mode_t_vals[] = { + { LCK_MINMODE, "MINMODE" }, + { LCK_EX, "Exclusive" }, + { LCK_PW, "Protected Write" }, + { LCK_PR, "Protected Read" }, + { LCK_CW, "Concurrent Write" }, + { LCK_CR, "Concurrent Read" }, + { LCK_NL, "Null" }, + { LCK_GROUP, "GROUP" }, + { 0, NULL } +}; + +const value_string lustre_ldlm_type_t_vals[] = { + { LDLM_PLAIN, "LDLM_PLAIN" }, + { LDLM_EXTENT,"LDLM_EXTENT" }, + { LDLM_FLOCK, "LDLM_FLOCK" }, + { LDLM_IBITS, "LDLM_IBITS" }, + { 0, NULL } +}; + + +const value_string lustre_llog_cmd_t_vals[] = { + { LLOG_ORIGIN_HANDLE_CREATE, "LLOG_ORIGIN_HANDLE_CREATE" }, + { LLOG_ORIGIN_HANDLE_NEXT_BLOCK, "LLOG_ORIGIN_HANDLE_NEXT_BLOCK" }, + { LLOG_ORIGIN_HANDLE_READ_HEADER, "LLOG_ORIGIN_HANDLE_READ_HEADER" }, + { LLOG_ORIGIN_HANDLE_WRITE_REC, "LLOG_ORIGIN_HANDLE_WRITE_REC" }, + { LLOG_ORIGIN_HANDLE_CLOSE, "LLOG_ORIGIN_HANDLE_CLOSE" }, + { LLOG_ORIGIN_CONNECT, "LLOG_ORIGIN_CONNECT" }, + { LLOG_CATINFO, "LLOG_CATINFO" }, + { LLOG_ORIGIN_HANDLE_PREV_BLOCK, "LLOG_ORIGIN_HANDLE_PREV_BLOCK" }, + { LLOG_ORIGIN_HANDLE_DESTROY, "LLOG_ORIGIN_HANDLE_DESTROY" }, + { 0, NULL } +}; + + +/* ------------------------------------------------------------------- */ +/* display functions */ +/* ------------------------------------------------------------------- */ +/* display str in left corner and in COL */ +/* TODO : do we need to use inline here ?*/ +/* @gint col : the col where we add the information */ +inline static void display_info_str(proto_item *pi, column_info *cinfo, gint col, const gchar* str) +{ + if (NULL !=pi) + proto_item_append_text(pi, str); + + if (NULL !=cinfo) + if (check_col(cinfo, col)) + col_append_str(cinfo, col, str); +} + +/* + * Need to be (re)written + */ +static void display_info_fstr(proto_item *pi, column_info *cinfo, gint col, const char* format, const gchar * str){ + + if (NULL !=pi){ + //va_start(ap, format); + proto_item_append_text(pi, format, str); + //va_end(ap); + } + + if (NULL !=cinfo){ + if (check_col(cinfo, col)){ + // va_list ap; + // va_start(ap, format); + col_append_fstr(cinfo, col, format, str); + // va_end(ap); + } + } +} + + +/* ------------------------------ basic dissect functions ------------------------ */ +static int +dissect_uint64 +(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, int hfindex) +{ + proto_tree_add_item(tree, hfindex, tvb, offset, 8, TRUE); + return offset+8; +} + +static int +dissect_uint32 +(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, int hfindex) +{ + proto_tree_add_item(tree, hfindex, tvb, offset, 4, TRUE); + return offset+4; +} + +static int +dissect_uint8 +(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, int hfindex) +{ + proto_tree_add_item(tree, hfindex, tvb, offset, 1, TRUE); + return offset+1; +} +/* ------------------------------------------------------------------------- */ + + + + +/* IDL: struct lustre_handle { */ +/* IDL: uint64 cookie; */ +/* IDL: } */ + +static int +lustre_dissect_element_handle_cookie(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lustre_handle_cookie); + + return offset; +} + +int +lustre_dissect_struct_handle_cookie(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_lustre_handle_cookie); + } + + offset=lustre_dissect_element_handle_cookie(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct obd_connect_data { */ +/* IDL: uint64 ocd_connect_flags; */ +/* IDL: uint32 ocd_version; */ +/* IDL: uint32 ocd_grant; */ +/* IDL: uint32 ocd_index; */ +/* IDL: uint32 ocd_brw_size; */ +/* IDL: uint64 ocd_ibits_known; */ +/* IDL: uint32 ocd_nllu; */ +/* IDL: uint32 ocd_nllg; */ +/* IDL: uint64 ocd_transno; */ +/* IDL: uint32 ocd_group; */ +/* IDL: uint32 ocd_cksum_types; */ +/* IDL: uint64 padding1; */ +/* IDL: uint64 padding2; */ +/* IDL: } */ + +static int +lustre_dissect_element_obd_connect_data_ocd_connect_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_connect_flags); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_version); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_grant(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_grant); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_index(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_index); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_brw_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_brw_size); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_ibits_known(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_ibits_known); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_nllu(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_nllu); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_nllg(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_nllg); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_transno(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_transno); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_group(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_group); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_ocd_cksum_types(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_ocd_cksum_types); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_padding1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_padding1); + + return offset; +} + +static int +lustre_dissect_element_obd_connect_data_padding2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_connect_data_padding2); + + return offset; +} + +static int +lustre_dissect_struct_obd_connect_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_obd_connect_data); + } + + offset=lustre_dissect_element_obd_connect_data_ocd_connect_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_version(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_grant(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_index(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_brw_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_ibits_known(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_nllu(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_nllg(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_transno(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_group(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_ocd_cksum_types(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_padding1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_connect_data_padding2(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct lov_ost_data_v1 { */ +/* IDL: uint64 l_object_id; */ +/* IDL: uint64 l_object_gr; */ +/* IDL: uint32 l_ost_gen; */ +/* IDL: uint32 l_ost_idx; */ +/* IDL: } */ + +static int +lustre_dissect_element_lov_ost_data_v1_l_object_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_ost_data_v1_l_object_id); + + return offset; +} + +static int +lustre_dissect_element_lov_ost_data_v1_l_object_gr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_ost_data_v1_l_object_gr); + + return offset; +} + +static int +lustre_dissect_element_lov_ost_data_v1_l_ost_gen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_ost_data_v1_l_ost_gen); + + return offset; +} + +static int +lustre_dissect_element_lov_ost_data_v1_l_ost_idx(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_ost_data_v1_l_ost_idx); + + return offset; +} + +int +lustre_dissect_struct_lov_ost_data_v1(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_lov_ost_data_v1); + } + + offset=lustre_dissect_element_lov_ost_data_v1_l_object_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_ost_data_v1_l_object_gr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_ost_data_v1_l_ost_gen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_ost_data_v1_l_ost_idx(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct lov_mds_md_v1 { */ +/* IDL: uint32 lmm_magic; */ +/* IDL: uint32 lmm_pattern; */ +/* IDL: uint64 lmm_object_id; */ +/* IDL: uint64 lmm_object_gr; */ +/* IDL: uint32 lmm_stripe_size; */ +/* IDL: uint32 lmm_stripe_count; */ +/* IDL: struct lov_ost_data_v1 { */ +/* IDL: } lmm_objects[0]; <-- en fait on en a lmm_stripe_count */ +/* IDL: } */ + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_magic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_magic); + + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_pattern(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_pattern); + + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_object_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_object_id); + + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_object_gr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_object_gr); + + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_stripe_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_stripe_size); + + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_stripe_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_v1_lmm_stripe_count); + + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_objects_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_lov_ost_data_v1(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_v1_lmm_objects); + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_v1_lmm_objects(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int num) +{ + int i; + /*g_print("num = %d", num);*/ + for (i = 0; i < num; i++){ + offset=lustre_dissect_element_lov_mds_md_v1_lmm_objects_(tvb, offset, pinfo, tree); + } + + return offset; +} + + + +int +lustre_dissect_struct_lov_mds_md_v1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 stripe_count ; + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_lov_mds_md_v1); + } + + offset=lustre_dissect_element_lov_mds_md_v1_lmm_magic(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_mds_md_v1_lmm_pattern(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_mds_md_v1_lmm_object_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_mds_md_v1_lmm_object_gr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_mds_md_v1_lmm_stripe_size(tvb, offset, pinfo, tree); + + stripe_count = tvb_get_letohl(tvb,offset); + offset=lustre_dissect_element_lov_mds_md_v1_lmm_stripe_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_mds_md_v1_lmm_objects(tvb, offset, pinfo, tree, stripe_count); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct obd_statfs { */ +/* IDL: uint64 os_type; */ +/* IDL: uint64 os_blocks; */ +/* IDL: uint64 os_bfree; */ +/* IDL: uint64 os_bavail; */ +/* IDL: uint64 os_files; */ +/* IDL: uint64 os_ffree; */ +/* IDL: uint8 os_fsid[40]; */ +/* IDL: uint32 os_bsize; */ +/* IDL: uint32 os_namelen; */ +/* IDL: uint64 os_maxbytes; */ +/* IDL: uint32 os_state; */ +/* IDL: uint32 os_spare1; */ +/* IDL: uint32 os_spare2; */ +/* IDL: uint32 os_spare3; */ +/* IDL: uint32 os_spare4; */ +/* IDL: uint32 os_spare5; */ +/* IDL: uint32 os_spare6; */ +/* IDL: uint32 os_spare7; */ +/* IDL: uint32 os_spare8; */ +/* IDL: uint32 os_spare9; */ +/* IDL: } */ + +static int +lustre_dissect_element_obd_statfs_os_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_type); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_blocks(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_blocks); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_bfree(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_bfree); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_bavail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_bavail); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_files(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_files); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_ffree(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_ffree); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_fsid_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_fsid); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_fsid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 40; i++) + offset=lustre_dissect_element_obd_statfs_os_fsid_(tvb, offset, pinfo, tree); + + return offset; +} + + + +static int +lustre_dissect_element_obd_statfs_os_bsize(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_statfs_os_bsize); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_namelen(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_statfs_os_namelen); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_maxbytes(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_statfs_os_maxbytes); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_state(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_statfs_os_state); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare1(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_statfs_os_spare1); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare2(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_statfs_os_spare2); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare3(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_statfs_os_spare3); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare4(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_statfs_os_spare4); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare5(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_statfs_os_spare5); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare6(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_statfs_os_spare6); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare7(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_statfs_os_spare7); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare8(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_statfs_os_spare8); + + return offset; +} + +static int +lustre_dissect_element_obd_statfs_os_spare9(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_statfs_os_spare9); + + return offset; +} + +int +lustre_dissect_struct_obd_statfs(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_obd_statfs); + } + + offset=lustre_dissect_element_obd_statfs_os_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_blocks(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_bfree(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_bavail(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_files(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_ffree(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_fsid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_bsize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_namelen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_maxbytes(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_state(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare3(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare4(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare5(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare6(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare7(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare8(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_statfs_os_spare9(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct obd_ioobj { */ +/* IDL: uint64 ioo_id; */ +/* IDL: uint64 ioo_gr; */ +/* IDL: uint32 ioo_type; */ +/* IDL: uint32 ioo_bufcnt; */ +/* IDL: } */ + +static int +lustre_dissect_element_obd_ioobj_ioo_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_ioobj_ioo_id); + + return offset; +} + +static int +lustre_dissect_element_obd_ioobj_ioo_gr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_ioobj_ioo_gr); + + return offset; +} + +static int +lustre_dissect_element_obd_ioobj_ioo_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_ioobj_ioo_type); + + return offset; +} + +static int +lustre_dissect_element_obd_ioobj_ioo_bufcnt(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_bufcnt); + + return offset; +} + +int +lustre_dissect_struct_obd_ioobj(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_obd_ioobj); + } + + offset=lustre_dissect_element_obd_ioobj_ioo_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_ioobj_ioo_gr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_ioobj_ioo_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_ioobj_ioo_bufcnt(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct niobuf_remote { */ +/* IDL: uint64 offset; */ +/* IDL: uint32 len; */ +/* IDL: uint32 flags; */ +/* IDL: } */ + +static int +lustre_dissect_element_niobuf_remote_offset(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_niobuf_remote_offset); + + return offset; +} + +static int +lustre_dissect_element_niobuf_remote_len(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_niobuf_remote_len); + + return offset; +} + +static int +lustre_dissect_element_niobuf_remote_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_niobuf_remote_flags); + + return offset; +} + +int +lustre_dissect_struct_niobuf_remote(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_niobuf_remote); + } + + offset=lustre_dissect_element_niobuf_remote_offset(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_niobuf_remote_len(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_niobuf_remote_flags(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct ost_lvb { */ +/* IDL: uint64 lvb_size; */ +/* IDL: uint64 lvb_mtime; */ +/* IDL: uint64 lvb_atime; */ +/* IDL: uint64 lvb_ctime; */ +/* IDL: uint64 lvb_blocks; */ +/* IDL: } */ + +static int +lustre_dissect_element_ost_lvb_lvb_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ost_lvb_lvb_size); + + return offset; +} + +static int +lustre_dissect_element_ost_lvb_lvb_mtime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_ost_lvb_lvb_mtime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_ost_lvb_lvb_atime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_ost_lvb_lvb_atime, tvb, offset, 8, &ns ); + offset+=8; + return offset; + + return offset; +} + +static int +lustre_dissect_element_ost_lvb_lvb_ctime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_ost_lvb_lvb_ctime, tvb, offset, 8, &ns ); + offset+=8; + return offset; + + return offset; +} + +static int +lustre_dissect_element_ost_lvb_lvb_blocks(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ost_lvb_lvb_blocks); + + return offset; +} + +int +lustre_dissect_struct_ost_lvb(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_ost_lvb); + } + + offset=lustre_dissect_element_ost_lvb_lvb_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ost_lvb_lvb_mtime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ost_lvb_lvb_atime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ost_lvb_lvb_ctime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ost_lvb_lvb_blocks(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct ll_fid { */ +/* IDL: uint64 id; */ +/* IDL: uint32 generation; */ +/* IDL: uint32 f_type; */ +/* IDL: } */ + +static int +lustre_dissect_element_ll_fid_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ll_fid_id); + + return offset; +} + +static int +lustre_dissect_element_ll_fid_generation(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ll_fid_generation); + + return offset; +} + +static int +lustre_dissect_element_ll_fid_f_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ll_fid_f_type); + + return offset; +} + +int +lustre_dissect_struct_ll_fid(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_ll_fid); + } + + offset=lustre_dissect_element_ll_fid_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ll_fid_generation(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ll_fid_f_type(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct mds_status_req { */ +/* IDL: uint32 flags; */ +/* IDL: uint32 repbuf; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_status_req_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_status_req_flags); + + return offset; +} + +static int +lustre_dissect_element_mds_status_req_repbuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_status_req_repbuf); + + return offset; +} + +int +lustre_dissect_struct_mds_status_req(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_mds_status_req); + } + + offset=lustre_dissect_element_mds_status_req_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_status_req_repbuf(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct mds_body { */ +/* IDL: struct ll_fid { */ +/* IDL: } fid1; */ +/* IDL: struct ll_fid { */ +/* IDL: } fid2; */ +/* IDL: struct lustre_handle { */ +/* IDL: } handle; */ +/* IDL: uint64 valid; */ +/* IDL: uint64 size; */ +/* IDL: uint64 mtime; */ +/* IDL: uint64 atime; */ +/* IDL: uint64 ctime; */ +/* IDL: uint64 blocks; */ +/* IDL: uint64 io_epoch; */ +/* IDL: uint64 ino; */ +/* IDL: uint32 fsuid; */ +/* IDL: uint32 fsgid; */ +/* IDL: uint32 capability; */ +/* IDL: uint32 mode; */ +/* IDL: uint32 uid; */ +/* IDL: uint32 gid; */ +/* IDL: uint32 flags; */ +/* IDL: uint32 rdev; */ +/* IDL: uint32 nlink; */ +/* IDL: uint32 generation; */ +/* IDL: uint32 suppgid; */ +/* IDL: uint32 eadatasize; */ +/* IDL: uint32 aclsize; */ +/* IDL: uint32 max_mdsize; */ +/* IDL: uint32 max_cookiesize; */ +/* IDL: uint32 padding_4; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_body_fid1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_body_fid1); + return offset; +} + +static int +lustre_dissect_element_mds_body_fid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_body_fid2); + return offset; +} + +static int +lustre_dissect_element_mds_body_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_mds_body_handle); + + return offset; +} + +static int +lustre_dissect_element_mds_body_valid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_body_valid); + + return offset; +} + +static int +lustre_dissect_element_mds_body_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_body_size); + + return offset; +} + +static int +lustre_dissect_element_mds_body_mtime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_body_mtime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_body_atime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_body_atime, tvb, offset, 8, &ns ); + offset+=8; + + return offset; +} + +static int +lustre_dissect_element_mds_body_ctime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_body_ctime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_body_blocks(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_body_blocks); + + return offset; +} + +static int +lustre_dissect_element_mds_body_io_epoch(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_body_io_epoch); + + return offset; +} + +static int +lustre_dissect_element_mds_body_ino(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_body_ino); + + return offset; +} + +static int +lustre_dissect_element_mds_body_fsuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_fsuid); + + return offset; +} + +static int +lustre_dissect_element_mds_body_fsgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_fsgid); + + return offset; +} + +static int +lustre_dissect_element_mds_body_capability(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_capability); + + return offset; +} + +static int +lustre_dissect_element_mds_body_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_mode); + + return offset; +} + +static int +lustre_dissect_element_mds_body_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_uid); + + return offset; +} + +static int +lustre_dissect_element_mds_body_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_gid); + + return offset; +} + +static int +lustre_dissect_element_mds_body_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_flags); + + return offset; +} + +static int +lustre_dissect_element_mds_body_rdev(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_rdev); + + return offset; +} + +static int +lustre_dissect_element_mds_body_nlink(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_nlink); + + return offset; +} + +static int +lustre_dissect_element_mds_body_generation(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_generation); + + return offset; +} + +static int +lustre_dissect_element_mds_body_suppgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_suppgid); + + return offset; +} + +static int +lustre_dissect_element_mds_body_eadatasize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_eadatasize); + + return offset; +} + +static int +lustre_dissect_element_mds_body_aclsize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_aclsize); + + return offset; +} + +static int +lustre_dissect_element_mds_body_max_mdsize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_max_mdsize); + + return offset; +} + +static int +lustre_dissect_element_mds_body_max_cookiesize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_max_cookiesize); + + return offset; +} + +static int +lustre_dissect_element_mds_body_padding_4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_body_padding_4); + + return offset; +} + +int +lustre_dissect_struct_mds_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_mds_body); + } + + offset=lustre_dissect_element_mds_body_fid1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_fid2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_handle(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_valid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_mtime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_atime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_ctime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_blocks(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_io_epoch(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_ino(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_fsuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_fsgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_capability(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_mode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_uid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_gid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_rdev(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_nlink(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_generation(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_suppgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_eadatasize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_aclsize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_max_mdsize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_max_cookiesize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_body_padding_4(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct obd_dqinfo { */ +/* IDL: uint64 dqi_bgrace; */ +/* IDL: uint64 dqi_igrace; */ +/* IDL: uint32 dqi_flags; */ +/* IDL: uint32 dqi_valid; */ +/* IDL: } */ + +static int +lustre_dissect_element_obd_dqinfo_dqi_bgrace(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqinfo_dqi_bgrace); + + return offset; +} + +static int +lustre_dissect_element_obd_dqinfo_dqi_igrace(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqinfo_dqi_igrace); + + return offset; +} + +static int +lustre_dissect_element_obd_dqinfo_dqi_flags(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_dqinfo_dqi_flags); + + return offset; +} + +static int +lustre_dissect_element_obd_dqinfo_dqi_valid(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_dqinfo_dqi_valid); + + return offset; +} + +int +lustre_dissect_struct_obd_dqinfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_obd_dqinfo); + } + + offset = lustre_dissect_element_obd_dqinfo_dqi_bgrace(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqinfo_dqi_igrace(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqinfo_dqi_flags(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqinfo_dqi_valid(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct obd_dqblk { */ +/* IDL: uint64 dqb_bhardlimit; */ +/* IDL: uint64 dqb_bsoftlimit; */ +/* IDL: uint64 dqb_curspace; */ +/* IDL: uint64 dqb_ihardlimit; */ +/* IDL: uint64 dqb_isoftlimit; */ +/* IDL: uint64 dqb_curinodes; */ +/* IDL: uint64 dqb_btime; */ +/* IDL: uint64 dqb_itime; */ +/* IDL: uint32 dqb_valid; */ +/* IDL: uint32 padding; */ +/* IDL: } */ + +static int +lustre_dissect_element_obd_dqblk_dqb_bhardlimit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqblk_dqb_bhardlimit); + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_bsoftlimit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqblk_dqb_bsoftlimit); + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_curspace(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqblk_dqb_curspace); + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_ihardlimit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqblk_dqb_ihardlimit); + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_isoftlimit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqblk_dqb_isoftlimit); + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_curinodes(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset = dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obd_dqblk_dqb_curinodes); + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_btime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_obd_dqblk_dqb_btime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_itime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_obd_dqblk_dqb_itime, tvb, offset, 8, &ns ); + offset+=8; + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_dqb_valid(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_dqblk_dqb_valid); + + return offset; +} + +static int +lustre_dissect_element_obd_dqblk_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_obd_dqblk_padding); + + return offset; +} + +int +lustre_dissect_struct_obd_dqblk(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_obd_dqblk); + } + + offset = lustre_dissect_element_obd_dqblk_dqb_bhardlimit(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_bsoftlimit(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_curspace(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_ihardlimit(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_isoftlimit(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_curinodes(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_btime(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_itime(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_dqb_valid(tvb, offset, pinfo, tree); + + offset = lustre_dissect_element_obd_dqblk_padding(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct obd_quotactl { */ +/* IDL: uint32 qc_cmd; */ +/* IDL: uint32 qc_type; */ +/* IDL: uint32 qc_id; */ +/* IDL: uint32 qc_stat; */ +/* IDL: struct obd_dqinfo { */ +/* IDL: } qc_dqinfo; */ +/* IDL: struct obd_dqblk { */ +/* IDL: } qc_dqblk; */ +/* IDL: } */ + +static int +lustre_dissect_element_obd_quotactl_qc_cmd(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_quotactl_qc_cmd); + + return offset; +} + +static int +lustre_dissect_element_obd_quotactl_qc_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl_qc_type); + + return offset; +} + +static int +lustre_dissect_element_obd_quotactl_qc_id(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_quotactl_qc_id); + + return offset; +} + +static int +lustre_dissect_element_obd_quotactl_qc_stat(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_quotactl_qc_stat); + + return offset; +} + + + +static int +lustre_dissect_element_obd_quotactl_qc_dqblk(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_obd_dqblk(tvb,offset,pinfo,tree,hf_lustre_obd_quotactl_qc_dqblk); + return offset; +} + +static int +lustre_dissect_element_obd_quotactl_qc_dqinfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_obd_dqinfo(tvb,offset,pinfo,tree,hf_lustre_obd_quotactl_qc_dqinfo); + return offset; +} + +int +lustre_dissect_struct_obd_quotactl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_obd_quotactl); + } + + offset=lustre_dissect_element_obd_quotactl_qc_cmd(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_quotactl_qc_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_quotactl_qc_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_quotactl_qc_stat(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_quotactl_qc_dqinfo(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obd_quotactl_qc_dqblk(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct quota_adjust_qunit { */ +/* IDL: uint32 qaq_flags; */ +/* IDL: uint32 qaq_id; */ +/* IDL: uint64 qaq_bunit_sz; */ +/* IDL: uint64 qaq_iunit_sz; */ +/* IDL: uint64 padding1; */ +/* IDL: } */ + +static int +lustre_dissect_element_quota_adjust_qunit_qaq_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit_qaq_flags); + + return offset; +} + +static int +lustre_dissect_element_quota_adjust_qunit_qaq_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit_qaq_id); + + return offset; +} + +static int +lustre_dissect_element_quota_adjust_qunit_qaq_bunit_sz(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit_qaq_bunit_sz); + + return offset; +} + +static int +lustre_dissect_element_quota_adjust_qunit_qaq_iunit_sz(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit_qaq_iunit_sz); + + return offset; +} + +static int +lustre_dissect_element_quota_adjust_qunit_padding1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit_padding1); + + return offset; +} + +int +lustre_dissect_struct_quota_adjust_qunit(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_quota_adjust_qunit); + } + + offset=lustre_dissect_element_quota_adjust_qunit_qaq_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_quota_adjust_qunit_qaq_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_quota_adjust_qunit_qaq_bunit_sz(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_quota_adjust_qunit_qaq_iunit_sz(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_quota_adjust_qunit_padding1(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* I don't find where this struct appear on wire.. need to search mdc_setattr_pack() */ +/* IDL: struct mds_rec_setattr { */ +/* IDL: uint32 sa_opcode; */ +/* IDL: uint32 sa_fsuid; */ +/* IDL: uint32 sa_fsgid; */ +/* IDL: uint32 sa_cap; */ +/* IDL: uint32 sa_suppgid; */ +/* IDL: uint32 sa_mode; */ +/* IDL: struct ll_fid { */ +/* IDL: } sa_fid; */ +/* IDL: uint64 sa_valid; */ +/* IDL: uint64 sa_size; */ +/* IDL: uint64 sa_mtime; */ +/* IDL: uint64 sa_atime; */ +/* IDL: uint64 sa_ctime; */ +/* IDL: uint32 sa_uid; */ +/* IDL: uint32 sa_gid; */ +/* IDL: uint32 sa_attr_flags; */ +/* IDL: uint32 sa_padding; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_rec_setattr_sa_opcode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_opcode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_fsuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_fsuid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_fsgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_fsgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_cap(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_cap); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_suppgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_suppgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_mode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85af8d0)(tvb,offset,pinfo,tree,hf_lustre_mds_rec_setattr_sa_fid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_valid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_valid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_size); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_mtime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_rec_setattr_sa_mtime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_atime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_rec_setattr_sa_atime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_ctime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_rec_setattr_sa_ctime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_uid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_gid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_attr_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_setattr_sa_attr_flags); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_setattr_sa_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_mds_rec_setattr_sa_padding); + + return offset; +} + +int +lustre_dissect_struct_mds_rec_setattr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 sa_opcode ; + + + 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_mds_rec_setattr); + } + sa_opcode=tvb_get_letohl(tvb,offset); + display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(sa_opcode, lustre_mds_reint_t_vals, "Unknown sa_opc")); + + offset=lustre_dissect_element_mds_rec_setattr_sa_opcode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_fsuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_fsgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_cap(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_suppgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_mode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_fid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_valid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_mtime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_atime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_ctime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_uid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_gid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_attr_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_setattr_sa_padding(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct mds_rec_create { */ +/* IDL: uint32 cr_opcode; */ +/* IDL: uint32 cr_fsuid; */ +/* IDL: uint32 cr_fsgid; */ +/* IDL: uint32 cr_cap; */ +/* IDL: uint32 cr_flags; */ +/* IDL: uint32 cr_mode; */ +/* IDL: struct ll_fid { */ +/* IDL: } cr_fid; */ +/* IDL: struct ll_fid { */ +/* IDL: } cr_replayfid; */ +/* IDL: uint64 cr_time; */ +/* IDL: uint64 cr_rdev; */ +/* IDL: uint32 cr_suppgid; */ +/* IDL: uint32 cr_padding_1; */ +/* IDL: uint32 cr_padding_2; */ +/* IDL: uint32 cr_padding_3; */ +/* IDL: uint32 cr_padding_4; */ +/* IDL: uint32 cr_padding_5; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_rec_create_cr_opcode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_opcode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_fsuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_fsuid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_fsgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_fsgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_cap(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_cap); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_flags); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_mode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_create_cr_fid); + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_replayfid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_create_cr_replayfid); + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_time(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_rec_create_cr_time, tvb, offset, 8, &ns ); + offset+=8; + return offset; + +} + +static int +lustre_dissect_element_mds_rec_create_cr_rdev(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_rdev); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_suppgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_suppgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_padding_1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_padding_1); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_padding_2); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_padding_3); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_padding_4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_padding_4); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_create_cr_padding_5(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create_cr_padding_5); + + return offset; +} + +int +lustre_dissect_struct_mds_rec_create(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + guint32 cr_opcode ; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_mds_rec_create); + } + cr_opcode=tvb_get_letohl(tvb,offset); + display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(cr_opcode, lustre_mds_reint_t_vals, "Unknown cr_opc")); + + offset=lustre_dissect_element_mds_rec_create_cr_opcode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_fsuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_fsgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_cap(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_mode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_fid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_replayfid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_time(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_rdev(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_suppgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_padding_1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_padding_2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_padding_3(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_padding_4(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_create_cr_padding_5(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + + return offset; +} + + + +/* TODO : find where this structure appear ! */ +/* IDL: struct mds_rec_join { */ +/* IDL: struct ll_fid { */ +/* IDL: } jr_fid; */ +/* IDL: uint64 jr_headsize; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_rec_join_jr_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85b17c0)(tvb,offset,pinfo,tree,hf_lustre_mds_rec_join_jr_fid); + return offset; +} + +static int +lustre_dissect_element_mds_rec_join_jr_headsize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_rec_join_jr_headsize); + + return offset; +} + +int +lustre_dissect_struct_mds_rec_join(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_mds_rec_join); + } + + offset=lustre_dissect_element_mds_rec_join_jr_fid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_join_jr_headsize(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct mds_rec_link { */ +/* IDL: uint32 lk_opcode; */ +/* IDL: uint32 lk_fsuid; */ +/* IDL: uint32 lk_fsgid; */ +/* IDL: uint32 lk_cap; */ +/* IDL: uint32 lk_suppgid1; */ +/* IDL: uint32 lk_suppgid2; */ +/* IDL: struct ll_fid { */ +/* IDL: } lk_fid1; */ +/* IDL: struct ll_fid { */ +/* IDL: } lk_fid2; */ +/* IDL: uint64 lk_time; */ +/* IDL: uint32 lk_padding_1; */ +/* IDL: uint32 lk_padding_2; */ +/* IDL: uint32 lk_padding_3; */ +/* IDL: uint32 lk_padding_4; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_rec_link_lk_opcode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_opcode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_fsuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_fsuid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_fsgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_fsgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_cap(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_cap); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_suppgid1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_suppgid1); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_suppgid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_suppgid2); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_fid1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_link_lk_fid1); + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_fid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_link_lk_fid2); + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_time(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_rec_link_lk_time, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_padding_1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_padding_1); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_padding_2); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_padding_3); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_link_lk_padding_4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link_lk_padding_4); + + return offset; +} + +int +lustre_dissect_struct_mds_rec_link(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 lk_opcode ; + + + 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_mds_rec_link); + } + lk_opcode=tvb_get_letohl(tvb,offset); + display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(lk_opcode, lustre_mds_reint_t_vals, "Unknown lk_opc")); + + offset=lustre_dissect_element_mds_rec_link_lk_opcode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_fsuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_fsgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_cap(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_suppgid1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_suppgid2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_fid1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_fid2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_time(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_padding_1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_padding_2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_padding_3(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_link_lk_padding_4(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct mds_rec_unlink { */ +/* IDL: uint32 ul_opcode; */ +/* IDL: uint32 ul_fsuid; */ +/* IDL: uint32 ul_fsgid; */ +/* IDL: uint32 ul_cap; */ +/* IDL: uint32 ul_suppgid; */ +/* IDL: uint32 ul_mode; */ +/* IDL: struct ll_fid { */ +/* IDL: } ul_fid1; */ +/* IDL: struct ll_fid { */ +/* IDL: } ul_fid2; */ +/* IDL: uint64 ul_time; */ +/* IDL: uint32 ul_padding_1; */ +/* IDL: uint32 ul_padding_2; */ +/* IDL: uint32 ul_padding_3; */ +/* IDL: uint32 ul_padding_4; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_rec_unlink_ul_opcode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_opcode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_fsuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_fsuid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_fsgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_fsgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_cap(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_cap); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_suppgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_suppgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_mode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_fid1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_unlink_ul_fid1); + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_fid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_unlink_ul_fid2); + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_time(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree,hf_lustre_mds_rec_unlink_ul_time , tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_padding_1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_padding_1); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_padding_2); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_padding_3); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_unlink_ul_padding_4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink_ul_padding_4); + + return offset; +} + +int +lustre_dissect_struct_mds_rec_unlink(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 ul_opcode ; + + + 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_mds_rec_unlink); + } + + ul_opcode=tvb_get_letohl(tvb,offset); + display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(ul_opcode, lustre_mds_reint_t_vals, "Unknown ul_opc")); + + offset=lustre_dissect_element_mds_rec_unlink_ul_opcode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_fsuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_fsgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_cap(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_suppgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_mode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_fid1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_fid2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_time(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_padding_1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_padding_2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_padding_3(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_unlink_ul_padding_4(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct mds_rec_rename { */ +/* IDL: uint32 rn_opcode; */ +/* IDL: uint32 rn_fsuid; */ +/* IDL: uint32 rn_fsgid; */ +/* IDL: uint32 rn_cap; */ +/* IDL: uint32 rn_suppgid1; */ +/* IDL: uint32 rn_suppgid2; */ +/* IDL: struct ll_fid { */ +/* IDL: } rn_fid1; */ +/* IDL: struct ll_fid { */ +/* IDL: } rn_fid2; */ +/* IDL: uint64 rn_time; */ +/* IDL: uint32 rn_padding_1; */ +/* IDL: uint32 rn_padding_2; */ +/* IDL: uint32 rn_padding_3; */ +/* IDL: uint32 rn_padding_4; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_rec_rename_rn_opcode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_opcode); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_fsuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_fsuid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_fsgid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_fsgid); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_cap(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_cap); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_suppgid1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_suppgid1); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_suppgid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_suppgid2); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_fid1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_rename_rn_fid1); + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_fid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ll_fid(tvb,offset,pinfo,tree,hf_lustre_mds_rec_rename_rn_fid2); + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_time(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_mds_rec_rename_rn_time, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_padding_1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_padding_1); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_padding_2); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_padding_3); + + return offset; +} + +static int +lustre_dissect_element_mds_rec_rename_rn_padding_4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mds_rec_rename_rn_padding_4); + + return offset; +} + +int +lustre_dissect_struct_mds_rec_rename(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 rn_opcode ; + + + 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_mds_rec_rename); + } + + rn_opcode=tvb_get_letohl(tvb,offset); + display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(rn_opcode, lustre_mds_reint_t_vals, "Unknown rn_opc")); + + offset=lustre_dissect_element_mds_rec_rename_rn_opcode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_fsuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_fsgid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_cap(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_suppgid1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_suppgid2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_fid1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_fid2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_time(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_padding_1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_padding_2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_padding_3(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_rec_rename_rn_padding_4(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* TODO : find where this structure appear */ + +/* IDL: struct lov_desc { */ +/* IDL: uint32 ld_tgt_count; */ +/* IDL: uint32 ld_active_tgt_count; */ +/* IDL: uint32 ld_default_stripe_count; */ +/* IDL: uint32 ld_pattern; */ +/* IDL: uint64 ld_default_stripe_size; */ +/* IDL: uint64 ld_default_stripe_offset; */ +/* IDL: uint32 ld_padding_0; */ +/* IDL: uint32 ld_qos_maxage; */ +/* IDL: uint32 ld_padding_1; */ +/* IDL: uint32 ld_padding_2; */ +/* IDL: struct obd_uuid { */ +/* IDL: } ld_uuid; */ +/* IDL: } */ + +static int +lustre_dissect_element_lov_desc_ld_tgt_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_tgt_count); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_active_tgt_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_active_tgt_count); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_default_stripe_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_default_stripe_count); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_pattern(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_pattern); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_default_stripe_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_default_stripe_size); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_default_stripe_offset(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_default_stripe_offset); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_padding_0(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_padding_0); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_qos_maxage(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_qos_maxage); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_padding_1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_padding_1); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_desc_ld_padding_2); + + return offset; +} + +static int +lustre_dissect_element_lov_desc_ld_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85bade8)(tvb,offset,pinfo,tree,hf_lustre_lov_desc_ld_uuid); + return offset; +} + +int +lustre_dissect_struct_lov_desc(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_lov_desc); + } + + offset=lustre_dissect_element_lov_desc_ld_tgt_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_active_tgt_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_default_stripe_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_pattern(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_default_stripe_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_default_stripe_offset(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_padding_0(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_qos_maxage(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_padding_1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_padding_2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_desc_ld_uuid(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct obd_uuid { */ +/* char uuid[40]; */ +/* IDL: } */ + +static int +lustre_dissect_struct_obd_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + + /* the lenght of the string is 40 bytes max, with \0 inside */ + + proto_tree_add_item(parent_tree, hf_index, tvb, offset, 40, TRUE); + + + offset+=40; + return offset; +} + + + +/* IDL: struct ldlm_res_id { */ +/* IDL: uint64 name[4]; */ +/* IDL: } */ + +static int +lustre_dissect_element_ldlm_res_id_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_res_id_name); + + return offset; +} + +static int +lustre_dissect_element_ldlm_res_id_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 4; i++) + offset=lustre_dissect_element_ldlm_res_id_name_(tvb, offset, pinfo, tree); + + return offset; +} + + + +int +lustre_dissect_struct_ldlm_res_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_ldlm_res_id); + } + + offset=lustre_dissect_element_ldlm_res_id_name(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: enum { */ +/* IDL: LCK_MINMODE=0, */ +/* IDL: LCK_EX=1, */ +/* IDL: LCK_PW=2, */ +/* IDL: LCK_PR=4, */ +/* IDL: LCK_CW=8, */ +/* IDL: LCK_CR=16, */ +/* IDL: LCK_NL=32, */ +/* IDL: LCK_GROUP=64, */ +/* IDL: LCK_MAXMODE, */ +/* IDL: } */ + +int +lustre_dissect_enum_ldlm_mode_t(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_index); + return offset; +} + + +/* IDL: enum { */ +/* IDL: LDLM_PLAIN=10, */ +/* IDL: LDLM_EXTENT=11, */ +/* IDL: LDLM_FLOCK=12, */ +/* IDL: LDLM_IBITS=13, */ +/* IDL: LDLM_MAX_TYPE, */ +/* IDL: } */ + +int +lustre_dissect_enum_ldlm_type_t(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_resource_desc_lr_type ); + return offset; +} + +/* IDL: struct ldlm_extent { */ +/* IDL: uint64 start; */ +/* IDL: uint64 end; */ +/* IDL: uint64 gid; */ +/* IDL: } */ + +static int +lustre_dissect_element_ldlm_extent_start(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_extent_start); + + return offset; +} + +static int +lustre_dissect_element_ldlm_extent_end(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_extent_end); + + return offset; +} + +static int +lustre_dissect_element_ldlm_extent_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_extent_gid); + + return offset; +} + +int +lustre_dissect_struct_ldlm_extent(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_ldlm_extent); + } + + offset=lustre_dissect_element_ldlm_extent_start(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_extent_end(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_extent_gid(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct ldlm_inodebits { */ +/* IDL: uint64 bits; */ +/* IDL: } */ + +static int +lustre_dissect_element_ldlm_inodebits_bits(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_inodebits_bits); + + return offset; +} + +int +lustre_dissect_struct_ldlm_inodebits(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_ldlm_inodebits); + } + + offset=lustre_dissect_element_ldlm_inodebits_bits(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct ldlm_flock { */ +/* IDL: uint64 start; */ +/* IDL: uint64 end; */ +/* IDL: uint64 blocking_export; */ +/* IDL: uint32 blocking_pid; */ +/* IDL: uint32 pid; */ +/* IDL: } */ + +static int +lustre_dissect_element_ldlm_flock_start(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_flock_start); + + return offset; +} + +static int +lustre_dissect_element_ldlm_flock_end(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_flock_end); + + return offset; +} + +static int +lustre_dissect_element_ldlm_flock_blocking_export(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_flock_blocking_export); + + return offset; +} + +static int +lustre_dissect_element_ldlm_flock_blocking_pid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_flock_blocking_pid); + + return offset; +} + +static int +lustre_dissect_element_ldlm_flock_pid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_flock_pid); + + return offset; +} + +int +lustre_dissect_struct_ldlm_flock(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_ldlm_flock); + } + + offset=lustre_dissect_element_ldlm_flock_start(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_flock_end(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_flock_blocking_export(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_flock_blocking_pid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_flock_pid(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct ldlm_intent { */ +/* IDL: uint64 opc; */ +/* IDL: } */ + +static int +lustre_dissect_element_ldlm_intent_opc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + guint32 opcode; + /* this opcode is like a flag*/ + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_open ); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_creat ); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_readdir ); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_getattr ); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_lookup ); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_unlink ); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_getxattr); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_exec ); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent_opc_pin ); + opcode = tvb_get_letohl(tvb,offset); + + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, "[ intent :"); + if(opcode & IT_OPEN ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " open"); + proto_item_append_text(tree, " open" ); + } + if(opcode & IT_CREAT ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " create"); + proto_item_append_text(tree, " create" ); + } + if(opcode & IT_READDIR ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " readdir"); + proto_item_append_text(tree, " readdir" ); + } + if(opcode & IT_GETATTR ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " getattr"); + proto_item_append_text(tree, " getattr" ); + } + if(opcode & IT_LOOKUP ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " lookup"); + proto_item_append_text(tree, " lookup" ); + } + if(opcode & IT_UNLINK ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " unlink"); + proto_item_append_text(tree, " unlink" ); + } + if(opcode & IT_GETXATTR){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " getxattr"); + proto_item_append_text(tree, " getxattr" ); + } + if(opcode & IT_EXEC ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " exec"); + proto_item_append_text(tree, " exec" ); + } + if(opcode & IT_PIN ){ + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " pin"); + proto_item_append_text(tree, " pin" ); + } + + display_info_str(tree->parent, pinfo->cinfo, COL_INFO, " ]"); + offset+=8; + return offset; +} + +int +lustre_dissect_struct_ldlm_intent(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + // proto_item *item = NULL; + //proto_tree *tree = NULL; + int old_offset; + guint64 intent_opc; + proto_item * opcode_item = NULL; + proto_tree * opcode_tree = NULL; + + old_offset=offset; + // if (parent_tree) { + // item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + // tree = proto_item_add_subtree(item, ett_lustre_ldlm_intent); + // //tree = parent_tree; /* TODO : !!!!!!!!!!!!!!! ATTENTIon à revoir, + // //fait rapidement pour ne pas avoir le subtree */ + // } + + + intent_opc = tvb_get_letoh64(tvb,offset); + if (parent_tree){ + opcode_item = proto_tree_add_item(parent_tree, hf_lustre_ldlm_intent_opc, tvb, offset, 8, TRUE); + opcode_tree = proto_item_add_subtree(opcode_item, ett_lustre_ldlm_intent_opc); + } + + offset=lustre_dissect_element_ldlm_intent_opc(tvb, offset, pinfo, opcode_tree); + + offset=ldlm_opcode_process(tvb, offset, pinfo, parent_tree, intent_opc); + + + + return offset; +} + +/* IDL: struct ldlm_resource_desc { */ +/* IDL: ldlm_type_t lr_type; */ +/* IDL: uint32 lr_padding; */ +/* IDL: struct ldlm_res_id { */ +/* IDL: } lr_name; */ +/* IDL: } */ + +static int +lustre_dissect_element_ldlm_resource_desc_lr_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + /* offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_resource_desc_lr_type);*/ + offset=lustre_dissect_enum_ldlm_type_t(tvb, offset, pinfo, tree, hf_lustre_ldlm_resource_desc_lr_type); + return offset; +} + +static int +lustre_dissect_element_ldlm_resource_desc_lr_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_ldlm_resource_desc_lr_padding); + + return offset; +} + +static int +lustre_dissect_element_ldlm_resource_desc_lr_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ldlm_res_id(tvb,offset,pinfo,tree,hf_lustre_ldlm_resource_desc_lr_name); + return offset; +} + +int +lustre_dissect_struct_ldlm_resource_desc(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_ldlm_resource_desc); + } + + offset=lustre_dissect_element_ldlm_resource_desc_lr_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_resource_desc_lr_padding(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_resource_desc_lr_name(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct ldlm_lock_desc { */ +/* IDL: struct ldlm_resource_desc { */ +/* IDL: } l_resource; */ +/* IDL: ldlm_mode_t l_req_mode; */ +/* IDL: ldlm_mode_t l_granted_mode; */ +/* IDL: ldlm_policy_data_t l_policy_data; */ +/* IDL: } */ + +static int +lustre_dissect_element_ldlm_lock_desc_l_resource(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ldlm_resource_desc(tvb,offset,pinfo,tree,hf_lustre_ldlm_lock_desc_l_resource); + return offset; +} + +static int +lustre_dissect_element_ldlm_lock_desc_l_req_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_enum_ldlm_mode_t(tvb, offset, pinfo, tree, hf_lustre_ldlm_lock_desc_l_req_mode); + + return offset; +} + +static int +lustre_dissect_element_ldlm_lock_desc_l_granted_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_enum_ldlm_mode_t(tvb, offset, pinfo, tree, hf_lustre_ldlm_lock_desc_l_granted_mode); + + return offset; +} + +static int +lustre_dissect_element_ldlm_lock_desc_l_policy_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + + guint32 lr_type; /* type of the lock */ + + lr_type = tvb_get_letohl(tvb,offset - 48 ); /* TODO : find another way that using -48 */ + + /* this section must be check with lustre code, possible mistake here */ + switch(lr_type){ + case LDLM_PLAIN: + case LDLM_FLOCK: + offset=lustre_dissect_struct_ldlm_flock(tvb,offset,pinfo,tree,hf_lustre_ldlm_lock_desc_l_policy_data); + break; + case LDLM_EXTENT : + offset= lustre_dissect_struct_ldlm_extent(tvb,offset,pinfo,tree,hf_lustre_ldlm_lock_desc_l_policy_data); + /* add an extra padding 8 bytes */ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + break; + case LDLM_IBITS: + offset=lustre_dissect_struct_ldlm_inodebits(tvb,offset,pinfo,tree,hf_lustre_ldlm_lock_desc_l_policy_data); + /* add an extra padding 24 bytes */ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + break; + default: + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + break; + } + return offset; +} + +int +lustre_dissect_struct_ldlm_lock_desc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 lock_req_mode; + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_ldlm_lock_desc); + } + + offset=lustre_dissect_element_ldlm_lock_desc_l_resource(tvb, offset, pinfo, tree); + + lock_req_mode = tvb_get_letohl(tvb,offset); + + display_info_fstr(parent_tree->parent, pinfo->cinfo, COL_INFO, "[%s]", val_to_str(lock_req_mode, lustre_ldlm_mode_t_vals, "Unknown lock")); + + offset=lustre_dissect_element_ldlm_lock_desc_l_req_mode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_lock_desc_l_granted_mode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_lock_desc_l_policy_data(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct ldlm_request { */ +/* IDL: uint32 lock_flags; */ +/* IDL: uint32 lock_count; */ +/* IDL: struct ldlm_lock_desc { */ +/* IDL: } lock_desc; */ +/* IDL: struct lustre_handle { */ +/* IDL: } lock_handle[2]; */ +/* IDL: } */ + + + +static int +lustre_dissect_element_ldlm_request_lock_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_request_lock_count); + + return offset; +} + +static int +lustre_dissect_element_ldlm_request_lock_desc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ldlm_lock_desc(tvb,offset,pinfo,tree,hf_lustre_ldlm_request_lock_desc); + return 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_) +{ + /*if (check_col(pinfo->cinfo, COL_INFO)) */ + /* col_append_fstr(pinfo->cinfo, COL_INFO, " ldlm cookie : %" G_GINT64_MODIFIER "u", tvb_get_letoh64(tvb,offset) );*/ + + offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_ldlm_request_lock_handle); + return 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_) +{ + int i; + for (i = 0; i < 2; i++) + offset=lustre_dissect_element_ldlm_request_lock_handle_(tvb, offset, pinfo, tree); + + return offset; +} + +int +lustre_dissect_struct_ldlm_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + guint32 lock_flag ; + guint32 ldlm_type; + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_ldlm_request); + } + + lock_flag = tvb_get_letohl(tvb,offset); + offset=lustre_dissect_element_ldlm_lock_flags(tvb, offset, pinfo, tree, hf_lustre_ldlm_request_lock_flags); + + 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); + offset=lustre_dissect_element_ldlm_request_lock_desc(tvb, offset, pinfo, tree); + offset=lustre_dissect_element_ldlm_request_lock_handle(tvb, offset, pinfo, tree); + + 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_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply_lock_padding); + + return offset; +} + +static int +lustre_dissect_element_ldlm_reply_lock_desc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_ldlm_lock_desc(tvb,offset,pinfo,tree,hf_lustre_ldlm_reply_lock_desc); + return offset; +} + +static int +lustre_dissect_element_ldlm_reply_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + /*if (check_col(pinfo->cinfo, COL_INFO)) */ + /* col_append_fstr(pinfo->cinfo, COL_INFO, " ldlm cookie : %" G_GINT64_MODIFIER "u", tvb_get_letoh64(tvb,offset) );*/ + + offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_ldlm_reply_lock_handle); + return offset; +} + +static int +lustre_dissect_element_ldlm_reply_lock_policy_res1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply_lock_policy_res1); + + return offset; +} + +static int +lustre_dissect_element_ldlm_reply_lock_policy_res2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply_lock_policy_res2); + + return offset; +} + +int +lustre_dissect_struct_ldlm_reply(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 * ldlm_type _U_ ) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 lock_flag ; + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_ldlm_reply); + } + + 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); + + if (ldlm_type != NULL) + *ldlm_type = tvb_get_letohl(tvb,offset); + offset=lustre_dissect_element_ldlm_reply_lock_desc(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_reply_lock_handle(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_reply_lock_policy_res1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ldlm_reply_lock_policy_res2(tvb, offset, pinfo, tree); + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + + +/* IDL: struct mgs_send_param { */ +/* IDL: uint8 mgs_param[1024]; */ +/* IDL: } */ + + + +static int +lustre_dissect_element_mgs_send_param_mgs_param_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_mgs_send_param_mgs_param); + + return offset; +} + +static int +lustre_dissect_element_mgs_send_param_mgs_param(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 1024; i++) + offset=lustre_dissect_element_mgs_send_param_mgs_param_(tvb, offset, pinfo, tree); + + return offset; +} + +int +lustre_dissect_struct_mgs_send_param(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_send_param); + } + + offset=lustre_dissect_element_mgs_send_param_mgs_param(tvb, offset, pinfo, tree); + + + 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; */ +/* IDL: uint32 mti_config_ver; */ +/* IDL: uint32 mti_flags; */ +/* IDL: uint32 mti_nid_count; */ +/* IDL: uint32 padding; */ +/* IDL: uint8 mti_fsname[64]; */ +/* IDL: uint8 mti_svname[64]; */ +/* IDL: uint8 mti_uuid[40]; */ +/* IDL: uint64 mti_nids[32]; */ +/* IDL: uint8 mti_params[4096]; */ +/* IDL: } */ + +static int +lustre_dissect_element_mgs_target_info_mti_lustre_ver(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_lustre_ver); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_stripe_index(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_stripe_index); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_config_ver(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_config_ver); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_flags); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_nid_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_nid_count); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_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_mgs_target_info_padding); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_fsname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_fsname); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_fsname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 64; i++) + offset=lustre_dissect_element_mgs_target_info_mti_fsname_(tvb, offset, pinfo, tree); + + return offset; +} + + + + + +static int +lustre_dissect_element_mgs_target_info_mti_svname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_svname); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_svname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 64; i++) + offset=lustre_dissect_element_mgs_target_info_mti_svname_(tvb, offset, pinfo, tree); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_uuid_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_uuid); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 40; i++) + offset=lustre_dissect_element_mgs_target_info_mti_uuid_(tvb, offset, pinfo, tree); + + return offset; +} + + + + + +static int +lustre_dissect_element_mgs_target_info_mti_nids_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_nids); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_nids(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 32; i++) + offset=lustre_dissect_element_mgs_target_info_mti_nids_(tvb, offset, pinfo, tree); + + return offset; +} + + + +static int +lustre_dissect_element_mgs_target_info_mti_params_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info_mti_params); + + return offset; +} + +static int +lustre_dissect_element_mgs_target_info_mti_params(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 4096; i++) + offset=lustre_dissect_element_mgs_target_info_mti_params_(tvb, offset, pinfo, tree); + + return offset; +} + +int +lustre_dissect_struct_mgs_target_info(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_target_info); + } + + offset=lustre_dissect_element_mgs_target_info_mti_lustre_ver(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_stripe_index(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_config_ver(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_nid_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_padding(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_fsname(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_svname(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_uuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_nids(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mgs_target_info_mti_params(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct cfg_marker { */ +/* IDL: uint32 cm_step; */ +/* IDL: uint32 cm_flags; */ +/* IDL: uint32 cm_vers; */ +/* IDL: uint32 padding; */ +/* IDL: time_t cm_createtime; */ +/* IDL: time_t cm_canceltime; */ +/* IDL: uint8 cm_tgtname[64]; */ +/* IDL: uint8 cm_comment[64]; */ +/* IDL: } */ + +static int +lustre_dissect_element_cfg_marker_cm_step(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_cfg_marker_cm_step); + + return offset; +} + +static int +lustre_dissect_element_cfg_marker_cm_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_cfg_marker_cm_flags); + + return offset; +} + +static int +lustre_dissect_element_cfg_marker_cm_vers(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_cfg_marker_cm_vers); + + return offset; +} + +static int +lustre_dissect_element_cfg_marker_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_cfg_marker_padding); + + return offset; +} + +static int +lustre_dissect_element_cfg_marker_cm_createtime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=dissect_ndr_time_t(tvb, offset, pinfo,tree, hf_lustre_cfg_marker_cm_createtime ); + /*g_print("function lustre_dissect_element_cfg_marker_cm_createtime don't work\n");*/ + return offset; +} + +static int +lustre_dissect_element_cfg_marker_cm_canceltime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=dissect_ndr_time_t(tvb, offset, pinfo,tree, hf_lustre_cfg_marker_cm_canceltime); + + /*g_print("element_cfg_marker_cm_canceltime\n");*/ + return offset; +} + + + +static int +lustre_dissect_element_cfg_marker_cm_tgtname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_cfg_marker_cm_tgtname); + + return offset; +} + +static int +lustre_dissect_element_cfg_marker_cm_tgtname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 64; i++) + offset=lustre_dissect_element_cfg_marker_cm_tgtname_(tvb, offset, pinfo, tree); + + return offset; +} + + + +static int +lustre_dissect_element_cfg_marker_cm_comment_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint8(tvb, offset, pinfo, tree, hf_lustre_cfg_marker_cm_comment); + + return offset; +} + +static int +lustre_dissect_element_cfg_marker_cm_comment(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 64; i++) + offset=lustre_dissect_element_cfg_marker_cm_comment_(tvb, offset, pinfo, tree); + + return offset; +} + +int +lustre_dissect_struct_cfg_marker(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_cfg_marker); + } + + offset=lustre_dissect_element_cfg_marker_cm_step(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_cfg_marker_cm_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_cfg_marker_cm_vers(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_cfg_marker_padding(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_cfg_marker_cm_createtime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_cfg_marker_cm_canceltime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_cfg_marker_cm_tgtname(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_cfg_marker_cm_comment(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct llog_logid { */ +/* IDL: uint64 lgl_oid; */ +/* IDL: uint64 lgl_ogr; */ +/* IDL: uint32 lgl_ogen; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_logid_lgl_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_logid_lgl_oid); + + return offset; +} + +static int +lustre_dissect_element_llog_logid_lgl_ogr(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_logid_lgl_ogr); + + return offset; +} + +static int +lustre_dissect_element_llog_logid_lgl_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_logid_lgl_ogen); + + return offset; +} + +int +lustre_dissect_struct_llog_logid(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_logid); + } + + offset=lustre_dissect_element_llog_logid_lgl_oid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_lgl_ogr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_lgl_ogen(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* I don't know when this structure is used on network */ +/* IDL: struct llog_catid { */ +/* IDL: struct llog_logid { */ +/* IDL: } lci_logid; */ +/* IDL: uint32 lci_padding1; */ +/* IDL: uint32 lci_padding2; */ +/* IDL: uint32 lci_padding3; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_catid_lci_logid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85cc76c)(tvb,offset,pinfo,tree,hf_lustre_llog_catid_lci_logid); + + /*g_print("llog_catid_lci_logid bug\n");*/ + return offset; +} + +static int +lustre_dissect_element_llog_catid_lci_padding1(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_catid_lci_padding1); + + return offset; +} + +static int +lustre_dissect_element_llog_catid_lci_padding2(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_catid_lci_padding2); + + return offset; +} + +static int +lustre_dissect_element_llog_catid_lci_padding3(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_catid_lci_padding3); + + return offset; +} + +int +lustre_dissect_struct_llog_catid(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_catid); + } + + offset=lustre_dissect_element_llog_catid_lci_logid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_catid_lci_padding1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_catid_lci_padding2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_catid_lci_padding3(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct lov_mds_md_join { */ +/* IDL: struct lov_mds_md { */ +/* IDL: } lmmj_md; */ +/* IDL: struct llog_logid { */ +/* IDL: } lmmj_array_id; */ +/* IDL: uint32 lmmj_extent_count; */ +/* IDL: } */ + +static int +lustre_dissect_element_lov_mds_md_join_lmmj_md(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_lov_mds_md_v1(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_join_lmmj_md); + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_join_lmmj_array_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_logid(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_join_lmmj_array_id); + return offset; +} + +static int +lustre_dissect_element_lov_mds_md_join_lmmj_extent_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_mds_md_join_lmmj_extent_count); + + return offset; +} + +int +lustre_dissect_struct_lov_mds_md_join(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_lov_mds_md_join); + } + + offset=lustre_dissect_element_lov_mds_md_join_lmmj_md(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_mds_md_join_lmmj_array_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_mds_md_join_lmmj_extent_count(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct llog_rec_hdr { */ +/* IDL: uint32 lrh_len; */ +/* IDL: uint32 lrh_index; */ +/* IDL: uint32 lrh_type; */ +/* IDL: uint32 padding; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_rec_hdr_lrh_len(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_rec_hdr_lrh_len); + + return offset; +} + +static int +lustre_dissect_element_llog_rec_hdr_lrh_index(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_rec_hdr_lrh_index); + + return offset; +} + +static int +lustre_dissect_element_llog_rec_hdr_lrh_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_rec_hdr_lrh_type); + + return offset; +} + +static int +lustre_dissect_element_llog_rec_hdr_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_rec_hdr_padding); + + return offset; +} + +int +lustre_dissect_struct_llog_rec_hdr(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_rec_hdr); + } + + offset=lustre_dissect_element_llog_rec_hdr_lrh_len(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_rec_hdr_lrh_index(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_rec_hdr_lrh_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_rec_hdr_padding(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct llog_rec_tail { */ +/* IDL: uint32 lrt_len; */ +/* IDL: uint32 lrt_index; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_rec_tail_lrt_len(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_rec_tail_lrt_len); + + return offset; +} + +static int +lustre_dissect_element_llog_rec_tail_lrt_index(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_rec_tail_lrt_index); + + return offset; +} + +int +lustre_dissect_struct_llog_rec_tail(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_rec_tail); + } + + offset=lustre_dissect_element_llog_rec_tail_lrt_len(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_rec_tail_lrt_index(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct llog_logid_rec { */ +/* IDL: struct llog_rec_hdr { */ +/* IDL: } lid_hdr; */ +/* IDL: struct llog_logid { */ +/* IDL: } lid_id; */ +/* IDL: uint32 padding1; */ +/* IDL: uint32 padding2; */ +/* IDL: uint32 padding3; */ +/* IDL: uint32 padding4; */ +/* IDL: uint32 padding5; */ +/* IDL: struct llog_rec_tail { */ +/* IDL: } lid_tail; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_logid_rec_lid_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_rec_hdr(tvb,offset,pinfo,tree,hf_lustre_llog_logid_rec_lid_hdr); + return offset; +} + +static int +lustre_dissect_element_llog_logid_rec_lid_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_logid(tvb,offset,pinfo,tree,hf_lustre_llog_logid_rec_lid_id); + return offset; +} + +static int +lustre_dissect_element_llog_logid_rec_padding1(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_logid_rec_padding1); + + return offset; +} + +static int +lustre_dissect_element_llog_logid_rec_padding2(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_logid_rec_padding2); + + return offset; +} + +static int +lustre_dissect_element_llog_logid_rec_padding3(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_logid_rec_padding3); + + return offset; +} + +static int +lustre_dissect_element_llog_logid_rec_padding4(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_logid_rec_padding4); + + return offset; +} + +static int +lustre_dissect_element_llog_logid_rec_padding5(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_logid_rec_padding5); + + return offset; +} + +static int +lustre_dissect_element_llog_logid_rec_lid_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_rec_tail(tvb,offset,pinfo,tree,hf_lustre_llog_logid_rec_lid_tail); + return offset; +} + +int +lustre_dissect_struct_llog_logid_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_logid_rec); + } + + offset=lustre_dissect_element_llog_logid_rec_lid_hdr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_rec_lid_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_rec_padding1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_rec_padding2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_rec_padding3(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_rec_padding4(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_rec_padding5(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_logid_rec_lid_tail(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct mds_extent_desc { */ +/* IDL: uint64 med_start; */ +/* IDL: uint64 med_len; */ +/* IDL: struct lov_mds_md { */ +/* IDL: } med_lmm; */ +/* IDL: } */ + +static int +lustre_dissect_element_mds_extent_desc_med_start(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_extent_desc_med_start); + + return offset; +} + +static int +lustre_dissect_element_mds_extent_desc_med_len(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_mds_extent_desc_med_len); + + return offset; +} + +static int +lustre_dissect_element_mds_extent_desc_med_lmm(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85d3578)(tvb,offset,pinfo,tree,hf_lustre_mds_extent_desc_med_lmm); + /*g_print("bug\n");*/ + return offset; +} + +int +lustre_dissect_struct_mds_extent_desc(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_mds_extent_desc); + } + + offset=lustre_dissect_element_mds_extent_desc_med_start(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_extent_desc_med_len(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_mds_extent_desc_med_lmm(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct llog_array_rec { */ +/* IDL: struct llog_rec_hdr { */ +/* IDL: } lmr_hdr; */ +/* IDL: struct mds_extent_desc { */ +/* IDL: } lmr_med; */ +/* IDL: struct llog_rec_tail { */ +/* IDL: } lmr_tail; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_array_rec_lmr_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85d374c)(tvb,offset,pinfo,tree,hf_lustre_llog_array_rec_lmr_hdr); + + return offset; +} + +static int +lustre_dissect_element_llog_array_rec_lmr_med(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85d4328)(tvb,offset,pinfo,tree,hf_lustre_llog_array_rec_lmr_med); + + return offset; +} + +static int +lustre_dissect_element_llog_array_rec_lmr_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85d4478)(tvb,offset,pinfo,tree,hf_lustre_llog_array_rec_lmr_tail); + + return offset; +} + +int +lustre_dissect_struct_llog_array_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_array_rec); + } + + offset=lustre_dissect_element_llog_array_rec_lmr_hdr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_array_rec_lmr_med(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_array_rec_lmr_tail(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + 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; +} + + + +/* IDL: struct llog_unlink_rec { */ +/* IDL: struct llog_rec_hdr { */ +/* IDL: } lur_hdr; */ +/* IDL: uint64 lur_oid; */ +/* IDL: uint32 lur_ogen; */ +/* IDL: uint32 padding; */ +/* IDL: struct llog_rec_tail { */ +/* IDL: } lur_tail; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_unlink_rec_lur_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85d8730)(tvb,offset,pinfo,tree,hf_lustre_llog_unlink_rec_lur_hdr); + return offset; +} + +static int +lustre_dissect_element_llog_unlink_rec_lur_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_llog_unlink_rec_lur_oid); + + return offset; +} + +static int +lustre_dissect_element_llog_unlink_rec_lur_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_unlink_rec_lur_ogen); + + return offset; +} + +static int +lustre_dissect_element_llog_unlink_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_unlink_rec_padding); + + return offset; +} + +static int +lustre_dissect_element_llog_unlink_rec_lur_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85d9664)(tvb,offset,pinfo,tree,hf_lustre_llog_unlink_rec_lur_tail); + return offset; +} + +int +lustre_dissect_struct_llog_unlink_rec(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_llog_unlink_rec); + } + + offset=lustre_dissect_element_llog_unlink_rec_lur_hdr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_unlink_rec_lur_oid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_unlink_rec_lur_ogen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_unlink_rec_padding(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_unlink_rec_lur_tail(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct llog_setattr_rec { */ +/* IDL: struct llog_rec_hdr { */ +/* IDL: } lsr_hdr; */ +/* IDL: uint64 lsr_oid; */ +/* IDL: uint32 lsr_ogen; */ +/* IDL: uint32 lsr_uid; */ +/* IDL: uint32 lsr_gid; */ +/* IDL: uint32 padding; */ +/* IDL: struct llog_rec_tail { */ +/* IDL: } lsr_tail; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_setattr_rec_lsr_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85da2f0)(tvb,offset,pinfo,tree,hf_lustre_llog_setattr_rec_lsr_hdr); + return offset; +} + +static int +lustre_dissect_element_llog_setattr_rec_lsr_oid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_llog_setattr_rec_lsr_oid); + + return offset; +} + +static int +lustre_dissect_element_llog_setattr_rec_lsr_ogen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_setattr_rec_lsr_ogen); + + return offset; +} + +static int +lustre_dissect_element_llog_setattr_rec_lsr_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_setattr_rec_lsr_uid); + + return offset; +} + +static int +lustre_dissect_element_llog_setattr_rec_lsr_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_setattr_rec_lsr_gid); + + return offset; +} + +static int +lustre_dissect_element_llog_setattr_rec_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_setattr_rec_padding); + + return offset; +} + +static int +lustre_dissect_element_llog_setattr_rec_lsr_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85db3d4)(tvb,offset,pinfo,tree,hf_lustre_llog_setattr_rec_lsr_tail); + return offset; +} + +int +lustre_dissect_struct_llog_setattr_rec(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_llog_setattr_rec); + } + + offset=lustre_dissect_element_llog_setattr_rec_lsr_hdr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_setattr_rec_lsr_oid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_setattr_rec_lsr_ogen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_setattr_rec_lsr_uid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_setattr_rec_lsr_gid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_setattr_rec_padding(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_setattr_rec_lsr_tail(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + + +/* IDL: struct llog_size_change_rec { */ +/* IDL: struct llog_rec_hdr { */ +/* IDL: } lsc_hdr; */ +/* IDL: struct ll_fid { */ +/* IDL: } lsc_fid; */ +/* IDL: uint32 lsc_io_epoch; */ +/* IDL: uint32 padding; */ +/* IDL: struct llog_rec_tail { */ +/* IDL: } lsc_tail; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_size_change_rec_lsc_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85dc458)(tvb,offset,pinfo,tree,hf_lustre_llog_size_change_rec_lsc_hdr); + return offset; +} + +static int +lustre_dissect_element_llog_size_change_rec_lsc_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85dc5a8)(tvb,offset,pinfo,tree,hf_lustre_llog_size_change_rec_lsc_fid); + return offset; +} + +static int +lustre_dissect_element_llog_size_change_rec_lsc_io_epoch(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_size_change_rec_lsc_io_epoch); + + return offset; +} + +static int +lustre_dissect_element_llog_size_change_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_size_change_rec_padding); + + return offset; +} + +static int +lustre_dissect_element_llog_size_change_rec_lsc_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85dd384)(tvb,offset,pinfo,tree,hf_lustre_llog_size_change_rec_lsc_tail); + // TODO: to be corrected ! + return offset; +} + +int +lustre_dissect_struct_llog_size_change_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_size_change_rec); + } + + offset=lustre_dissect_element_llog_size_change_rec_lsc_hdr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_size_change_rec_lsc_fid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_size_change_rec_lsc_io_epoch(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_size_change_rec_padding(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_size_change_rec_lsc_tail(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + + +/* IDL: struct llog_gen { */ +/* IDL: uint64 mnt_cnt; */ +/* IDL: uint64 conn_cnt; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_gen_mnt_cnt(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_gen_mnt_cnt); + + return offset; +} + +static int +lustre_dissect_element_llog_gen_conn_cnt(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_gen_conn_cnt); + + return offset; +} + +int +lustre_dissect_struct_llog_gen(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_gen); + } + + offset=lustre_dissect_element_llog_gen_mnt_cnt(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_gen_conn_cnt(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* IDL: struct llog_gen_rec { */ +/* IDL: struct llog_rec_hdr { */ +/* IDL: } lgr_hdr; */ +/* IDL: struct llog_gen { */ +/* IDL: } lgr_gen; */ +/* IDL: struct llog_rec_tail { */ +/* IDL: } lgr_tail; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_gen_rec_lgr_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85de2e4)(tvb,offset,pinfo,tree,hf_lustre_llog_gen_rec_lgr_hdr); + // TODO: to be corrected ! + return offset; +} + +static int +lustre_dissect_element_llog_gen_rec_lgr_gen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85de434)(tvb,offset,pinfo,tree,hf_lustre_llog_gen_rec_lgr_gen); + // TODO: to be corrected ! + return offset; +} + +static int +lustre_dissect_element_llog_gen_rec_lgr_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85df3f8)(tvb,offset,pinfo,tree,hf_lustre_llog_gen_rec_lgr_tail); + // TODO: to be corrected ! + return offset; +} + +int +lustre_dissect_struct_llog_gen_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_gen_rec); + } + + offset=lustre_dissect_element_llog_gen_rec_lgr_hdr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_gen_rec_lgr_gen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_gen_rec_lgr_tail(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + + +/* IDL: struct llog_log_hdr { */ +/* IDL: struct llog_rec_hdr { */ +/* IDL: } llh_hdr; */ +/* IDL: uint64 llh_timestamp; */ +/* IDL: uint32 llh_count; */ +/* IDL: uint32 llh_bitmap_offset; */ +/* IDL: uint32 llh_size; */ +/* IDL: uint32 llh_flags; */ +/* IDL: uint32 llh_cat_idx; */ +/* IDL: struct obd_uuid { */ +/* IDL: } llh_tgtuuid; */ +/* IDL: uint32 llh_reserved[1]; */ +/* IDL: uint32 llh_bitmap[2024]; */ +/* IDL: struct llog_rec_tail { */ +/* IDL: } llh_tail; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_log_hdr_llh_hdr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_rec_hdr(tvb,offset,pinfo,tree,hf_lustre_llog_log_hdr_llh_hdr); + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_timestamp(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_llog_log_hdr_llh_timestamp, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_log_hdr_llh_count); + + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_bitmap_offset(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_log_hdr_llh_bitmap_offset); + + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_log_hdr_llh_size); + + return offset; +} + + + +static int +lustre_dissect_element_llog_log_llh_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_llog_log_llh_flags); + } + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_hdr_llh_flag_zap_when_empty); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_hdr_llh_flag_is_cat); + dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llog_hdr_llh_flag_is_play); + + offset+=4; + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_flags(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_log_hdr_llh_flags); + offset=lustre_dissect_element_llog_log_llh_flags(tvb, offset, pinfo, tree, hf_lustre_llog_log_hdr_llh_flags); + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_cat_idx(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_log_hdr_llh_cat_idx); + + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_tgtuuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_obd_uuid(tvb,offset,pinfo,tree,hf_lustre_llog_log_hdr_llh_tgtuuid); + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_reserved_(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_log_hdr_llh_reserved); + + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_reserved(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 1; i++) + offset=lustre_dissect_element_llog_log_hdr_llh_reserved_(tvb, offset, pinfo, tree); + + return offset; +} + +static int +lustre_dissect_element_llog_log_hdr_llh_bitmap_(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_log_hdr_llh_bitmap); + + return offset; +} + + +static int +lustre_dissect_element_llog_log_hdr_llh_bitmap(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + int i; + for (i = 0; i < 2024; i++) + offset=lustre_dissect_element_llog_log_hdr_llh_bitmap_(tvb, offset, pinfo, tree); + + return offset; +} + + + +static int +lustre_dissect_element_llog_log_hdr_llh_tail(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_rec_tail(tvb,offset,pinfo,tree,hf_lustre_llog_log_hdr_llh_tail); + return offset; +} + +int +lustre_dissect_struct_llog_log_hdr(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_log_hdr); + } + + offset=lustre_dissect_element_llog_log_hdr_llh_hdr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_timestamp(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_bitmap_offset(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_cat_idx(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_tgtuuid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_reserved(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_bitmap(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_log_hdr_llh_tail(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + + +/* IDL: struct llog_cookie { */ +/* IDL: struct llog_logid { */ +/* IDL: } lgc_lgl; */ +/* IDL: uint32 lgc_subsys; */ +/* IDL: uint32 lgc_index; */ +/* IDL: uint32 lgc_padding; */ +/* IDL: } */ + +static int +lustre_dissect_element_llog_cookie_lgc_lgl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_logid(tvb,offset,pinfo,tree,hf_lustre_llog_cookie_lgc_lgl); + return offset; +} + +static int +lustre_dissect_element_llog_cookie_lgc_subsys(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_cookie_lgc_subsys); + + return offset; +} + +static int +lustre_dissect_element_llog_cookie_lgc_index(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_cookie_lgc_index); + + return offset; +} + +static int +lustre_dissect_element_llog_cookie_lgc_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_cookie_lgc_padding); + + return offset; +} + +int +lustre_dissect_struct_llog_cookie(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_cookie); + } + + offset=lustre_dissect_element_llog_cookie_lgc_lgl(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_cookie_lgc_subsys(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_cookie_lgc_index(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llog_cookie_lgc_padding(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct llogd_body { */ +/* IDL: struct llog_logid { */ +/* IDL: } lgd_logid; */ +/* IDL: uint32 lgd_ctxt_idx; */ +/* IDL: uint32 lgd_llh_flags; */ +/* IDL: uint32 lgd_index; */ +/* IDL: uint32 lgd_saved_index; */ +/* IDL: uint32 lgd_len; */ +/* IDL: uint64 lgd_cur_offset; */ +/* IDL: } */ + +static int +lustre_dissect_element_llogd_body_lgd_logid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_logid(tvb,offset,pinfo,tree,hf_lustre_llogd_body_lgd_logid); + return offset; +} + +static int +lustre_dissect_element_llogd_body_lgd_ctxt_idx(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llogd_body_lgd_ctxt_idx); + + return offset; +} + +static int +lustre_dissect_element_llogd_body_lgd_llh_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llogd_body_lgd_llh_flags); + + offset=lustre_dissect_element_llog_log_llh_flags(tvb, offset, pinfo, tree, hf_lustre_llogd_body_lgd_llh_flags); + + return offset; +} + +static int +lustre_dissect_element_llogd_body_lgd_index(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llogd_body_lgd_index); + + return offset; +} + +static int +lustre_dissect_element_llogd_body_lgd_saved_index(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llogd_body_lgd_saved_index); + + return offset; +} + +static int +lustre_dissect_element_llogd_body_lgd_len(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llogd_body_lgd_len); + + return offset; +} + +static int +lustre_dissect_element_llogd_body_lgd_cur_offset(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_llogd_body_lgd_cur_offset); + + return offset; +} + +int +lustre_dissect_struct_llogd_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_llogd_body); + } + + offset=lustre_dissect_element_llogd_body_lgd_logid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_body_lgd_ctxt_idx(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_body_lgd_llh_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_body_lgd_index(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_body_lgd_saved_index(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_body_lgd_len(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_body_lgd_cur_offset(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* TODO : find when this Structure appear on the wire */ +/* IDL: struct llogd_conn_body { */ +/* IDL: struct llog_gen { */ +/* IDL: } lgdc_gen; */ +/* IDL: struct llog_logid { */ +/* IDL: } lgdc_logid; */ +/* IDL: uint32 lgdc_ctxt_idx; */ +/* IDL: } */ + +static int +lustre_dissect_element_llogd_conn_body_lgdc_gen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85e6038)(tvb,offset,pinfo,tree,hf_lustre_llogd_conn_body_lgdc_gen); + return offset; +} + +static int +lustre_dissect_element_llogd_conn_body_lgdc_logid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + //offset=lustre_dissect_struct_HASH(0x85e6188)(tvb,offset,pinfo,tree,hf_lustre_llogd_conn_body_lgdc_logid); + return offset; +} + +static int +lustre_dissect_element_llogd_conn_body_lgdc_ctxt_idx(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_llogd_conn_body_lgdc_ctxt_idx); + + return offset; +} + +int +lustre_dissect_struct_llogd_conn_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_llogd_conn_body); + } + + offset=lustre_dissect_element_llogd_conn_body_lgdc_gen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_conn_body_lgdc_logid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_llogd_conn_body_lgdc_ctxt_idx(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* TODO : find when this Structure appear on the wire */ +/* IDL: struct lov_user_ost_data_join { */ +/* IDL: uint64 l_extent_start; */ +/* IDL: uint64 l_extent_end; */ +/* IDL: uint64 l_object_id; */ +/* IDL: uint64 l_object_gr; */ +/* IDL: uint32 l_ost_gen; */ +/* IDL: uint32 l_ost_idx; */ +/* IDL: } */ + +static int +lustre_dissect_element_lov_user_ost_data_join_l_extent_start(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_ost_data_join_l_extent_start); + + return offset; +} + +static int +lustre_dissect_element_lov_user_ost_data_join_l_extent_end(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_ost_data_join_l_extent_end); + + return offset; +} + +static int +lustre_dissect_element_lov_user_ost_data_join_l_object_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_ost_data_join_l_object_id); + + return offset; +} + +static int +lustre_dissect_element_lov_user_ost_data_join_l_object_gr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_ost_data_join_l_object_gr); + + return offset; +} + +static int +lustre_dissect_element_lov_user_ost_data_join_l_ost_gen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_user_ost_data_join_l_ost_gen); + + return offset; +} + +static int +lustre_dissect_element_lov_user_ost_data_join_l_ost_idx(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_user_ost_data_join_l_ost_idx); + + return offset; +} + +int +lustre_dissect_struct_lov_user_ost_data_join(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_lov_user_ost_data_join); + } + + offset=lustre_dissect_element_lov_user_ost_data_join_l_extent_start(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_ost_data_join_l_extent_end(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_ost_data_join_l_object_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_ost_data_join_l_object_gr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_ost_data_join_l_ost_gen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_ost_data_join_l_ost_idx(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* TODO : find when this Structure appear on the wire */ +/* IDL: struct lov_user_md_join { */ +/* IDL: uint32 lmm_magic; */ +/* IDL: uint32 lmm_pattern; */ +/* IDL: uint64 lmm_object_id; */ +/* IDL: uint64 lmm_object_gr; */ +/* IDL: uint32 lmm_stripe_size; */ +/* IDL: uint32 lmm_stripe_count; */ +/* IDL: uint32 lmm_extent_count; */ +/* IDL: uint64 lmm_tree_id; */ +/* IDL: uint64 lmm_tree_gen; */ +/* IDL: struct llog_logid { */ +/* IDL: } lmm_array_id; */ +/* IDL: struct lov_user_ost_data_join { */ +/* IDL: } lmm_objects[0]; */ +/* IDL: } */ + +static int +lustre_dissect_element_lov_user_md_join_lmm_magic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_magic); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_pattern(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_pattern); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_object_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_object_id); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_object_gr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_object_gr); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_stripe_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_stripe_size); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_stripe_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_stripe_count); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_extent_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_extent_count); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_tree_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_tree_id); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_tree_gen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_tree_gen); + + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_array_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_logid(tvb,offset,pinfo,tree,hf_lustre_lov_user_md_join_lmm_array_id); + return offset; +} + +static int +lustre_dissect_element_lov_user_md_join_lmm_objects(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lov_user_md_join_lmm_objects); + //for (i = 0; i < 0; i++) + // offset=lustre_dissect_element_lov_user_md_join_lmm_objects_(tvb, offset, pinfo, tree); + + return offset; +} + +//static int +//lustre_dissect_element_lov_user_md_join_lmm_objects_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +//{ +// //offset=lustre_dissect_struct_HASH(0x85eb304)(tvb,offset,pinfo,tree,hf_lustre_lov_user_md_join_lmm_objects); +// return offset; +//} + +int +lustre_dissect_struct_lov_user_md_join(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_lov_user_md_join); + } + + offset=lustre_dissect_element_lov_user_md_join_lmm_magic(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_pattern(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_object_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_object_gr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_stripe_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_stripe_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_extent_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_tree_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_tree_gen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_array_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_lov_user_md_join_lmm_objects(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* IDL: struct obdo { */ +/* IDL: uint64 o_valid; */ +/* IDL: uint64 o_id; */ +/* IDL: uint64 o_gr; */ +/* IDL: uint64 o_fid; */ +/* IDL: uint64 o_size; */ +/* IDL: uint64 o_mtime; */ +/* IDL: uint64 o_atime; */ +/* IDL: uint64 o_ctime; */ +/* IDL: uint64 o_blocks; */ +/* IDL: uint64 o_grant; */ +/* IDL: uint32 o_blksize; */ +/* IDL: uint32 o_mode; */ +/* IDL: uint32 o_uid; */ +/* IDL: uint32 o_gid; */ +/* IDL: uint32 o_flags; */ +/* IDL: uint32 o_nlink; */ +/* IDL: uint32 o_generation; */ +/* IDL: uint32 o_misc; */ +/* IDL: uint32 o_easize; */ +/* IDL: uint32 o_mds; */ +/* IDL: uint32 o_stripe_idx; */ +/* IDL: uint32 o_padding_1; */ +/* IDL: struct lustre_handle { */ +/* IDL: } o_handle; */ +/* IDL: struct llog_cookie { */ +/* IDL: } o_lcookie; */ +/* IDL: uint64 o_padding_2; */ +/* IDL: uint64 o_padding_3; */ +/* IDL: uint64 o_padding_4; */ +/* IDL: uint64 o_padding_5; */ +/* IDL: uint64 o_padding_6; */ +/* IDL: } */ + +static int +lustre_dissect_element_obdo_o_valid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_valid); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_id); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_gr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_gr); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_fid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_fid); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_size); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_mtime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_obdo_o_mtime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_obdo_o_atime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_obdo_o_atime, tvb, offset, 8, &ns ); + offset+=8; + return offset; + +} + +static int +lustre_dissect_element_obdo_o_ctime(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + nstime_t ns; + /* timestamp */ + ns.secs = tvb_get_letohl(tvb,offset); + ns.nsecs=0; + proto_tree_add_time(tree, hf_lustre_obdo_o_ctime, tvb, offset, 8, &ns ); + offset+=8; + return offset; +} + +static int +lustre_dissect_element_obdo_o_blocks(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_blocks); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_grant(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_grant); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_blksize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_blksize); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_mode(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_mode); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_uid); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_gid); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_flags); + /* TODO rajouter ça , faire une fonction générique qui s'occupe de tous les flags d'un tableau. */ + /* LOBDFlags = {*/ + /*0x00000001 : "OBD_FL_INLINEDATA",*/ + /*0x00000002 : "OBD_FL_OBDMDEXISTS",*/ + /*0x00000004 : "OBD_FL_DELORPHAN",*/ + /*0x00000008 : "OBD_FL_NORPC",*/ + /*0x00000010 : "OBD_FL_IDONLY",*/ + /*0x00000020 : "OBD_FL_RECREATE_OBJS",*/ + /*0x00000040 : "OBD_FL_DEBUG_CHECK",*/ + /*0x00000100 : "OBD_FL_NO_USRQUOTA",*/ + /*0x00000200 : "OBD_FL_NO_GRPQUOTA",*/ + /*0x00000400 : "OBD_FL_CREATE_CROW",*/ + /*0x00000800 : "OBD_FL_TRUNCLOCK",*/ + //} + return offset; +} + +static int +lustre_dissect_element_obdo_o_nlink(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_nlink); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_generation(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_generation); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_misc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_misc); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_easize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_easize); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_mds(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_mds); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_stripe_idx(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_stripe_idx); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_padding_1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_obdo_o_padding_1); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_obdo_o_handle); + return offset; +} + +static int +lustre_dissect_element_obdo_o_lcookie(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_llog_cookie(tvb,offset,pinfo,tree,hf_lustre_obdo_o_lcookie); + return offset; +} + +static int +lustre_dissect_element_obdo_o_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_padding_2); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_padding_3); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_padding_4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_padding_4); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_padding_5(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_padding_5); + + return offset; +} + +static int +lustre_dissect_element_obdo_o_padding_6(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_obdo_o_padding_6); + + return offset; +} + +int +lustre_dissect_struct_obdo(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_obdo); + } + + offset=lustre_dissect_element_obdo_o_valid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_gr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_fid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_size(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_mtime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_atime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_ctime(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_blocks(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_grant(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_blksize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_mode(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_uid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_gid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_nlink(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_generation(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_misc(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_easize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_mds(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_stripe_idx(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_padding_1(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_handle(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_lcookie(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_padding_2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_padding_3(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_padding_4(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_padding_5(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_obdo_o_padding_6(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + +/* IDL: struct ost_body { */ +/* IDL: struct obdo { */ +/* IDL: } oa; */ +/* IDL: } */ + +static int +lustre_dissect_element_ost_body_oa(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_obdo(tvb,offset,pinfo,tree,hf_lustre_ost_body_oa); + return offset; +} + +int +lustre_dissect_struct_ost_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_ost_body); + } + + offset=lustre_dissect_element_ost_body_oa(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* TODO : find when this Structure appear on the wire */ +/* IDL: struct qunit_data { */ +/* IDL: uint32 qd_id; */ +/* IDL: uint32 qd_flags; */ +/* IDL: uint64 qd_count; */ +/* IDL: uint64 qd_qunit; */ +/* IDL: uint64 padding; */ +/* IDL: } */ + +static int +lustre_dissect_element_qunit_data_qd_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_qd_id); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_qd_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_qd_flags); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_qd_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_qunit_data_qd_count); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_qd_qunit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_qunit_data_qd_qunit); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_qunit_data_padding); + + return offset; +} + +int +lustre_dissect_struct_qunit_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_qunit_data); + } + + offset=lustre_dissect_element_qunit_data_qd_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_qd_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_qd_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_qd_qunit(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_padding(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* TODO : find when this Structure appear on the wire */ +/* IDL: struct qunit_data_old2 { */ +/* IDL: uint32 qd_id; */ +/* IDL: uint32 qd_flags; */ +/* IDL: uint64 qd_count; */ +/* IDL: } */ + +static int +lustre_dissect_element_qunit_data_old2_qd_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_old2_qd_id); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_old2_qd_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_old2_qd_flags); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_old2_qd_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_qunit_data_old2_qd_count); + + return offset; +} + +int +lustre_dissect_struct_qunit_data_old2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_qunit_data_old2); + } + + offset=lustre_dissect_element_qunit_data_old2_qd_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_old2_qd_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_old2_qd_count(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +/* TODO : find when this Structure appear on the wire */ +/* IDL: struct qunit_data_old { */ +/* IDL: uint32 qd_id; */ +/* IDL: uint32 qd_type; */ +/* IDL: uint32 qd_count; */ +/* IDL: uint32 qd_isblk; */ +/* IDL: } */ + +static int +lustre_dissect_element_qunit_data_old_qd_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_old_qd_id); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_old_qd_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_old_qd_type); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_old_qd_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_old_qd_count); + + return offset; +} + +static int +lustre_dissect_element_qunit_data_old_qd_isblk(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_qunit_data_old_qd_isblk); + + return offset; +} + +int +lustre_dissect_struct_qunit_data_old(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + + old_offset=offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_qunit_data_old); + } + + offset=lustre_dissect_element_qunit_data_old_qd_id(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_old_qd_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_old_qd_count(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_qunit_data_old_qd_isblk(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +/* ------------------------------------------------------------------------- */ +/* dissect string . + * the length of the string is the current buflen + * @tvb the packet buff + * @offset the current offset + * @pinfo + * @parent_tree + * @hf_index : the corresponding header field + * @buf_num : the corresponding bufnumber of the string (we use it to + * determine the string length), must respect : 0<bufnum<=bufmax_in_paquet + */ +static int +lustre_dissect_element_string (tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num) +{ + proto_item *item = NULL; + + int old_offset; + guint32 string_len; + + old_offset=offset; + + // if (parent_tree) { item = proto_tree_add_item(parent_tree, hf_index, tvb, + // offset, -1, TRUE); // tree = proto_item_add_subtree(item, + // ett_lustre); } + + if(buf_num+1>LUSTRE_BUFCOUNT) + return offset; + + string_len = tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF + 4 * buf_num) ; /* 4 because a buflen is on a guint32 */ + proto_tree_add_item(parent_tree, hf_index, tvb, offset, string_len, TRUE); + if(string_len>1) + display_info_fstr(parent_tree, pinfo->cinfo, COL_INFO, " filename : %s", tvb_get_string(tvb,offset,string_len) ); + + offset+=string_len; + proto_item_set_len(item, offset-old_offset); + offset=add_extra_padding(tvb,offset,pinfo,parent_tree); /* after a string we must be aligned to 8 bytes. */ + + + return offset; +} + +/* ------------------------------------------------------------------------- */ +/* dissect raw data */ +static int +lustre_dissect_element_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_num) +{ + 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 + 4 * buf_num) ; /* 4 because a buflen is on a guint32 */ + 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; +} +/* ------------------------------------------------------------------------ */ + + +static int reint_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_) +{ + guint32 opcode ; + + opcode = tvb_get_letohl(tvb,offset); + + switch(opcode){ + case REINT_SETATTR: + /* [eadata][cookie_data][ldlm_request] */ + offset=lustre_dissect_struct_mds_rec_create(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create); + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, + hf_lustre_ldlm_request) ; + break; + case REINT_CREATE : + /* [rec_create][filename][tgt.. à 0 pour l'instant][ldlm_request] */ + offset=lustre_dissect_struct_mds_rec_create(tvb, offset, pinfo, tree, hf_lustre_mds_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) ; + break; + case REINT_LINK : + /*[mds_rec_link][filename][ldlm_req] */ + offset=lustre_dissect_struct_mds_rec_link(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link); + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, + hf_lustre_ldlm_request) ; + /*TODO : need to be check*/ + break; + case REINT_UNLINK : /* mds_unlink_unpack : [mds_rec_unlink][filename][ldlm_req] */ + /* [mds_rec_unlink][filename][ldlm_req][..]*/ + offset=lustre_dissect_struct_mds_rec_unlink(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink); + offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_REQ_REC_OFF+1); + if ( (tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF +2))) == 112) /* TODO : ugly .. but + for now we have to do this */ + offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl); + else + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ; + + break; + case REINT_RENAME : /*mds_rename_unpack : [mds_rec_rename][filename source][filename target_name][ldlm_request] */ + offset=lustre_dissect_struct_mds_rec_rename(tvb, offset, pinfo, tree, hf_lustre_mds_rec_link); + 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) ; + break; + case REINT_OPEN : /* [rec_create][filename][eadata] */ + offset=lustre_dissect_struct_mds_rec_create(tvb, offset, pinfo, tree, hf_lustre_mds_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 */ + break; + default: + break; + + } + + return offset ; +} + + +/* dissect a connect message */ +static int +lustre_dissect_generic_connect(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + /*TODO : add a cuuid and target uid */ + offset=lustre_dissect_struct_obd_uuid(tvb, offset, pinfo, tree, hf_lustre_obd_uuid); + offset=lustre_dissect_struct_obd_uuid(tvb, offset, pinfo, tree, hf_lustre_obd_uuid); + offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_mds_body_handle); + offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data); + return offset; +} + +static int +lustre_ost_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type) +{ + guint32 i ; + + switch (opc){ + case OST_REPLY: /* obsolete so nothing */ + break; + case OST_GETATTR: + offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ; + break; + case OST_SETATTR: + offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ; + 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) ; + if(pb_type==PTL_RPC_MSG_REQUEST){ + 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_niobuf_remote); + } + 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_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 */ + 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); + } + break; + case OST_CREATE: + offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ; + 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 */ + 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); + } + 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] */ + offset=lustre_dissect_generic_connect(tvb,offset,pinfo,tree); + if (pb_type==PTL_RPC_MSG_REPLY) + offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data); + break; + case OST_DISCONNECT: /* [nothing] */ + break; + case OST_PUNCH: /* [ost_body] */ + offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ; + 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) ; + break; + case OST_SYNC: + /*[ost_body] in both case */ + offset=lustre_dissect_struct_ost_body(tvb, offset, pinfo, tree, hf_lustre_ost_body) ; + 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_val, LUSTRE_REQ_REC_OFF+1); /* val */ + } + /* if Key = "evict_by_nid" --> need to be process.. TODO */ + break; + case OST_QUOTACHECK: + if(pb_type==PTL_RPC_MSG_REQUEST) + offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl) ; + /* nothing in reply */ + break; + case OST_QUOTACTL: + /*[obd_quotactl in both case]*/ + offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl) ; + case OST_QUOTA_ADJUST_QUNIT: + /* [quota_adjust_qunit] in both case ? */ + offset=lustre_dissect_struct_quota_adjust_qunit(tvb, offset, pinfo, tree, hf_lustre_quota_adjust_qunit) ; + }; + + return offset; +} + +static int +lustre_mds_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type) +{ + switch (opc){ + case MDS_DISCONNECT: + /*[nothing]*/ + break; + case MDS_GETSTATUS: + /*[mds body]*/ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + break; + case MDS_SETXATTR: + if(pb_type==PTL_RPC_MSG_REQUEST) + /* [mds body] */ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + /*if(reply) : [nothing]*/ + break; + case MDS_GETXATTR: + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_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]*/ + 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_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + /* TODO [ something ??? ] */ + break; + case MDS_GETATTR_NAME: + if(pb_type==PTL_RPC_MSG_REQUEST) + /*[mds_body]*/ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + /*[nothing in reply]*/ + break; + case MDS_DONE_WRITING: + /*[mds_body]*/ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + break; + case MDS_PIN: /* repbody.. */ + /*[mds_body]*/ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + break; + case MDS_SYNC: + /*[mds_body]*/ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + break; + + case MDS_CLOSE: /* TODO : check the corresponding structure in lustre code */ + if(pb_type==PTL_RPC_MSG_REQUEST) + { /* [mds_body] [lov_mds_md][log_cookie] */ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + if(LUSTRE_BUFCOUNT>=3) + offset=lustre_dissect_struct_lov_mds_md_v1(tvb,offset,pinfo,tree,hf_lustre_lov_mds_md_v1); + if(LUSTRE_BUFCOUNT>=4) + if( tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+2)) > 0) + offset=lustre_dissect_struct_llog_cookie(tvb,offset,pinfo,tree,hf_lustre_llog_cookie); + } + if(pb_type==PTL_RPC_MSG_REPLY) + { /* [mds_body][md][cookie] TODO : check that (reread the code about shrink in lustre) */ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_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_struct_llog_cookie(tvb,offset,pinfo,tree,hf_lustre_llog_cookie); + } + break; + + case MDS_STATFS: + if(pb_type==PTL_RPC_MSG_REPLY) + /*[obd_statfs]*/ + offset=lustre_dissect_struct_obd_statfs(tvb, offset, pinfo, tree, hf_lustre_obd_statfs) ; + /*in request : [nothing]*/ + break; + + case MDS_READPAGE: + /* [mds_body] but with some different interpration, need to modify the hf : TODO */ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + break; + + case MDS_REINT: + /* the structure depend on the intent_opcode */ + if(pb_type==PTL_RPC_MSG_REQUEST) + offset=reint_opcode_process(tvb, offset, pinfo, tree); + if(pb_type==PTL_RPC_MSG_REPLY) + { + /*[mds_body][??][llog_logid_rec] */ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + if(tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+1)) > 0){ + /* OPEN, RENAME, and UNLINK */ + if(tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+1)) > 0){ /* rec_unlink or rec_rename */ + offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata, + LUSTRE_REQ_REC_OFF+1); // replace by eadata TODO TODO // + if(tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*(LUSTRE_REQ_REC_OFF+2)) > 0) /* with unlink or rename we have 4 buffers handler.c line 1691*/ + offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, + hf_lustre_mds_xattr_eadata, LUSTRE_REQ_REC_OFF+2); // replace withe eadata TODO TODO // + } + } + + } + break; + case MDS_SET_INFO: + if(pb_type==PTL_RPC_MSG_REQUEST){ + /*[key][val]*/ + 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 */ + //offset=add_extra_padding(tvb,offset,pinfo,tree); + } + /*nothing en reply*/ + break; + case MDS_QUOTACHECK: + /* [obd_quotactl] */ + if(pb_type==PTL_RPC_MSG_REQUEST) + offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl) ; + break; + case MDS_QUOTACTL: + /* [obd_quotactl] in both case*/ + offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl) ; + break; + case MDS_CONNECT: + if (pb_type==PTL_RPC_MSG_REQUEST) /* [targetuuid][clientuuid][lustre_handle][obd_connect_data] */ + offset=lustre_dissect_generic_connect(tvb,offset,pinfo,tree); + if (pb_type==PTL_RPC_MSG_REPLY) /*[obd_connect_data]*/ + offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data); + break; + default: + break; + }; + + return offset; + +} + + +static int +lustre_ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint32 opc _U_, guint32 pb_type) +{ + + switch (opc) + { + case LDLM_ENQUEUE: + /*[ldlm_request] if we have one more buffer it's [intent_opcode] and the opcode give us the + * corresponding intent structure [intent] */ + if(pb_type==PTL_RPC_MSG_REQUEST) + { + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ; + if (LUSTRE_BUFCOUNT>=3) + offset=lustre_dissect_struct_ldlm_intent(tvb, offset, pinfo, tree, hf_lustre_ldlm_intent); + } + if(pb_type==PTL_RPC_MSG_REPLY) + { + guint32 ldlm_type; + guint32 magic; + /*[ldlm_reply]*/ + offset=lustre_dissect_struct_ldlm_reply(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply,&ldlm_type) ; + if(LUSTRE_BUFCOUNT>2 && (tvb_get_letohl(tvb,LUSTRE_BUFLEN_OFF+4*2) == 40)) + /* TODO :this code need to be check and test, the lustre corresponding code is'nt explicit, so + * not sure to have this buffer, but in example it works fine + */ + offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree, hf_lustre_ost_lvb); + else + if(LUSTRE_BUFCOUNT>2) + { + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_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; + case LOV_MAGIC_JOIN: + offset=lustre_dissect_struct_lov_mds_md_join(tvb, offset, pinfo, tree, + hf_lustre_lov_mds_md_join); + break; + default: + offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, + hf_lustre_extra_padding, LUSTRE_DLM_INTENT_REC_OFF); + break; + }; + } + } + } + break; + + case LDLM_CONVERT: + if(pb_type==PTL_RPC_MSG_REQUEST) + /*[ldlm_request]*/ + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ; + if(pb_type==PTL_RPC_MSG_REPLY) + /*[ldlm_reply]*/ + offset=lustre_dissect_struct_ldlm_reply(tvb, offset, pinfo, tree, hf_lustre_ldlm_reply, NULL) ; + break; + + case LDLM_CANCEL: + if(pb_type==PTL_RPC_MSG_REQUEST) + /*[ldlm_request]*/ + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ; + /*[nothing en reply]*/ + break; + + case LDLM_BL_CALLBACK: /* TODO : check the corresponding code in lustre*/ + if(pb_type==PTL_RPC_MSG_REQUEST) + /*[ldlm_request]*/ + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ; + break; + + case LDLM_CP_CALLBACK: + if(pb_type==PTL_RPC_MSG_REQUEST){ + /*[ldlm_request] if the third buffer exist we have [lvb data] so it's [ost_lvb] : TODO : + * check that */ + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ; + if(LUSTRE_BUFCOUNT>=3) + offset=lustre_dissect_struct_ost_lvb(tvb,offset,pinfo,tree,hf_lustre_ost_lvb); + } + /*reply : [nothing] */ + break; + + case LDLM_GL_CALLBACK: + if(pb_type==PTL_RPC_MSG_REQUEST) + /*[ldlm_request] */ + offset=lustre_dissect_struct_ldlm_request(tvb, offset, pinfo, tree, hf_lustre_ldlm_request) ; + else + if(pb_type==PTL_RPC_MSG_REPLY) + /*reply : [ost_lvb] <-- need to be check*/ + offset=lustre_dissect_struct_ost_lvb(tvb, offset, pinfo, tree, hf_lustre_ost_lvb); + break; + + default : + break; + } + return offset; +} + +static int +lustre_mgs_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 MGS_CONNECT : + if (pb_type==PTL_RPC_MSG_REQUEST) /* [targetuuid][clientuuid][lustre_handle][obd_connect_data] */ + offset=lustre_dissect_generic_connect(tvb,offset,pinfo,tree); + if (pb_type==PTL_RPC_MSG_REPLY) /*[obd_connect_data]*/ + offset=lustre_dissect_struct_obd_connect_data(tvb,offset,pinfo,tree,hf_lustre_obd_connect_data); + break; + case MGS_DISCONNECT : + /*[nothing]*/ + break; + case MGS_EXCEPTION : /* node died, etc. */ + /*[nothing]*/ + break; + case MGS_TARGET_REG: + /*[mgs_target_info], mgs_handler.c mgs_handle_target_reg() called whenever a target startup*/ + offset=lustre_dissect_struct_mgs_target_info(tvb, offset, pinfo, tree, hf_lustre_mgs_target_info); + break; + case MGS_TARGET_DEL: + /*[nothing]*/ + break; + case MGS_SET_INFO: + /*[mgs_send_param], mgs_set_info_rpc()*/ + offset=lustre_dissect_struct_mgs_send_param(tvb,offset,pinfo,tree,hf_lustre_mgs_send_param); + break; + default: + break; + }; + return offset; +} + +static int +lustre_odb_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 OBD_PING : + /*[nothing]*/ + break; + case OBD_LOG_CANCEL: + /*[nothing]*/ + break; + case OBD_QC_CALLBACK: + if(pb_type==PTL_RPC_MSG_REQUEST) + offset=lustre_dissect_struct_obd_quotactl(tvb, offset, pinfo, tree, hf_lustre_obd_quotactl); + /*if (request) : [nothing]*/ + break; + default: + break; + }; + return offset; +} + +static int +lustre_llog_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 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 (LUSTRE_BUFCOUNT>2) + offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_llogd_name, + LUSTRE_REQ_REC_OFF+1); + break; + case LLOG_ORIGIN_HANDLE_NEXT_BLOCK :/* in handler.c */ + /* [llogd_body][???] + * 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 ); + 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); + if(LUSTRE_BUFCOUNT>2) + offset=lustre_dissect_struct_llog_log_hdr(tvb, offset, pinfo, tree, + hf_lustre_llogd_log_hdr); + } + if(pb_type==PTL_RPC_MSG_REPLY) /* [llog_log_hdr] */ + offset=lustre_dissect_struct_llog_log_hdr(tvb, offset, pinfo, tree, + hf_lustre_llogd_log_hdr); + break; + case LLOG_ORIGIN_HANDLE_WRITE_REC : /* I think this is obsolete */ + /*[nothing]*/ + break; + case LLOG_ORIGIN_HANDLE_CLOSE :/* handler.c */ + /*[nothing]*/ + break; + case LLOG_ORIGIN_CONNECT : /* ost_handler.c */ + /*[nothing]*/ + 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(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); + } + 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 ); + /* TODO TODO : check if it's note a catid */ + break; + case LLOG_ORIGIN_HANDLE_PREV_BLOCK : /* in handler.c */ + /* [llogd_body] in both case */ + offset=lustre_dissect_struct_llogd_body(tvb, offset, pinfo, tree, hf_lustre_llogd_body); + 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 ); + break; + case LLOG_ORIGIN_HANDLE_DESTROY : /* in handler.c */ + /*[llogd_body] in both case*/ + offset=lustre_dissect_struct_llogd_body(tvb, offset, pinfo, tree, hf_lustre_llogd_body); + break; + default: + 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) +{ + if (opc <= OST_LAST_OPC) /* OST opcodes */ + offset=lustre_ost_opcode_process( tvb , offset ,pinfo , tree , opc , pb_type) ; + + if ( (opc >= MDS_FIRST_OPC) && (opc < MDS_LAST_OPC )) /* MDS opcodes */ + offset=lustre_mds_opcode_process( tvb , offset ,pinfo , tree , opc , pb_type) ; + + if ( (opc >= LDLM_FIRST_OPC) && (opc < LDLM_LAST_OPC) ) /*LDLM Opcodes*/ + offset=lustre_ldlm_opcode_process( tvb , offset ,pinfo , tree , opc , pb_type) ; + + if( (opc>= MGS_FIRST_OPC) && (opc <= MGS_LAST_OPC)) /* MGS Opcodes */ + offset=lustre_mgs_opcode_process( tvb , offset ,pinfo , tree , opc , pb_type) ; + + if( (opc>= OBD_FIRST_OPC) && (opc<=OBD_LAST_OPC)) /* ODB Opcodes */ + offset=lustre_odb_opcode_process( tvb , offset ,pinfo , tree , opc , pb_type) ; + + if( (opc>=LLOG_FIRST_OPC) && (opc<=LLOG_LAST_OPC)) /* LLOG Opcodes */ + offset=lustre_llog_opcode_process( tvb , offset ,pinfo , tree , opc , pb_type) ; + + return offset ; +} + +/* ----------------------------------------------- */ +/* add an extra padding to be aligned to 8bytes */ +static int +add_extra_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_) +{ + guint32 padding_len; + + padding_len = (8- offset%8)%8; + if(padding_len){ + proto_tree_add_item(tree, hf_lustre_extra_padding , tvb, offset, padding_len, TRUE); + offset+=padding_len; + } + return offset; +} +/* ----------------------------------------------- */ + +static int +ldlm_opcode_process(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree * tree _U_, guint64 intent_opc _U_) +{ + /* all corresponding code is in mdc_locks.c in function mdc_enqueue() */ + /* if 0x0003 we have CREAT + OPEN + */ + if (intent_opc & IT_OPEN) { + /* mdc_intent_open_pack(), d'où [opcode][mdc_rec_create][name][eada] */ + offset=lustre_dissect_struct_mds_rec_create(tvb, offset, pinfo, tree, hf_lustre_mds_rec_create); + offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1); + offset=lustre_dissect_element_data(tvb, offset, pinfo, tree, hf_lustre_mds_xattr_eadata, + LUSTRE_DLM_INTENT_REC_OFF+2); /* TODO : replace hf with eada hf */ + + } + if (intent_opc & IT_UNLINK){ + /* mdc_intent_unlink_pack(), d'où [opcode][mds_rec_unlink][name] */ + offset=lustre_dissect_struct_mds_rec_unlink(tvb, offset, pinfo, tree, hf_lustre_mds_rec_unlink); + offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1); + } + if (intent_opc & IT_GETATTR){ + /* mdc_intent_lookup_pack, d'où [mds_body][name] */ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1); + } + + if (intent_opc & IT_LOOKUP){ + /* mdc_intent_lookup_pack, d'où [mds_body][name] */ + offset=lustre_dissect_struct_mds_body(tvb, offset, pinfo, tree, hf_lustre_mds_body) ; + offset=lustre_dissect_element_string(tvb, offset, pinfo, tree, hf_lustre_reint_name, LUSTRE_DLM_INTENT_REC_OFF+1); + } + return offset; +} + + + +/* ----------------------------------------------- */ +/* function to test if the packet is entirely dissected add BUG in PROTOCOL COL when it's not*/ +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); + + + for (i=0;i<LUSTRE_BUFCOUNT;i++) + somme_buflen += tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF + + 4 * i ) + (8- tvb_get_letohl(tvb, LUSTRE_BUFLEN_OFF+4 * i)%8)%8; /* we add the + corresponding + extra padding, + because extra + padding isn't + count in buflen + */ + + if(val_offset!=somme_buflen){ + /*g_print("somme_buflen=%d, val_offset = %d \n",somme_buflen,val_offset);*/ + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_str(pinfo->cinfo, COL_PROTOCOL, "BUG"); + } + } + +} + + +/* IDL: struct lustre_msg_v1 { */ +/* IDL: struct lustre_handle { */ +/* IDL: } lm_handle; */ +/* IDL: uint32 lm_magic; */ +/* IDL: uint32 lm_type; */ +/* IDL: uint32 lm_version; */ +/* IDL: uint32 lm_opc; */ +/* IDL: uint64 lm_last_xid; */ +/* IDL: uint64 lm_last_committed; */ +/* IDL: uint64 lm_transno; */ +/* IDL: uint32 lm_status; */ +/* IDL: uint32 lm_flags; */ +/* IDL: uint32 lm_conn_cnt; */ +/* IDL: uint32 lm_bufcount; */ +/* IDL: uint32 lm_buflens[0]; */ +/* IDL: } */ + + +static int +lustre_dissect_element_msg_v1_lm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + /*TODO : replace with a v1 handle*/ + offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_lustre_msg_v1_lm_handle); + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_magic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_magic); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_type); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_version); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_opc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_opc); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_last_xid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_last_xid); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_last_committed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_last_committed); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_transno(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_transno); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_status); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_flags); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_conn_cnt(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_conn_cnt); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_bufcount(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_bufcount); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_buflens_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v1_lm_buflens); + + return offset; +} + +static int +lustre_dissect_element_msg_v1_lm_buflens(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + guint32 bufcount ; + gboolean extra_padding ; + guint i; + + bufcount=tvb_get_letohl(tvb, offset-4); /* TODO : replace with a macro */ + + if (bufcount & 1) /* we add an extra padding if bufcount is odd */ + extra_padding = 1 ; + else + extra_padding = 0 ; + + for (i=0;i<bufcount;i++) { + offset=lustre_dissect_element_msg_v1_lm_buflens_(tvb, offset, pinfo, tree); + } + if (extra_padding) + { + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + } + + return offset; +} + + + +int +lustre_dissect_struct_msg_v1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + guint32 opc ; /* opcode */ + guint32 pb_type; /* type : {request, reply, error} */ + + + + old_offset=offset; + tree=parent_tree; + // if (parent_tree) { + // item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + // tree = proto_item_add_subtree(item, ett_lustre_lustre_msg_v1); + // } + + offset=lustre_dissect_element_msg_v1_lm_handle(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_magic(tvb, offset, pinfo, tree); + + pb_type = tvb_get_letohl(tvb, offset); + offset=lustre_dissect_element_msg_v1_lm_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_version(tvb, offset, pinfo, tree); + opc = tvb_get_letohl(tvb, offset); + offset=lustre_dissect_element_msg_v1_lm_opc(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_last_xid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_last_committed(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_transno(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_status(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_conn_cnt(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_bufcount(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v1_lm_buflens(tvb, offset, pinfo, tree); + + + proto_item_set_len(item, offset-old_offset); + + /* display some nice infos */ + display_info_str(parent_tree, pinfo->cinfo, COL_INFO, val_to_str(opc, lustre_op_codes, "Unknown")); + display_info_fstr(parent_tree, pinfo->cinfo,COL_INFO, " %s ", val_to_str(pb_type, lustre_LMTypes, "Unknown")); + + offset=lustre_opcode_process(tvb, offset, pinfo, tree, opc, pb_type); + + return offset; +} + +/* IDL: struct ptlrpc_body { */ +/* IDL: struct lustre_handle { */ +/* IDL: } pb_handle; */ +/* IDL: uint32 pb_type; */ +/* IDL: uint32 pb_version; */ +/* IDL: uint32 pb_opc; */ +/* IDL: uint32 pb_status; */ +/* IDL: uint64 pb_last_xid; */ +/* IDL: uint64 pb_last_seen; */ +/* IDL: uint64 pb_last_committed; */ +/* IDL: uint64 pb_transno; */ +/* IDL: uint32 pb_flags; */ +/* IDL: uint32 pb_op_flags; */ +/* IDL: uint32 pb_conn_cnt; */ +/* IDL: uint32 pb_timeout; */ +/* IDL: uint32 pb_service_time; */ +/* IDL: uint32 pb_limit; */ +/* IDL: uint64 pb_slv; */ +/* IDL: } */ + +static int +lustre_dissect_element_ptlrpc_body_pb_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=lustre_dissect_struct_handle_cookie(tvb,offset,pinfo,tree,hf_lustre_ptlrpc_body_pb_handle); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_type); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_version); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_opc(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_opc); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_status); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_last_xid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_last_xid); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_last_seen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_last_seen); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_last_committed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_last_committed); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_transno(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_transno); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_flags); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_op_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_op_flags); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_conn_cnt(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_conn_cnt); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_timeout(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_timeout); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_service_time(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_service_time); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_limit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_limit); + + return offset; +} + +static int +lustre_dissect_element_ptlrpc_body_pb_slv(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint64(tvb, offset, pinfo, tree, hf_lustre_ptlrpc_body_pb_slv); + + return offset; +} + +static int +lustre_dissect_struct_ptlrpc_body(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, int hf_index _U_, guint32 buf_len _U_ ) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + guint32 opc, pb_type; + + + old_offset=offset; + + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_lustre_ptlrpc_body); + } + + offset=lustre_dissect_element_ptlrpc_body_pb_handle(tvb, offset, pinfo, tree); + + pb_type = tvb_get_letohl(tvb, offset); + //g_print("msg_v2_lm_type_offset = %d \n" , offset) ; + + offset=lustre_dissect_element_ptlrpc_body_pb_type(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_version(tvb, offset, pinfo, tree); + + // g_print("msg_v2_opcode_offset %d \n", offset); + opc = tvb_get_letohl(tvb, offset); + offset=lustre_dissect_element_ptlrpc_body_pb_opc(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_status(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_last_xid(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_last_seen(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_last_committed(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_transno(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_op_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_conn_cnt(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_timeout(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_service_time(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_limit(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_ptlrpc_body_pb_slv(tvb, offset, pinfo, tree); + + + + proto_item_set_len(item, offset-old_offset); + + /* display some nice infos */ + display_info_str(parent_tree, pinfo->cinfo, COL_INFO, val_to_str(opc, lustre_op_codes, "Unknown")); + display_info_fstr(parent_tree, pinfo->cinfo,COL_INFO, " %s ", val_to_str(pb_type, lustre_LMTypes, "Unknown")); + + /* on utilise parent_tree pour bien distinguer les différents buffers (relatifs à bufcount + buflen), il s'agit d'un choix de présentation */ + offset=lustre_opcode_process(tvb, offset, pinfo, parent_tree, opc, pb_type); + + sanity_check(tvb,pinfo,offset-old_offset); + return offset; +} + + + +/* IDL: struct lustre_msg_v2 { */ +/* IDL: uint32 lm_bufcount; */ +/* IDL: uint32 lm_secflvr; */ +/* IDL: uint32 lm_magic; */ +/* IDL: uint32 lm_repsize; */ +/* IDL: uint32 lm_cksum; */ +/* IDL: uint32 lm_flags; */ +/* IDL: uint32 lm_padding_2; */ +/* IDL: uint32 lm_padding_3; */ +/* IDL: uint32 lm_buflens[0]; */ +/* IDL: } */ + +static int +lustre_dissect_element_msg_v2_lm_bufcount(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + proto_tree_add_item(tree, hf_lustre_lustre_msg_v2_lm_bufcount, tvb, offset, 4, TRUE); + offset += 4 ; + return offset; +} + +static int +lustre_dissect_element_msg_v2_lm_secflvr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_secflvr); + + return offset; +} + +static int +lustre_dissect_element_msg_v2_lm_magic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_magic); + + return offset; +} + +static int +lustre_dissect_element_msg_v2_lm_repsize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_repsize); + + return offset; +} + +static int +lustre_dissect_element_msg_v2_lm_cksum(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_cksum); + + return offset; +} + +static int +lustre_dissect_element_msg_v2_lm_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_flags); + + return offset; +} + +static int +lustre_dissect_element_msg_v2_lm_padding_2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_padding_2); + + return offset; +} + +static int +lustre_dissect_element_msg_v2_lm_padding_3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_padding_3); + + return offset; +} + + + +static int +lustre_dissect_element_msg_v2_lm_buflens_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) +{ + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_lustre_msg_v2_lm_buflens); + + return offset; +} + +int +lustre_dissect_struct_msg_v2(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; + guint32 bufcount ; + int old_offset; + guint32 i ; + guint32 buf_len_offset; + guint32 current_buf_len ; + gboolean extra_padding ; + + + old_offset=offset; + /* to get a light display */ + tree=parent_tree; + // if (parent_tree) { + // item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + // tree = proto_item_add_subtree(item, ett_lustre_lustre_msg_v2); + // } + + bufcount = tvb_get_letohl(tvb,offset); + offset=lustre_dissect_element_msg_v2_lm_bufcount(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v2_lm_secflvr(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v2_lm_magic(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v2_lm_repsize(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v2_lm_cksum(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v2_lm_flags(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v2_lm_padding_2(tvb, offset, pinfo, tree); + + offset=lustre_dissect_element_msg_v2_lm_padding_3(tvb, offset, pinfo, tree); + + + + if (bufcount & 1) /* we add an extra padding if bufcount is odd */ + extra_padding = 1 ; + else + extra_padding = 0 ; + + buf_len_offset=offset ; + for (i=0;i<bufcount;i++) { + offset=lustre_dissect_element_msg_v2_lm_buflens_(tvb, offset, pinfo, tree); + } + + if (extra_padding) + { + offset=dissect_uint32(tvb, offset, pinfo, tree, hf_lustre_extra_padding); + } + + + + current_buf_len = tvb_get_letohl(tvb, buf_len_offset); + offset=lustre_dissect_struct_ptlrpc_body(tvb,offset, pinfo, tree, hf_lustre_ptlrpc_body_pb, current_buf_len); + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + + + +static void +dissect_lustre(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + if (check_col(pinfo->cinfo, COL_PROTOCOL)) + col_set_str(pinfo->cinfo, COL_PROTOCOL, "Lustre"); + + /*light display*/ + if (check_col(pinfo->cinfo, COL_INFO)) + col_set_str(pinfo->cinfo, COL_INFO, ""); + /* guint32 magic_number ; */ + /* magic_number = tvb_get_letohl(tvb, LUSTRE_MAGIC_OFFSET); */ + /* switch (magic_number)*/ + /* {*/ + /* case LUSTRE_MSG_MAGIC_V1:*/ + /* col_append_fstr(pinfo->cinfo, COL_INFO, " V1 ");*/ + /* break;*/ + /* case LUSTRE_MSG_MAGIC_V2:*/ + /* col_append_fstr(pinfo->cinfo, COL_INFO, " V2 ");*/ + /* break;*/ + /* default:*/ + /* break;*/ + /* }*/ + + if (tree) { + + guint32 magic_number ; + guint32 offset; + 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 ) ; + 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 ) ; + break; + default: + break; + } + + } +} + +void proto_register_dcerpc_lustre(void) +{ + static hf_register_info hf[] = { + { &hf_lustre_mds_body_ctime, + { "Ctime", "lustre.mds_body.ctime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_fid1, + { "Fid1", "lustre.mds_body.fid1", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_nlink, + { "Nlink", "lustre.mds_body.nlink", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_flags, + { "Flags", "lustre.mds_body.flags", FT_UINT32, BASE_HEX, VALS(lustre_mds_flags_vals) , 0, "", HFILL }}, + { &hf_lustre_mds_body_fsgid, + { "Fsgid", "lustre.mds_body.fsgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_mtime, + { "Mtime", "lustre.mds_body.mtime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_uid, + { "Uid", "lustre.mds_body.uid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_mode, + { "Mode", "lustre.mds_body.mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_max_cookiesize, + { "Max Cookiesize", "lustre.mds_body.max_cookiesize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_io_epoch, + { "Io Epoch", "lustre.mds_body.io_epoch", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_ino, + { "Ino", "lustre.mds_body.ino", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_fid2, + { "Fid2", "lustre.mds_body.fid2", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_padding_4, + { "Padding 4", "lustre.mds_body.padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_aclsize, + { "Aclsize", "lustre.mds_body.aclsize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_valid, + { "Valid", "lustre.mds_body.valid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_generation, + { "Generation", "lustre.mds_body.generation", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_atime, + { "Atime", "lustre.mds_body.atime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_handle, + { "Handle", "lustre.mds_body.handle", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_max_mdsize, + { "Max Mdsize", "lustre.mds_body.max_mdsize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_rdev, + { "Rdev", "lustre.mds_body.rdev", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_blocks, + { "Blocks", "lustre.mds_body.blocks", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_fsuid, + { "Fsuid", "lustre.mds_body.fsuid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_gid, + { "Gid", "lustre.mds_body.gid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_handle_cookie, + { "Cookie", "lustre.lustre_handle.cookie", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_suppgid, + { "Suppgid", "lustre.mds_body.suppgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_size, + { "Size", "lustre.mds_body.size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_eadatasize, + { "Eadatasize", "lustre.mds_body.eadatasize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_body_capability, + { "Capability", "lustre.mds_body.capability", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_last_committed, + { "Pb Last Committed", "lustre.ptlrpc_body.pb_last_committed", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_version, + { "Pb Version", "lustre.ptlrpc_body.pb_version", FT_UINT32, BASE_DEC, NULL, ~LUSTRE_VERSION_MASK, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_bufcount, + { "Lm Bufcount", "lustre.lustre_msg_v1.lm_bufcount", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_ioobj_ioo_id, + { "Ioo Id", "lustre.obd_ioobj.ioo_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_slv, + { "Pb Slv", "lustre.ptlrpc_body.pb_slv", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_handle, + { "Lm Handle", "lustre.lustre_msg_v1.lm_handle", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_ost_lvb_lvb_atime, + { "Lvb Atime", "lustre.ost_lvb.lvb_atime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_timeout, + { "Pb Timeout", "lustre.ptlrpc_body.pb_timeout", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_bavail, + { "Os Bavail", "lustre.obd_statfs.os_bavail", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_bsize, + { "Os Bsize", "lustre.obd_statfs.os_bsize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_repsize, + { "Lm Repsize", "lustre.lustre_msg_v2.lm_repsize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1_lmm_stripe_size, + { "Lmm Stripe Size", "lustre.lov_mds_md_v1.lmm_stripe_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_last_xid, + { "Lm Last Xid", "lustre.lustre_msg_v1.lm_last_xid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ll_fid_f_type, + { "F Type", "lustre.ll_fid.f_type", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_cksum, + { "Lm Cksum", "lustre.lustre_msg_v2.lm_cksum", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_buflens, + { "Lm Buflens", "lustre.lustre_msg_v2.lm_buflens", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_status, + { "Lm Status", "lustre.lustre_msg_v1.lm_status", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_type, + { "Lm Type", "lustre.lustre_msg_v1.lm_type", FT_UINT32, BASE_DEC, VALS(lustre_LMTypes), 0, "", HFILL }}, + { &hf_lustre_niobuf_remote_len, + { "Len", "lustre.niobuf_remote.len", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1_lmm_magic, + { "Lmm Magic", "lustre.lov_mds_md_v1.lmm_magic", FT_UINT32, BASE_HEX, VALS(lustre_lov_magic) , 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_op_flags, + { "Pb Op Flags", "lustre.ptlrpc_body.pb_op_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ost_lvb_lvb_ctime, + { "Lvb Ctime", "lustre.ost_lvb.lvb_ctime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_type, + { "Pb Type", "lustre.ptlrpc_body.pb_type", FT_UINT32, BASE_DEC, VALS(lustre_LMTypes), 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_nllg, + { "Ocd Nllg", "lustre.obd_connect_data.ocd_nllg", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_nllu, + { "Ocd Nllu", "lustre.obd_connect_data.ocd_nllu", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ll_fid_generation, + { "Generation", "lustre.ll_fid.generation", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ost_lvb_lvb_mtime, + { "Lvb Mtime", "lustre.ost_lvb.lvb_mtime",FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_ibits_known, + { "Ocd Ibits Known", "lustre.obd_connect_data.ocd_ibits_known", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_padding_3, + { "Lm Padding 3", "lustre.lustre_msg_v2.lm_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_flags, + { "Pb Flags", "lustre.ptlrpc_body.pb_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare4, + { "Os Spare4", "lustre.obd_statfs.os_spare4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_group, + { "Ocd Group", "lustre.obd_connect_data.ocd_group", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_ost_data_v1_l_object_gr, + { "L Object Gr", "lustre.lov_ost_data_v1.l_object_gr", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1_lmm_object_gr, + { "Lmm Object Gr", "lustre.lov_mds_md_v1.lmm_object_gr", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_brw_size, + { "Ocd Brw Size", "lustre.obd_connect_data.ocd_brw_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_limit, + { "Pb Limit", "lustre.ptlrpc_body.pb_limit", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_maxbytes, + { "Os Maxbytes", "lustre.obd_statfs.os_maxbytes", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare5, + { "Os Spare5", "lustre.obd_statfs.os_spare5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_flags, + { "Lm Flags", "lustre.lustre_msg_v2.lm_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_ffree, + { "Os Ffree", "lustre.obd_statfs.os_ffree", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_files, + { "Os Files", "lustre.obd_statfs.os_files", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1_lmm_stripe_count, + { "Lmm Stripe Count", "lustre.lov_mds_md_v1.lmm_stripe_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_flags, + { "Lm Flags", "lustre.lustre_msg_v1.lm_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_last_committed, + { "Lm Last Committed", "lustre.lustre_msg_v1.lm_last_committed", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare9, + { "Os Spare9", "lustre.obd_statfs.os_spare9", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_index, + { "Ocd Index", "lustre.obd_connect_data.ocd_index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_buflens, + { "Lm Buflens", "lustre.lustre_msg_v1.lm_buflens", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare1, + { "Os Spare1", "lustre.obd_statfs.os_spare1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare8, + { "Os Spare8", "lustre.obd_statfs.os_spare8", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_conn_cnt, + { "Lm Conn Cnt", "lustre.lustre_msg_v1.lm_conn_cnt", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_transno, + { "Pb Transno", "lustre.ptlrpc_body.pb_transno", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_service_time, + { "Pb Service Time", "lustre.ptlrpc_body.pb_service_time",FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_conn_cnt, + { "Pb Conn Cnt", "lustre.ptlrpc_body.pb_conn_cnt", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_opc, + { "Pb Opc", "lustre.ptlrpc_body.pb_opc", FT_UINT32, BASE_DEC, VALS(lustre_op_codes), 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_connect_flags, + { "Ocd Connect Flags", "lustre.obd_connect_data.ocd_connect_flags", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_ost_data_v1_l_object_id, + { "L Object Id", "lustre.lov_ost_data_v1.l_object_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_ost_data_v1_l_ost_gen, + { "L Ost Gen", "lustre.lov_ost_data_v1.l_ost_gen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_bfree, + { "Os Bfree", "lustre.obd_statfs.os_bfree", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_version, + { "Ocd Version", "lustre.obd_connect_data.ocd_version", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1_lmm_objects, + { "Lmm Objects", "lustre.lov_mds_md_v1.lmm_objects", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_status_req_flags, + { "Flags", "lustre.mds_status_req.flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_namelen, + { "Os Namelen", "lustre.obd_statfs.os_namelen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_blocks, + { "Os Blocks", "lustre.obd_statfs.os_blocks", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_secflvr, + { "Lm Secflvr", "lustre.lustre_msg_v2.lm_secflvr", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_transno, + { "Lm Transno", "lustre.lustre_msg_v1.lm_transno", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1_lmm_pattern, + { "Lmm Pattern", "lustre.lov_mds_md_v1.lmm_pattern", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_opc, + { "Lm Opc", "lustre.lustre_msg_v1.lm_opc", FT_UINT32, BASE_DEC, VALS(lustre_op_codes), 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_grant, + { "Ocd Grant", "lustre.obd_connect_data.ocd_grant", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_ioobj_ioo_bufcnt, + { "Ioo Bufcnt", "lustre.obd_ioobj.ioo_bufcnt", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_version, + { "Lm Version", "lustre.lustre_msg_v1.lm_version", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare7, + { "Os Spare7", "lustre.obd_statfs.os_spare7", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_fsid, + { "Os Fsid", "lustre.obd_statfs.os_fsid", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_cksum_types, + { "Ocd Cksum Types", "lustre.obd_connect_data.ocd_cksum_types", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ost_lvb_lvb_size, + { "Lvb Size", "lustre.ost_lvb.lvb_size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_type, + { "Os Type", "lustre.obd_statfs.os_type", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare6, + { "Os Spare6", "lustre.obd_statfs.os_spare6", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_state, + { "Os State", "lustre.obd_statfs.os_state", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare3, + { "Os Spare3", "lustre.obd_statfs.os_spare3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_magic, + { "Lm Magic", "lustre.lustre_msg_v2.lm_magic", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1_lmm_object_id, + { "Lmm Object Id", "lustre.lov_mds_md_v1.lmm_object_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_last_seen, + { "Pb Last Seen", "lustre.ptlrpc_body.pb_last_seen", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_ioobj_ioo_type, /* TODO : create the corresponding value_string */ + { "Ioo Type", "lustre.obd_ioobj.ioo_type", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_last_xid, + { "Pb Last Xid", "lustre.ptlrpc_body.pb_last_xid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_status, + { "Pb Status", "lustre.ptlrpc_body.pb_status", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_niobuf_remote_flags, + { "Flags", "lustre.niobuf_remote.flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ll_fid_id, + { "Id", "lustre.ll_fid.id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ost_lvb_lvb_blocks, + { "Lvb Blocks", "lustre.ost_lvb.lvb_blocks", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_padding_2, + { "Lm Padding 2", "lustre.lustre_msg_v2.lm_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_padding1, + { "Padding1", "lustre.obd_connect_data.padding1", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_ost_data_v1_l_ost_idx, + { "L Ost Idx", "lustre.lov_ost_data_v1.l_ost_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_padding2, + { "Padding2", "lustre.obd_connect_data.padding2", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_ioobj_ioo_gr, + { "Ioo Gr", "lustre.obd_ioobj.ioo_gr", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_niobuf_remote_offset, + { "Offset", "lustre.niobuf_remote.offset", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_status_req_repbuf, + { "Repbuf", "lustre.mds_status_req.repbuf", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_statfs_os_spare2, + { "Os Spare2", "lustre.obd_statfs.os_spare2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v2_lm_bufcount, + { "Lm Bufcount", "lustre.lustre_msg_v2.lm_bufcount", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb_handle, + { "Pb Handle", "lustre.ptlrpc_body.pb_handle", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_connect_data_ocd_transno, + { "Ocd Transno", "lustre.obd_connect_data.ocd_transno", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lustre_msg_v1_lm_magic, + { "Lm Magic", "lustre.lustre_msg_v1.lm_magic", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ptlrpc_body_pb, + { "ptl rpc", "lustre.ptlrpc_body", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL }}, + { &hf_lustre_mds_body, + { "mds body", "lustre.mds_body", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL }}, + { &hf_lustre_mds_rec_create, + { "mds rec create", "lustre.mds_rec_create", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_mds_rec_link, + { "mds rec link", "lustre.mds_rec_link", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_mds_rec_unlink, + { "mds rec unlink", "lustre.mds_rec_unlink", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + + { &hf_lustre_obd_uuid, + { "obd uid name", "lustre.obd_uid", FT_STRING, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_obd_connect_data , + { "obd connect data", "lustre.obd_connect_data", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + + { &hf_lustre_ldlm_intent, + { "ldlm intent", "lustre.ldlm_intent", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + + { &hf_lustre_lov_user_md_join, + { "lov user md join", "lustre.lov_user_md_join", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_obd_ioobj, + { "lustre obd ioobj", "lustre.obd_ioobj", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_niobuf_remote, + { "lustre niobuf remote", "lustre.niobuf_remote", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_ost_key, + { "lustre ost key", "lustre.ost_key", FT_STRING, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_ost_val, + { "lustre ost val", "lustre.ost_val", FT_STRING, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_llogd_chunk, + { "lustre llogd chunk", "lustre.llogd_chunk", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_llogd_keyword, + { "lustre llogd keyword", "lustre.llogd_keyword", FT_STRING, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_llogd_client, + { "lustre llogd client", "lustre.llogd_client", FT_STRING, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_llogd_name, + { "lustre llogd name", "lustre.llogd_name", FT_STRING, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_llogd_log_hdr, + { "lustre llogd log hdr", "lustre.llogd_log_hdr", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_llog_logid_rec, + { "lustre llog logid rec", "lustre.llog_logid_rec", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + + { &hf_lustre_llogd_body, + { "lustre llogd body", "lustre.llogd_body", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_nio, + { "lustre nio", "lustre.nio", FT_STRING, BASE_NONE, NULL , 0 , "", HFILL}}, + { &hf_lustre_ost_body, + { "ost body", "lustre.ost_body", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL }}, + { &hf_lustre_obd_statfs, + { "obd statfs", "lustre.obd_statfs", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL }}, + { &hf_lustre_obd_quotactl, + { "obd quotactl", "lustre.obd_quotacl", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL }}, + { &hf_lustre_quota_adjust_qunit, + { "obd quota adjust qunit", "lustre.quota_adjust_qunit", FT_NONE, BASE_NONE, NULL , 0 , "", HFILL }}, + { &hf_lustre_llog_unlink_rec_lur_tail, + { "Lur Tail", "lustre.llog_unlink_rec.lur_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_size_change_rec_lsc_io_epoch, + { "Lsc Io Epoch", "lustre.llog_size_change_rec.lsc_io_epoch", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_flags, + { "Mti Flags", "lustre.mgs_target_info.mti_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_reply_lock_policy_res1, + { "Lock Policy Res1", "lustre.ldlm_reply.lock_policy_res1", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_fsuid, + { "Lk Fsuid", "lustre.mds_rec_link.lk_fsuid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_body_lgd_len, + { "Lgd Len", "lustre.llogd_body.lgd_len", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_old_qd_id, + { "Qd Id", "lustre.qunit_data_old.qd_id", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_stripe_count, + { "Lmm Stripe Count", "lustre.lov_user_md_join.lmm_stripe_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_rec_padding1, + { "Padding1", "lustre.llog_logid_rec.padding1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_quota_adjust_qunit_padding1, + { "Padding1", "lustre.quota_adjust_qunit.padding1", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_size_change_rec_lsc_fid, + { "Lsc Fid", "lustre.llog_size_change_rec.lsc_fid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_rec_hdr_padding, + { "Padding", "lustre.llog_rec_hdr.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_time, + { "Cr Time", "lustre.mds_rec_create.cr_time",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_padding_1, + { "Cr Padding 1", "lustre.mds_rec_create.cr_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_nlink, + { "O Nlink", "lustre.obdo.o_nlink", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_suppgid2, + { "Rn Suppgid2", "lustre.mds_rec_rename.rn_suppgid2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_padding_4, + { "Lk Padding 4", "lustre.mds_rec_link.lk_padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_cap, + { "Lk Cap", "lustre.mds_rec_link.lk_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_extent_gid, + { "Gid", "lustre.ldlm_extent.gid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_uid, + { "O Uid", "lustre.obdo.o_uid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_padding_5, + { "Cr Padding 5", "lustre.mds_rec_create.cr_padding_5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_xattr_name, + { "mds xattr name", "lustre.mds_xattr_name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_v1, + { "lov mds md v1", "lustre.lov_mds_md_v1", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_cookie, + { "llog cookie", "lustre.llog_cookie", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_md_data, + { "mds md data", "lustre.mds_md_data", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_reint_opcode, + { "mds reint opcode", "lustre.mds_reint_opcode", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_xattr_eadata, + { "mds xattr eadata", "lustre.mds_xattr_eadata", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_join, + { "lov mds md join", "lustre.lov_mds_md_join", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_reint_name, + { "mds reint name", "lustre.mds_reint_name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_reint_old_name, + { "mds reint old name", "lustre.mds_reint_old_name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_reint_new_name, + { "mds reint new name", "lustre.mds_reint_new_name", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }}, + + + + { &hf_lustre_obdo_o_valid, + { "O Valid", "lustre.obdo.o_valid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_reply_lock_flags, + { "Lock Flags", "lustre.ldlm_reply.lock_flags", FT_UINT32,BASE_HEX, NULL, 0, "", HFILL }}, + + {&hf_lustre_ldlm_fl_lock_changed, {"LDLM_FL_LOCK_CHANGED", "lustre.ldlm_fl_lock_changed", FT_BOOLEAN, 32, TFS(&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(&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(&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(&flags_set_truth), LDLM_FL_BLOCK_WAIT, "", HFILL}}, + {&hf_lustre_ldlm_fl_cbpending, {"LDLM_FL_CBPENDING", "lustre.ldlm_fl_cbpending", FT_BOOLEAN, 32, TFS(&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(&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(&flags_set_truth), LDLM_FL_WAIT_NOREPROC, "", HFILL}}, + {&hf_lustre_ldlm_fl_cancel, {"LDLM_FL_CANCEL", "lustre.ldlm_fl_cancel", FT_BOOLEAN, 32, TFS(&flags_set_truth), LDLM_FL_CANCEL, "", HFILL}}, + {&hf_lustre_ldlm_fl_replay, {"LDLM_FL_REPLAY", "lustre.ldlm_fl_replay", FT_BOOLEAN, 32, TFS(&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(&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(&flags_set_truth), LDLM_FL_LOCAL_ONLY, "", HFILL}}, + {&hf_lustre_ldlm_fl_failed, {"LDLM_FL_FAILED", "lustre.ldlm_fl_failed", FT_BOOLEAN, 32, TFS(&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(&flags_set_truth), LDLM_FL_HAS_INTENT, "", HFILL}}, + {&hf_lustre_ldlm_fl_canceling, {"LDLM_FL_CANCELING", "lustre.ldlm_fl_canceling", FT_BOOLEAN, 32, TFS(&flags_set_truth), LDLM_FL_CANCELING, "", HFILL}}, + {&hf_lustre_ldlm_fl_local, {"LDLM_FL_LOCAL", "lustre.ldlm_fl_local", FT_BOOLEAN, 32, TFS(&flags_set_truth), LDLM_FL_LOCAL, "", HFILL}}, + {&hf_lustre_ldlm_fl_warn, {"LDLM_FL_WARN", "lustre.ldlm_fl_warn", FT_BOOLEAN, 32, TFS(&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(&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(&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(&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(&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(&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(&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(&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(&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(&flags_set_truth), LDLM_FL_CP_REQD, "", HFILL}}, + {&hf_lustre_ldlm_fl_cleaned, {"LDLM_FL_CLEANED", "lustre.ldlm_fl_cleaned", FT_BOOLEAN, 32, TFS(&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(&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(&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(&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(&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(&flags_set_truth), LDLM_AST_DISCARD_DATA, "", HFILL}}, + + + { &hf_lustre_mds_rec_link_lk_padding_3, + { "Lk Padding 3", "lustre.mds_rec_link.lk_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_misc, + { "O Misc", "lustre.obdo.o_misc", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_suppgid, + { "Sa Suppgid", "lustre.mds_rec_setattr.sa_suppgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_attr_flags, + { "Sa Attr Flags", "lustre.mds_rec_setattr.sa_attr_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_padding_2, + { "Rn Padding 2", "lustre.mds_rec_rename.rn_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_request_lock_handle, + { "Lock Handle", "lustre.ldlm_request.lock_handle", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_lgl_oid, + { "Lgl Oid", "lustre.llog_logid.lgl_oid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_inodebits_bits, + { "Bits", "lustre.ldlm_inodebits.bits", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_count, + { "Llh Count", "lustre.llog_log_hdr.llh_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_padding_4, + { "Ul Padding 4", "lustre.mds_rec_unlink.ul_padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_stripe_size, + { "Lmm Stripe Size", "lustre.lov_user_md_join.lmm_stripe_size", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_gen_rec_lgr_tail, + { "Lgr Tail", "lustre.llog_gen_rec.lgr_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_catid_lci_padding3, + { "Lci Padding3", "lustre.llog_catid.lci_padding3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_qd_qunit, + { "Qd Qunit", "lustre.qunit_data.qd_qunit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_fid1, + { "Ul Fid1", "lustre.mds_rec_unlink.ul_fid1", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_setattr_rec_padding, + { "Padding", "lustre.llog_setattr_rec.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_opcode, + { "Rn Opcode", "lustre.mds_rec_rename.rn_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals) , 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_flags, + { "Cr Flags", "lustre.mds_rec_create.cr_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_fid1, + { "Rn Fid1", "lustre.mds_rec_rename.rn_fid1", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_extent_desc_med_start, + { "Med Start", "lustre.mds_extent_desc.med_start", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_cookie_lgc_lgl, + { "Lgc Lgl", "lustre.llog_cookie.lgc_lgl", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_quotactl_qc_dqinfo, + { "Qc Dqinfo", "lustre.obd_quotactl.qc_dqinfo", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_bitmap, + { "Llh Bitmap", "lustre.llog_log_hdr.llh_bitmap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_size, + { "Sa Size", "lustre.mds_rec_setattr.sa_size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_suppgid1, + { "Rn Suppgid1", "lustre.mds_rec_rename.rn_suppgid1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_quotactl_qc_stat, + { "Qc Stat", "lustre.obd_quotactl.qc_stat", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_old2_qd_id, + { "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_mds_rec_unlink_ul_mode, + { "Ul Mode", "lustre.mds_rec_unlink.ul_mode", 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_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_rec_padding5, + { "Padding5", "lustre.llog_logid_rec.padding5", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_fsgid, + { "Cr Fsgid", "lustre.mds_rec_create.cr_fsgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_join_jr_fid, + { "Jr Fid", "lustre.mds_rec_join.jr_fid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + /*-------------------------------------------------------------------------------------------------------------*/ + /*all this flags are uint64, but I don't find the way to use something like TFS() with a Uint64*/ + { &hf_lustre_ldlm_intent_opc_open, + { "open", "lustre.ldlm_intent.opc_open", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_OPEN, "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_creat, + { "creat", "lustre.ldlm_intent.opc_creat", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_CREAT , "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_readdir, + { "readdir", "lustre.ldlm_intent.opc_readdir", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_READDIR , "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_getattr, + { "getattr", "lustre.ldlm_intent.opc_getattr", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_GETATTR, "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_lookup, + { "lookup", "lustre.ldlm_intent.opc_lookup", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_LOOKUP , "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_unlink, + { "unlink", "lustre.ldlm_intent.opc_unlink", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_UNLINK , "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_getxattr, + { "getxattr", "lustre.ldlm_intent.opc_getxattr", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_GETXATTR , "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_exec, + { "exec", "lustre.ldlm_intent.opc_exec", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_EXEC , "", HFILL}}, + { &hf_lustre_ldlm_intent_opc_pin, + { "pin", "lustre.ldlm_intent.opc_pin", FT_BOOLEAN, 32, TFS(&flags_set_truth), IT_PIN , "", HFILL}}, + /*-------------------------------------------------------------------------------------------------------------*/ + { &hf_lustre_ldlm_intent_opc, + { "intent opcode", "lustre.ldlm_intent.opc", FT_NONE, BASE_NONE, NULL, 0, "", HFILL}}, + { &hf_lustre_llog_rec_hdr_lrh_type, + { "Lrh Type", "lustre.llog_rec_hdr.lrh_type", FT_UINT32, BASE_HEX, VALS(lustre_llog_op_type), 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_fsgid, + { "Lk Fsgid", "lustre.mds_rec_link.lk_fsgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_rec_hdr_lrh_len, + { "Lrh Len", "lustre.llog_rec_hdr.lrh_len", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_setattr_rec_lsr_uid, + { "Lsr Uid", "lustre.llog_setattr_rec.lsr_uid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_padding_1, + { "Ld Padding 1", "lustre.lov_desc.ld_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_padding_4, + { "O Padding 4", "lustre.obdo.o_padding_4", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_padding, + { "Padding", "lustre.mgs_target_info.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_quotactl_qc_dqblk, + { "Qc Dqblk", "lustre.obd_quotactl.qc_dqblk", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_conn_body_lgdc_gen, + { "Lgdc Gen", "lustre.llogd_conn_body.lgdc_gen", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_padding_2, + { "Cr Padding 2", "lustre.mds_rec_create.cr_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_ctime, + { "Sa Ctime", "lustre.mds_rec_setattr.sa_ctime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_tail, + { "Llh Tail", "lustre.llog_log_hdr.llh_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_size, + { "O Size", "lustre.obdo.o_size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_cap, + { "Sa Cap", "lustre.mds_rec_setattr.sa_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_extent_start, + { "Start", "lustre.ldlm_extent.start", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_opcode, + { "Ul Opcode", "lustre.mds_rec_unlink.ul_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals) , 0, "", HFILL }}, + { &hf_lustre_llog_size_change_rec_lsc_hdr, + { "Lsc Hdr", "lustre.llog_size_change_rec.lsc_hdr", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_time, + { "Ul Time", "lustre.mds_rec_unlink.ul_time",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_ost_data_join_l_extent_start, + { "L Extent Start", "lustre.lov_user_ost_data_join.l_extent_start", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_tree_id, + { "Lmm Tree Id", "lustre.lov_user_md_join.lmm_tree_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_create_rec_lcr_tail, + { "Lcr Tail", "lustre.llog_create_rec.lcr_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_mode, + { "Sa Mode", "lustre.mds_rec_setattr.sa_mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_lgl_ogr, + { "Lgl Ogr", "lustre.llog_logid.lgl_ogr", 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_HEX, 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_mds_rec_create_cr_cap, + { "Cr Cap", "lustre.mds_rec_create.cr_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_old_qd_type, + { "Qd Type", "lustre.qunit_data_old.qd_type", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_flock_blocking_export, + { "Blocking Export", "lustre.ldlm_flock.blocking_export", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_gid, + { "Sa Gid", "lustre.mds_rec_setattr.sa_gid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_pattern, + { "Ld Pattern", "lustre.lov_desc.ld_pattern", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_qd_id, + { "Qd Id", "lustre.qunit_data.qd_id", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_fsname, + { "Mti Fsname", "lustre.mgs_target_info.mti_fsname", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_object_gr, + { "Lmm Object Gr", "lustre.lov_user_md_join.lmm_object_gr", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_request_lock_flags, + { "Lock Flags", "lustre.ldlm_request.lock_flags", FT_UINT32, BASE_HEX, NULL, 0 , "", HFILL }}, + { &hf_lustre_obdo_o_mode, + { "O Mode", "lustre.obdo.o_mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_svname, + { "Mti Svname", "lustre.mgs_target_info.mti_svname", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_body_lgd_logid, + { "Lgd Logid", "lustre.llogd_body.lgd_logid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_opcode, + { "Cr Opcode", "lustre.mds_rec_create.cr_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals), 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_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_atime, + { "O Atime", "lustre.obdo.o_atime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_quota_adjust_qunit_qaq_id, + { "Qaq Id", "lustre.quota_adjust_qunit.qaq_id", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_fid2, + { "Rn Fid2", "lustre.mds_rec_rename.rn_fid2", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_replayfid, + { "Cr Replayfid", "lustre.mds_rec_create.cr_replayfid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_lock_desc_l_policy_data, + { "L Policy Data", "lustre.ldlm_lock_desc.l_policy_data", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_suppgid1, + { "Lk Suppgid1", "lustre.mds_rec_link.lk_suppgid1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_quotactl_qc_cmd, + { "Qc Cmd", "lustre.obd_quotactl.qc_cmd", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_object_id, + { "Lmm Object Id", "lustre.lov_user_md_join.lmm_object_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_padding_3, + { "Rn Padding 3", "lustre.mds_rec_rename.rn_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_padding, + { "Padding", "lustre.qunit_data.padding", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_objects, + { "Lmm Objects", "lustre.lov_user_md_join.lmm_objects", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_quota_adjust_qunit_qaq_flags, + { "Qaq Flags", "lustre.quota_adjust_qunit.qaq_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_ost_data_join_l_object_gr, + { "L Object Gr", "lustre.lov_user_ost_data_join.l_object_gr", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_lock_desc_l_granted_mode, + { "L Granted Mode", "lustre.ldlm_lock_desc.l_granted_mode", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_mode_t_vals), 0, "", HFILL }}, + { &hf_lustre_obdo_o_gr, + { "O Gr", "lustre.obdo.o_gr", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_padding_2, + { "Ul Padding 2", "lustre.mds_rec_unlink.ul_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_gid, + { "O Gid", "lustre.obdo.o_gid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_catid_lci_logid, + { "Lci Logid", "lustre.llog_catid.lci_logid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_rec_tail_lrt_index, + { "Lrt Index", "lustre.llog_rec_tail.lrt_index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_mds, + { "O Mds", "lustre.obdo.o_mds", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_extent_desc_med_lmm, + { "Med Lmm", "lustre.mds_extent_desc.med_lmm", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_default_stripe_count, + { "Ld Default Stripe Count", "lustre.lov_desc.ld_default_stripe_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_resource_desc_lr_padding, + { "Lr Padding", "lustre.ldlm_resource_desc.lr_padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_cm_vers, + { "Cm Vers", "lustre.cfg_marker.cm_vers", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_fid, + { "Cr Fid", "lustre.mds_rec_create.cr_fid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_unlink_rec_lur_hdr, + { "Lur Hdr", "lustre.llog_unlink_rec.lur_hdr", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_body_lgd_index, + { "Lgd Index", "lustre.llogd_body.lgd_index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_cm_tgtname, + { "Cm Tgtname", "lustre.cfg_marker.cm_tgtname", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_padding_1, + { "Ul Padding 1", "lustre.mds_rec_unlink.ul_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_cap, + { "Ul Cap", "lustre.mds_rec_unlink.ul_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_array_rec_lmr_med, + { "Lmr Med", "lustre.llog_array_rec.lmr_med", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_setattr_rec_lsr_ogen, + { "Lsr Ogen", "lustre.llog_setattr_rec.lsr_ogen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_padding_3, + { "Cr Padding 3", "lustre.mds_rec_create.cr_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_rec_lid_hdr, + { "Lid Hdr", "lustre.llog_logid_rec.lid_hdr", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_ost_data_join_l_ost_idx, + { "L Ost Idx", "lustre.lov_user_ost_data_join.l_ost_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_easize, + { "O Easize", "lustre.obdo.o_easize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_array_id, + { "Lmm Array Id", "lustre.lov_user_md_join.lmm_array_id", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_ost_body_oa, + { "Oa", "lustre.ost_body.oa", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_rec_padding3, + { "Padding3", "lustre.llog_logid_rec.padding3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_flags, + { "Llh Flags", "lustre.llog_log_hdr.llh_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + {&hf_lustre_llog_hdr_llh_flag_zap_when_empty, + {"LLOG_F_ZAP_WHEN_EMPTY","lustre.lustre.llog_log_hdr.llh_flag_zap",FT_BOOLEAN,32,TFS(&flags_set_truth),LLOG_F_ZAP_WHEN_EMPTY,"",HFILL}}, + {&hf_lustre_llog_hdr_llh_flag_is_cat, + {"LLOG_F_IS_CAT","lustre.lustre.llog_log_hdr.llh_flag_cat",FT_BOOLEAN,32,TFS(&flags_set_truth),LLOG_F_IS_CAT,"",HFILL}}, + {&hf_lustre_llog_hdr_llh_flag_is_play, + {"LOG_F_IS_PLAIN","lustre.lustre.llog_log_hdr.llh_flag_play",FT_BOOLEAN,32,TFS(&flags_set_truth),LLOG_F_IS_PLAIN,"",HFILL}}, + + { &hf_lustre_llog_setattr_rec_lsr_oid, + { "Lsr Oid", "lustre.llog_setattr_rec.lsr_oid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_mode, + { "Cr Mode", "lustre.mds_rec_create.cr_mode", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_size_change_rec_padding, + { "Padding", "lustre.llog_size_change_rec.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_config_ver, + { "Mti Config Ver", "lustre.mgs_target_info.mti_config_ver", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_cm_createtime, + { "Cm Createtime", "lustre.cfg_marker.cm_createtime",FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_old_qd_count, + { "Qd Count", "lustre.qunit_data_old.qd_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_join_lmmj_array_id, + { "Lmmj Array Id", "lustre.lov_mds_md_join.lmmj_array_id", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_uid, + { "Sa Uid", "lustre.mds_rec_setattr.sa_uid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_catid_lci_padding1, + { "Lci Padding1", "lustre.llog_catid.lci_padding1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_atime, + { "Sa Atime", "lustre.mds_rec_setattr.sa_atime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_active_tgt_count, + { "Ld Active Tgt Count", "lustre.lov_desc.ld_active_tgt_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_lcookie, + { "O Lcookie", "lustre.obdo.o_lcookie", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_gen_rec_lgr_gen, + { "Lgr Gen", "lustre.llog_gen_rec.lgr_gen", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_ost_data_join_l_object_id, + { "L Object Id", "lustre.lov_user_ost_data_join.l_object_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_id, + { "O Id", "lustre.obdo.o_id", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_uuid, + { "Mti Uuid", "lustre.mgs_target_info.mti_uuid", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_padding_1, + { "Lk Padding 1", "lustre.mds_rec_link.lk_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_rec_hdr_lrh_index, + { "Lrh Index", "lustre.llog_rec_hdr.lrh_index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_setattr_rec_lsr_hdr, + { "Lsr Hdr", "lustre.llog_setattr_rec.lsr_hdr", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_stripe_index, + { "Mti Stripe Index", "lustre.mgs_target_info.mti_stripe_index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_gen_conn_cnt, + { "Conn Cnt", "lustre.llog_gen.conn_cnt", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_padding_6, + { "O Padding 6", "lustre.obdo.o_padding_6", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_suppgid, + { "Cr Suppgid", "lustre.mds_rec_create.cr_suppgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_cookie_lgc_index, + { "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_HEX, 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_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_padding_0, + { "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_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_fsuid, + { "Rn Fsuid", "lustre.mds_rec_rename.rn_fsuid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_cm_flags, + { "Cm Flags", "lustre.cfg_marker.cm_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_padding_3, + { "O Padding 3", "lustre.obdo.o_padding_3", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_ost_data_join_l_ost_gen, + { "L Ost Gen", "lustre.lov_user_ost_data_join.l_ost_gen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_fsuid, + { "Cr Fsuid", "lustre.mds_rec_create.cr_fsuid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_fsgid, + { "Ul Fsgid", "lustre.mds_rec_unlink.ul_fsgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_request_lock_desc, + { "Lock Desc", "lustre.ldlm_request.lock_desc", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_pattern, + { "Lmm Pattern", "lustre.lov_user_md_join.lmm_pattern", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_fsuid, + { "Ul Fsuid", "lustre.mds_rec_unlink.ul_fsuid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_suppgid2, + { "Lk Suppgid2", "lustre.mds_rec_link.lk_suppgid2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_orphan_rec_padding, + { "Padding", "lustre.llog_orphan_rec.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_tree_gen, + { "Lmm Tree Gen", "lustre.lov_user_md_join.lmm_tree_gen", FT_UINT64, 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, + { "Mti Params", "lustre.mgs_target_info.mti_params", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_lgl_ogen, + { "Lgl Ogen", "lustre.llog_logid.lgl_ogen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_valid, + { "Sa Valid", "lustre.mds_rec_setattr.sa_valid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_cm_comment, + { "Cm Comment", "lustre.cfg_marker.cm_comment", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_unlink_rec_lur_oid, + { "Lur Oid", "lustre.llog_unlink_rec.lur_oid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_qd_count, + { "Qd Count", "lustre.qunit_data.qd_count", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_padding_1, + { "Rn Padding 1", "lustre.mds_rec_rename.rn_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_mtime, + { "O Mtime", "lustre.obdo.o_mtime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_join_lmmj_md, + { "Lmmj Md", "lustre.lov_mds_md_join.lmmj_md", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_fsgid, + { "Rn Fsgid", "lustre.mds_rec_rename.rn_fsgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_cap, + { "Rn Cap", "lustre.mds_rec_rename.rn_cap", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_blksize, + { "O Blksize", "lustre.obdo.o_blksize", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_suppgid, + { "Ul Suppgid", "lustre.mds_rec_unlink.ul_suppgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_res_id_name, + { "Name", "lustre.ldlm_res_id.name", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_time, + { "Lk Time", "lustre.mds_rec_link.lk_time",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_reply_lock_handle, + { "Lock Handle", "lustre.ldlm_reply.lock_handle", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_padding_3, + { "Ul Padding 3", "lustre.mds_rec_unlink.ul_padding_3", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_body_lgd_saved_index, + { "Lgd Saved Index", "lustre.llogd_body.lgd_saved_index", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_join_jr_headsize, + { "Jr Headsize", "lustre.mds_rec_join.jr_headsize", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_padding_4, + { "Rn Padding 4", "lustre.mds_rec_rename.rn_padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_old_qd_isblk, + { "Qd Isblk", "lustre.qunit_data_old.qd_isblk", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_blocks, + { "O Blocks", "lustre.obdo.o_blocks", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_padding_2, + { "Ld Padding 2", "lustre.lov_desc.ld_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_fid2, + { "Lk Fid2", "lustre.mds_rec_link.lk_fid2", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_rec_lid_tail, + { "Lid Tail", "lustre.llog_logid_rec.lid_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_grant, + { "O Grant", "lustre.obdo.o_grant", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_padding_2, + { "O Padding 2", "lustre.obdo.o_padding_2", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_quota_adjust_qunit_qaq_iunit_sz, + { "Qaq Iunit Sz", "lustre.quota_adjust_qunit.qaq_iunit_sz", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_unlink_rec_padding, + { "Padding", "lustre.llog_unlink_rec.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_lock_desc_l_req_mode, + { "L Req Mode", "lustre.ldlm_lock_desc.l_req_mode", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_mode_t_vals), 0, "", HFILL }}, + { &hf_lustre_ldlm_extent_end, + { "End", "lustre.ldlm_extent.end", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_gen_rec_lgr_hdr, + { "Lgr Hdr", "lustre.llog_gen_rec.lgr_hdr", FT_NONE, BASE_HEX, 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_lov_user_md_join_lmm_extent_count, + { "Lmm Extent Count", "lustre.lov_user_md_join.lmm_extent_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_extent_desc_med_len, + { "Med Len", "lustre.mds_extent_desc.med_len", FT_UINT64, 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_array_rec_lmr_hdr, + { "Lmr Hdr", "lustre.llog_array_rec.lmr_hdr", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_cat_idx, + { "Llh Cat Idx", "lustre.llog_log_hdr.llh_cat_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_bitmap_offset, + { "Llh Bitmap Offset", "lustre.llog_log_hdr.llh_bitmap_offset", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_orphan_rec_lor_oid, + { "Lor Oid", "lustre.llog_orphan_rec.lor_oid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_reply_lock_padding, + { "Lock Padding", "lustre.ldlm_reply.lock_padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_quotactl_qc_id, + { "Qc Id", "lustre.obd_quotactl.qc_id", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_padding_4, + { "Cr Padding 4", "lustre.mds_rec_create.cr_padding_4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_rec_padding4, + { "Padding4", "lustre.llog_logid_rec.padding4", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_padding_2, + { "Lk Padding 2", "lustre.mds_rec_link.lk_padding_2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_setattr_rec_lsr_gid, + { "Lsr Gid", "lustre.llog_setattr_rec.lsr_gid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_md_join_lmm_magic, + { "Lmm Magic", "lustre.lov_user_md_join.lmm_magic", FT_UINT32, BASE_HEX, VALS(lustre_lov_magic), 0, "", HFILL }}, + { &hf_lustre_obd_quotactl_qc_type, + { "Qc Type", "lustre.obd_quotactl.qc_type", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_padding, + { "Padding", "lustre.cfg_marker.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_nids, + { "Mti Nids", "lustre.mgs_target_info.mti_nids", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_user_ost_data_join_l_extent_end, + { "L Extent End", "lustre.lov_user_ost_data_join.l_extent_end", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_stripe_idx, + { "O Stripe Idx", "lustre.obdo.o_stripe_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_conn_body_lgdc_logid, + { "Lgdc Logid", "lustre.llogd_conn_body.lgdc_logid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_fsuid, + { "Sa Fsuid", "lustre.mds_rec_setattr.sa_fsuid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_flock_blocking_pid, + { "Blocking Pid", "lustre.ldlm_flock.blocking_pid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_tgt_count, + { "Ld Tgt Count", "lustre.lov_desc.ld_tgt_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_body_lgd_cur_offset, + { "Lgd Cur Offset", "lustre.llogd_body.lgd_cur_offset", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_create_rec_lcr_ogen, + { "Lcr Ogen", "lustre.llog_create_rec.lcr_ogen", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_old2_qd_count, + { "Qd Count", "lustre.qunit_data_old2.qd_count", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_opnum, + { "Operation", "lustre.opnum", FT_UINT16, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_old2_qd_flags, + { "Qd Flags", "lustre.qunit_data_old2.qd_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_flock_start, + { "Start", "lustre.ldlm_flock.start", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_quota_adjust_qunit_qaq_bunit_sz, + { "Qaq Bunit Sz", "lustre.quota_adjust_qunit.qaq_bunit_sz", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_array_rec_lmr_tail, + { "Lmr Tail", "lustre.llog_array_rec.lmr_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_flock_pid, + { "Pid", "lustre.ldlm_flock.pid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_default_stripe_size, + { "Ld Default Stripe Size", "lustre.lov_desc.ld_default_stripe_size", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_opcode, + { "Sa Opcode", "lustre.mds_rec_setattr.sa_opcode", FT_UINT32, BASE_DEC, VALS(lustre_mds_reint_t_vals), 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_tgtuuid, + { "Llh Tgtuuid", "lustre.llog_log_hdr.llh_tgtuuid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_fid1, + { "Lk Fid1", "lustre.mds_rec_link.lk_fid1", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_cm_step, + { "Cm Step", "lustre.cfg_marker.cm_step", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_send_param_mgs_param, + { "Mgs Param", "lustre.mgs_send_param.mgs_param", FT_UINT8, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_create_rec_lcr_fid, + { "Lcr Fid", "lustre.llog_create_rec.lcr_fid", FT_NONE, BASE_HEX, 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, + { "Lr Name", "lustre.ldlm_resource_desc.lr_name", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_rec_tail_lrt_len, + { "Lrt Len", "lustre.llog_rec_tail.lrt_len", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_mtime, + { "Sa Mtime", "lustre.mds_rec_setattr.sa_mtime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_timestamp, + { "Llh Timestamp", "lustre.llog_log_hdr.llh_timestamp", FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_catid_lci_padding2, + { "Lci Padding2", "lustre.llog_catid.lci_padding2", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_conn_body_lgdc_ctxt_idx, + { "Lgdc Ctxt Idx", "lustre.llogd_conn_body.lgdc_ctxt_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_cfg_marker_cm_canceltime, + { "Cm Canceltime", "lustre.cfg_marker.cm_canceltime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_lustre_ver, + { "Mti Lustre Ver", "lustre.mgs_target_info.mti_lustre_ver", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_padding_1, + { "O Padding 1", "lustre.obdo.o_padding_1", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_qunit_data_qd_flags, + { "Qd Flags", "lustre.qunit_data.qd_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_logid_rec_lid_id, + { "Lid Id", "lustre.llog_logid_rec.lid_id", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_generation, + { "O Generation", "lustre.obdo.o_generation", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_gen_mnt_cnt, + { "Mnt Cnt", "lustre.llog_gen.mnt_cnt", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_size_change_rec_lsc_tail, + { "Lsc Tail", "lustre.llog_size_change_rec.lsc_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_padding_5, + { "O Padding 5", "lustre.obdo.o_padding_5", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_lock_desc_l_resource, + { "L Resource", "lustre.ldlm_lock_desc.l_resource", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_rename_rn_time, + { "Rn Time", "lustre.mds_rec_rename.rn_time",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_create_cr_rdev, + { "Cr Rdev", "lustre.mds_rec_create.cr_rdev", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obdo_o_fid, + { "O Fid", "lustre.obdo.o_fid", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_fid, + { "Sa Fid", "lustre.mds_rec_setattr.sa_fid", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_request_lock_count, + { "Lock Count", "lustre.ldlm_request.lock_count", FT_UINT32, BASE_HEX_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_flock_end, + { "End", "lustre.ldlm_flock.end", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_link_lk_opcode, + { "Lk Opcode", "lustre.mds_rec_link.lk_opcode", FT_UINT32, BASE_DEC,VALS(lustre_mds_reint_t_vals) , 0, "", HFILL }}, + { &hf_lustre_mgs_target_info_mti_nid_count, + { "Mti Nid Count", "lustre.mgs_target_info.mti_nid_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + /* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ + { &hf_lustre_mgs_target_info, + { "mgs target info", "lustre.mgs_target_info", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_lustre_mgs_send_param, + { "mgs send param", "lustre.mgs_send_param", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + /* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ + { &hf_lustre_ost_lvb, + { "ost lvb data", "lustre.ost_lvb", FT_NONE, BASE_NONE, NULL, 0, "", HFILL }}, + + { &hf_lustre_obdo_o_ctime, + { "O Ctime", "lustre.obdo.o_ctime",FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_reply_lock_policy_res2, + { "Lock Policy Res2", "lustre.ldlm_reply.lock_policy_res2", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llogd_body_lgd_ctxt_idx, + { "Lgd Ctxt Idx", "lustre.llogd_body.lgd_ctxt_idx", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_unlink_ul_fid2, + { "Ul Fid2", "lustre.mds_rec_unlink.ul_fid2", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_desc_ld_qos_maxage, + { "Ld Qos Maxage", "lustre.lov_desc.ld_qos_maxage", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_ldlm_resource_desc_lr_type, + { "Lr Type", "lustre.ldlm_resource_desc.lr_type", FT_UINT16, BASE_DEC, VALS(lustre_ldlm_type_t_vals), 0, "", HFILL }}, + { &hf_lustre_llog_setattr_rec_lsr_tail, + { "Lsr Tail", "lustre.llog_setattr_rec.lsr_tail", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_cookie_lgc_subsys, + { "Lgc Subsys", "lustre.llog_cookie.lgc_subsys", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_hdr, + { "Llh Hdr", "lustre.llog_log_hdr.llh_hdr", FT_NONE, BASE_HEX, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_fsgid, + { "Sa Fsgid", "lustre.mds_rec_setattr.sa_fsgid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_mds_rec_setattr_sa_padding, + { "Sa Padding", "lustre.mds_rec_setattr.sa_padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_lov_mds_md_join_lmmj_extent_count, + { "Lmmj Extent Count", "lustre.lov_mds_md_join.lmmj_extent_count", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_llog_log_hdr_llh_reserved, + { "Llh Reserved", "lustre.llog_log_hdr.llh_reserved", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + + { &hf_lustre_extra_padding, + { "extra padding", "lustre.msg_v2_extra_padding", FT_NONE, BASE_NONE, NULL, 0, "", HFILL}}, + { &hf_lustre_ldlm_reply, + { "ldlm reply", "lustre.ldlm_reply", FT_NONE, BASE_NONE, NULL, 0, "", HFILL}}, + { &hf_lustre_ldlm_request, + { "ldlm request", "lustre.ldlm_request", FT_NONE, BASE_NONE, NULL, 0, "", HFILL}}, + + /* add for lustre_user.h */ + { &hf_lustre_obd_dqinfo_dqi_valid, + { "Dqi Valid", "lustre.obd_dqinfo.dqi_valid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_isoftlimit, + { "Dqb Isoftlimit", "lustre.obd_dqblk.dqb_isoftlimit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_bhardlimit, + { "Dqb Bhardlimit", "lustre.obd_dqblk.dqb_bhardlimit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_curspace, + { "Dqb Curspace", "lustre.obd_dqblk.dqb_curspace", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_itime, + { "Dqb Itime", "lustre.obd_dqblk.dqb_itime", FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_valid, + { "Dqb Valid", "lustre.obd_dqblk.dqb_valid", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqinfo_dqi_igrace, + { "Dqi Igrace", "lustre.obd_dqinfo.dqi_igrace", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqinfo_dqi_bgrace, + { "Dqi Bgrace", "lustre.obd_dqinfo.dqi_bgrace", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_padding, + { "Padding", "lustre.obd_dqblk.padding", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_curinodes, + { "Dqb Curinodes", "lustre.obd_dqblk.dqb_curinodes", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_bsoftlimit, + { "Dqb Bsoftlimit", "lustre.obd_dqblk.dqb_bsoftlimit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqinfo_dqi_flags, + { "Dqi Flags", "lustre.obd_dqinfo.dqi_flags", FT_UINT32, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_btime, + { "Dqb Btime", "lustre.obd_dqblk.dqb_btime", FT_ABSOLUTE_TIME, BASE_DEC, NULL, 0, "", HFILL }}, + { &hf_lustre_obd_dqblk_dqb_ihardlimit, + { "Dqb Ihardlimit", "lustre.obd_dqblk.dqb_ihardlimit", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL }} + + }; + + + static gint *ett[] = { + &ett_lustre, + &ett_lustre_lustre_handle_cookie, + &ett_lustre_lustre_msg_v1, + &ett_lustre_lustre_handle_v1, + &ett_lustre_lustre_msg_v2, + &ett_lustre_ptlrpc_body, + &ett_lustre_lustre_handle_v2, + &ett_lustre_obd_connect_data, + &ett_lustre_lov_mds_md_v1, + &ett_lustre_lov_ost_data_v1, + &ett_lustre_obd_statfs, + &ett_lustre_obd_ioobj, + &ett_lustre_niobuf_remote, + &ett_lustre_ost_lvb, + &ett_lustre_ll_fid, + &ett_lustre_mds_status_req, + &ett_lustre_mds_body, + &ett_lustre_obd_quotactl, + &ett_lustre_obd_dqinfo, + &ett_lustre_obd_dqblk, + &ett_lustre_quota_adjust_qunit, + &ett_lustre_mds_rec_setattr, + &ett_lustre_mds_rec_create, + &ett_lustre_mds_rec_join, + &ett_lustre_mds_rec_link, + &ett_lustre_mds_rec_unlink, + &ett_lustre_mds_rec_rename, + &ett_lustre_lov_desc, + &ett_lustre_obd_uuid, + &ett_lustre_ldlm_res_id, + &ett_lustre_ldlm_extent, + &ett_lustre_ldlm_inodebits, + &ett_lustre_ldlm_flock, + &ett_lustre_ldlm_intent_opc, + &ett_lustre_ldlm_resource_desc, + &ett_lustre_ldlm_res_id, + &ett_lustre_ldlm_lock_desc, + &ett_lustre_ldlm_resource_desc, + &ett_lustre_ldlm_request, + &ett_lustre_ldlm_lock_desc, + &ett_lustre_lustre_handle, + &ett_lustre_ldlm_reply, + &ett_lustre_ldlm_lock_desc, + &ett_lustre_lustre_handle, + &ett_lustre_mgs_send_param, + &ett_lustre_mgs_target_info, + &ett_lustre_cfg_marker, + &ett_lustre_llog_logid, + &ett_lustre_llog_catid, + &ett_lustre_llog_logid, + &ett_lustre_lov_mds_md_join, + &ett_lustre_lov_mds_md, + &ett_lustre_llog_logid, + &ett_lustre_llog_rec_hdr, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_logid_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_llog_logid, + &ett_lustre_llog_rec_tail, + &ett_lustre_mds_extent_desc, + &ett_lustre_lov_mds_md, + &ett_lustre_llog_array_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_mds_extent_desc, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_create_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_ll_fid, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_orphan_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_unlink_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_setattr_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_size_change_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_ll_fid, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_gen, + &ett_lustre_llog_gen_rec, + &ett_lustre_llog_rec_hdr, + &ett_lustre_llog_gen, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_log_hdr, + &ett_lustre_llog_rec_hdr, + &ett_lustre_obd_uuid, + &ett_lustre_llog_rec_tail, + &ett_lustre_llog_cookie, + &ett_lustre_llog_logid, + &ett_lustre_llogd_body, + &ett_lustre_llog_logid, + &ett_lustre_llogd_conn_body, + &ett_lustre_llog_gen, + &ett_lustre_llog_logid, + &ett_lustre_lov_user_ost_data_join, + &ett_lustre_lov_user_md_join, + &ett_lustre_llog_logid, + &ett_lustre_lov_user_ost_data_join, + &ett_lustre_obdo, + &ett_lustre_lustre_handle, + &ett_lustre_llog_cookie, + &ett_lustre_ost_body, + &ett_lustre_obdo, + &ett_lustre_qunit_data, + &ett_lustre_qunit_data_old2, + &ett_lustre_qunit_data_old, + &ett_lustre_ldlm_lock_flags, + &ett_lustre_llog_log_llh_flags, + + }; + + proto_lustre = proto_register_protocol("Lustre", "lustre", "lustre"); + proto_register_field_array(proto_lustre, hf, array_length (hf)); + proto_register_subtree_array(ett, array_length(ett)); +} + + +void proto_reg_handoff_lustre(void) +{ + dissector_handle_t lustre_handle; + 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); +}