glusterfs: use a simpler way to read time fields
There's no need to parse the time fields ourselves. proto_tree_add_item() supports the encoding that is used here.
This commit is contained in:
parent
3f76684f91
commit
bd2c10de79
|
@ -227,8 +227,7 @@ static gint ett_gluster_dict_items = -1;
|
||||||
static int
|
static int
|
||||||
glusterfs_rpc_dissect_gfid(proto_tree *tree, tvbuff_t *tvb, int hfindex, int offset)
|
glusterfs_rpc_dissect_gfid(proto_tree *tree, tvbuff_t *tvb, int hfindex, int offset)
|
||||||
{
|
{
|
||||||
if (tree)
|
proto_tree_add_item(tree, hfindex, tvb, offset, 16, ENC_NA);
|
||||||
proto_tree_add_item(tree, hfindex, tvb, offset, 16, ENC_NA);
|
|
||||||
offset += 16;
|
offset += 16;
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -255,8 +254,7 @@ glusterfs_rpc_dissect_mode(proto_tree *tree, tvbuff_t *tvb, int hfindex,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
if (tree)
|
proto_tree_add_bitmask(tree, tvb, offset, hfindex,
|
||||||
proto_tree_add_bitmask(tree, tvb, offset, hfindex,
|
|
||||||
ett_glusterfs_mode, mode_bits, ENC_BIG_ENDIAN);
|
ett_glusterfs_mode, mode_bits, ENC_BIG_ENDIAN);
|
||||||
|
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
@ -272,7 +270,6 @@ glusterfs_rpc_dissect_gf_iatt(proto_tree *tree, tvbuff_t *tvb, int hfindex,
|
||||||
{
|
{
|
||||||
proto_item *iatt_item;
|
proto_item *iatt_item;
|
||||||
proto_tree *iatt_tree;
|
proto_tree *iatt_tree;
|
||||||
nstime_t timestamp;
|
|
||||||
int start_offset = offset;
|
int start_offset = offset;
|
||||||
|
|
||||||
iatt_item = proto_tree_add_item(tree, hfindex, tvb, offset, -1,
|
iatt_item = proto_tree_add_item(tree, hfindex, tvb, offset, -1,
|
||||||
|
@ -302,25 +299,16 @@ glusterfs_rpc_dissect_gf_iatt(proto_tree *tree, tvbuff_t *tvb, int hfindex,
|
||||||
offset = dissect_rpc_uint64(tvb, iatt_tree, hf_glusterfs_ia_blocks,
|
offset = dissect_rpc_uint64(tvb, iatt_tree, hf_glusterfs_ia_blocks,
|
||||||
offset);
|
offset);
|
||||||
|
|
||||||
timestamp.secs = tvb_get_ntohl(tvb, offset);
|
proto_tree_add_item(iatt_tree, hf_glusterfs_ia_atime, tvb,
|
||||||
timestamp.nsecs = tvb_get_ntohl(tvb, offset + 4);
|
offset, 8, ENC_TIME_SECS_NSECS|ENC_BIG_ENDIAN);
|
||||||
if (tree)
|
|
||||||
proto_tree_add_time(iatt_tree, hf_glusterfs_ia_atime, tvb,
|
|
||||||
offset, 8, ×tamp);
|
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
|
||||||
timestamp.secs = tvb_get_ntohl(tvb, offset);
|
proto_tree_add_item(iatt_tree, hf_glusterfs_ia_mtime, tvb,
|
||||||
timestamp.nsecs = tvb_get_ntohl(tvb, offset + 4);
|
offset, 8, ENC_TIME_SECS_NSECS|ENC_BIG_ENDIAN);
|
||||||
if (tree)
|
|
||||||
proto_tree_add_time(iatt_tree, hf_glusterfs_ia_mtime, tvb,
|
|
||||||
offset, 8, ×tamp);
|
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
|
||||||
timestamp.secs = tvb_get_ntohl(tvb, offset);
|
proto_tree_add_item(iatt_tree, hf_glusterfs_ia_ctime, tvb,
|
||||||
timestamp.nsecs = tvb_get_ntohl(tvb, offset + 4);
|
offset, 8, ENC_TIME_SECS_NSECS|ENC_BIG_ENDIAN);
|
||||||
if (tree)
|
|
||||||
proto_tree_add_time(iatt_tree, hf_glusterfs_ia_ctime, tvb,
|
|
||||||
offset, 8, ×tamp);
|
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
|
||||||
proto_item_set_len (iatt_item, offset - start_offset);
|
proto_item_set_len (iatt_item, offset - start_offset);
|
||||||
|
@ -337,9 +325,7 @@ glusterfs_rpc_dissect_gf_flock(proto_tree *tree, tvbuff_t *tvb, int offset)
|
||||||
offset = dissect_rpc_uint64(tvb, tree, hf_glusterfs_flock_len, offset);
|
offset = dissect_rpc_uint64(tvb, tree, hf_glusterfs_flock_len, offset);
|
||||||
offset = dissect_rpc_uint32(tvb, tree, hf_glusterfs_flock_pid, offset);
|
offset = dissect_rpc_uint32(tvb, tree, hf_glusterfs_flock_pid, offset);
|
||||||
|
|
||||||
if (tree)
|
proto_tree_add_item(tree, hf_glusterfs_flock_owner, tvb, offset, 8, ENC_NA);
|
||||||
proto_tree_add_item(tree, hf_glusterfs_flock_owner, tvb,
|
|
||||||
offset, 8, ENC_NA);
|
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -369,9 +355,7 @@ glusterfs_rpc_dissect_gf_2_flock(proto_tree *tree, tvbuff_t *tvb, int offset)
|
||||||
len = tvb_get_ntohl(tvb, offset);
|
len = tvb_get_ntohl(tvb, offset);
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
|
||||||
if (tree)
|
proto_tree_add_item(flock_tree, hf_glusterfs_flock_owner, tvb, offset, len, ENC_NA);
|
||||||
proto_tree_add_item(flock_tree, hf_glusterfs_flock_owner, tvb,
|
|
||||||
offset, len, ENC_NA);
|
|
||||||
offset += len;
|
offset += len;
|
||||||
|
|
||||||
proto_item_set_len (flock_item, offset - start_offset);
|
proto_item_set_len (flock_item, offset - start_offset);
|
||||||
|
@ -422,26 +406,24 @@ glusterfs_rpc_dissect_flags(proto_tree *tree, tvbuff_t *tvb, int offset)
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
if (tree) {
|
flag_tree = proto_tree_add_bitmask(tree, tvb, offset, hf_glusterfs_flags, ett_glusterfs_flags, flag_bits, ENC_BIG_ENDIAN);
|
||||||
flag_tree = proto_tree_add_bitmask(tree, tvb, offset, hf_glusterfs_flags, ett_glusterfs_flags, flag_bits, ENC_BIG_ENDIAN);
|
|
||||||
|
|
||||||
/* rdonly is TRUE only when no flags are set */
|
/* rdonly is TRUE only when no flags are set */
|
||||||
rdonly = (tvb_get_ntohl(tvb, offset) == 0);
|
rdonly = (tvb_get_ntohl(tvb, offset) == 0);
|
||||||
proto_tree_add_item(flag_tree, hf_glusterfs_flags_rdonly, tvb, offset, 4, ENC_BIG_ENDIAN);
|
proto_tree_add_item(flag_tree, hf_glusterfs_flags_rdonly, tvb, offset, 4, ENC_BIG_ENDIAN);
|
||||||
if (rdonly) {
|
if (rdonly) {
|
||||||
rdonly_hf = proto_registrar_get_nth(hf_glusterfs_flags_rdonly);
|
rdonly_hf = proto_registrar_get_nth(hf_glusterfs_flags_rdonly);
|
||||||
proto_item_append_text(flag_tree, ", %s", rdonly_hf->name);
|
proto_item_append_text(flag_tree, ", %s", rdonly_hf->name);
|
||||||
}
|
|
||||||
|
|
||||||
/* hf_glusterfs_flags_accmode is TRUE if bits 0 and 1 are set */
|
|
||||||
accmode_hf = proto_registrar_get_nth(hf_glusterfs_flags_accmode);
|
|
||||||
accmode = tvb_get_ntohl(tvb, offset);
|
|
||||||
proto_tree_add_uint_format_value(flag_tree, hf_glusterfs_flags_accmode, tvb, offset, 4, accmode,
|
|
||||||
"%s", val_to_str_const((accmode & (guint32)(accmode_hf->bitmask)), glusterfs_accmode_vals, "Unknown"));
|
|
||||||
if ((accmode & accmode_hf->bitmask) == accmode_hf->bitmask)
|
|
||||||
proto_item_append_text(flag_tree, ", %s", proto_registrar_get_nth(hf_glusterfs_flags_accmode)->name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* hf_glusterfs_flags_accmode is TRUE if bits 0 and 1 are set */
|
||||||
|
accmode_hf = proto_registrar_get_nth(hf_glusterfs_flags_accmode);
|
||||||
|
accmode = tvb_get_ntohl(tvb, offset);
|
||||||
|
proto_tree_add_uint_format_value(flag_tree, hf_glusterfs_flags_accmode, tvb, offset, 4, accmode,
|
||||||
|
"%s", val_to_str_const((accmode & (guint32)(accmode_hf->bitmask)), glusterfs_accmode_vals, "Unknown"));
|
||||||
|
if ((accmode & accmode_hf->bitmask) == accmode_hf->bitmask)
|
||||||
|
proto_item_append_text(flag_tree, ", %s", proto_registrar_get_nth(hf_glusterfs_flags_accmode)->name);
|
||||||
|
|
||||||
offset += 4;
|
offset += 4;
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
@ -475,8 +457,7 @@ glusterfs_rpc_dissect_statfs(proto_tree *tree, tvbuff_t *tvb, int offset)
|
||||||
offset = dissect_rpc_uint64(tvb, tree, hf_glusterfs_favail, offset);
|
offset = dissect_rpc_uint64(tvb, tree, hf_glusterfs_favail, offset);
|
||||||
offset = dissect_rpc_uint64(tvb, tree, hf_glusterfs_id, offset);
|
offset = dissect_rpc_uint64(tvb, tree, hf_glusterfs_id, offset);
|
||||||
|
|
||||||
if (tree)
|
proto_tree_add_bitmask(tree, tvb, offset,
|
||||||
proto_tree_add_bitmask(tree, tvb, offset,
|
|
||||||
hf_glusterfs_mnt_flags, ett_glusterfs_mnt_flags,
|
hf_glusterfs_mnt_flags, ett_glusterfs_mnt_flags,
|
||||||
flag_bits, ENC_BIG_ENDIAN);
|
flag_bits, ENC_BIG_ENDIAN);
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
@ -544,37 +525,36 @@ gluster_rpc_dissect_dict(proto_tree *tree, tvbuff_t *tvb, int hfindex, int offse
|
||||||
offset += key_len;
|
offset += key_len;
|
||||||
|
|
||||||
/* read the value, possibly '\0' terminated */
|
/* read the value, possibly '\0' terminated */
|
||||||
if (tree) {
|
|
||||||
/* keys named "gfid-req" contain a GFID in hex */
|
/* keys named "gfid-req" contain a GFID in hex */
|
||||||
if (value_len == 16 && (
|
if (value_len == 16 && (
|
||||||
!strncmp("gfid-req", key, 8) ||
|
!strncmp("gfid-req", key, 8) ||
|
||||||
!strncmp("transaction_id", key, 14) ||
|
!strncmp("transaction_id", key, 14) ||
|
||||||
!strncmp("originator_uuid", key, 15))) {
|
!strncmp("originator_uuid", key, 15))) {
|
||||||
char *gfid_s;
|
char *gfid_s;
|
||||||
e_guid_t gfid;
|
e_guid_t gfid;
|
||||||
|
|
||||||
tvb_get_ntohguid(tvb, offset, &gfid);
|
tvb_get_ntohguid(tvb, offset, &gfid);
|
||||||
|
|
||||||
gfid_s = guid_to_str(wmem_packet_scope(), &gfid);
|
gfid_s = guid_to_str(wmem_packet_scope(), &gfid);
|
||||||
dict_item = proto_tree_add_guid_format(subtree, hf_glusterfs_gfid,
|
dict_item = proto_tree_add_guid_format(subtree, hf_glusterfs_gfid,
|
||||||
tvb, offset, 16, &gfid,
|
tvb, offset, 16, &gfid,
|
||||||
"%s: %s", key, gfid_s);
|
"%s: %s", key, gfid_s);
|
||||||
/* this is a changelog in binary format */
|
/* this is a changelog in binary format */
|
||||||
} else if (value_len == 12 && !strncmp("trusted.afr.", key, 12)) {
|
} else if (value_len == 12 && !strncmp("trusted.afr.", key, 12)) {
|
||||||
dict_item = proto_tree_add_bytes_format(subtree, hf_gluster_trusted_afr_key, tvb, offset, 12,
|
dict_item = proto_tree_add_bytes_format(subtree, hf_gluster_trusted_afr_key, tvb, offset, 12,
|
||||||
NULL, "%s: 0x%.8x%.8x%.8x", key,
|
NULL, "%s: 0x%.8x%.8x%.8x", key,
|
||||||
tvb_get_letohl(tvb, offset + 0),
|
tvb_get_letohl(tvb, offset + 0),
|
||||||
tvb_get_letohl(tvb, offset + 4),
|
tvb_get_letohl(tvb, offset + 4),
|
||||||
tvb_get_letohl(tvb, offset + 8));
|
tvb_get_letohl(tvb, offset + 8));
|
||||||
} else {
|
} else {
|
||||||
value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, value_len, ENC_ASCII);
|
value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, value_len, ENC_ASCII);
|
||||||
dict_item = proto_tree_add_string_format(subtree, hf_gluster_dict_value, tvb, offset, value_len, value, "%s: %s",
|
dict_item = proto_tree_add_string_format(subtree, hf_gluster_dict_value, tvb, offset, value_len, value, "%s: %s",
|
||||||
key, value);
|
key, value);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
offset += value_len;
|
offset += value_len;
|
||||||
if (tree)
|
proto_item_set_len (dict_item, offset - start_offset2);
|
||||||
proto_item_set_len (dict_item, offset - start_offset2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (roundup) {
|
if (roundup) {
|
||||||
|
@ -744,35 +724,34 @@ gluster_rpc4_0_dissect_dict(proto_tree *tree, tvbuff_t *tvb, int hfindex, int of
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
|
||||||
/* read the value, possibly '\0' terminated */
|
/* read the value, possibly '\0' terminated */
|
||||||
if (tree) {
|
|
||||||
/* keys named "gfid-req" contain a GFID in hex */
|
|
||||||
if (val_len == 16 && (
|
|
||||||
!strncmp("gfid-req", key, 8) ||
|
|
||||||
!strncmp("transaction_id", key, 14) ||
|
|
||||||
!strncmp("originator_uuid", key, 15))) {
|
|
||||||
tvb_get_ntohguid(tvb, offset, &gfid);
|
|
||||||
|
|
||||||
gfid_s = guid_to_str(wmem_packet_scope(), &gfid);
|
/* keys named "gfid-req" contain a GFID in hex */
|
||||||
dict_item = proto_tree_add_guid_format(subtree, hf_glusterfs_gfid,
|
if (val_len == 16 && (
|
||||||
tvb, offset, 16, &gfid,
|
!strncmp("gfid-req", key, 8) ||
|
||||||
"%s: %s", key, gfid_s);
|
!strncmp("transaction_id", key, 14) ||
|
||||||
/* this is a changelog in binary format */
|
!strncmp("originator_uuid", key, 15))) {
|
||||||
} else if (val_len == 12 && !strncmp("trusted.afr.", key, 12)) {
|
tvb_get_ntohguid(tvb, offset, &gfid);
|
||||||
dict_item = proto_tree_add_bytes_format(subtree, hf_gluster_trusted_afr_key, tvb, offset, 12,
|
|
||||||
NULL, "%s: 0x%.8x%.8x%.8x", key,
|
gfid_s = guid_to_str(wmem_packet_scope(), &gfid);
|
||||||
tvb_get_letohl(tvb, offset + 0),
|
dict_item = proto_tree_add_guid_format(subtree, hf_glusterfs_gfid,
|
||||||
tvb_get_letohl(tvb, offset + 4),
|
tvb, offset, 16, &gfid,
|
||||||
tvb_get_letohl(tvb, offset + 8));
|
"%s: %s", key, gfid_s);
|
||||||
} else {
|
/* this is a changelog in binary format */
|
||||||
value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, val_len, ENC_ASCII);
|
} else if (val_len == 12 && !strncmp("trusted.afr.", key, 12)) {
|
||||||
dict_item = proto_tree_add_string_format(subtree, hf_gluster_dict_value, tvb, offset, val_len, value, "%s: %s",
|
dict_item = proto_tree_add_bytes_format(subtree, hf_gluster_trusted_afr_key, tvb, offset, 12,
|
||||||
key, value);
|
NULL, "%s: 0x%.8x%.8x%.8x", key,
|
||||||
}
|
tvb_get_letohl(tvb, offset + 0),
|
||||||
|
tvb_get_letohl(tvb, offset + 4),
|
||||||
|
tvb_get_letohl(tvb, offset + 8));
|
||||||
|
} else {
|
||||||
|
value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, val_len, ENC_ASCII);
|
||||||
|
dict_item = proto_tree_add_string_format(subtree, hf_gluster_dict_value, tvb, offset, val_len, value, "%s: %s",
|
||||||
|
key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
offset += val_len;
|
offset += val_len;
|
||||||
if (tree)
|
proto_item_set_len (dict_item, offset - start_offset2);
|
||||||
proto_item_set_len (dict_item, offset - start_offset2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proto_item_set_len (subtree_item, offset - start_offset);
|
proto_item_set_len (subtree_item, offset - start_offset);
|
||||||
|
@ -789,13 +768,10 @@ gluster_dissect_common_reply(tvbuff_t *tvb, int offset,
|
||||||
|
|
||||||
offset = dissect_rpc_uint32(tvb, tree, hf_gluster_op_ret, offset);
|
offset = dissect_rpc_uint32(tvb, tree, hf_gluster_op_ret, offset);
|
||||||
|
|
||||||
if (tree) {
|
op_errno = tvb_get_ntohl(tvb, offset);
|
||||||
op_errno = tvb_get_ntohl(tvb, offset);
|
errno_item = proto_tree_add_int(tree, hf_gluster_op_errno, tvb,
|
||||||
errno_item = proto_tree_add_int(tree, hf_gluster_op_errno, tvb,
|
offset, 4, op_errno);
|
||||||
offset, 4, op_errno);
|
proto_item_append_text(errno_item, " (%s)", g_strerror(op_errno));
|
||||||
proto_item_append_text(errno_item, " (%s)",
|
|
||||||
g_strerror(op_errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
|
||||||
|
@ -817,17 +793,13 @@ _glusterfs_gfs3_common_readdir_reply(tvbuff_t *tvb, proto_tree *tree, int offset
|
||||||
|
|
||||||
offset = dissect_rpc_uint32(tvb, tree, hf_glusterfs_entries, offset);
|
offset = dissect_rpc_uint32(tvb, tree, hf_glusterfs_entries, offset);
|
||||||
|
|
||||||
if (tree) {
|
op_errno = tvb_get_ntohl(tvb, offset);
|
||||||
op_errno = tvb_get_ntohl(tvb, offset);
|
errno_item = proto_tree_add_int(tree, hf_gluster_op_errno, tvb,
|
||||||
errno_item = proto_tree_add_int(tree, hf_gluster_op_errno, tvb,
|
offset, 4, op_errno);
|
||||||
offset, 4, op_errno);
|
if (op_errno == 0)
|
||||||
if (op_errno == 0)
|
proto_item_append_text(errno_item, " (More replies follow)");
|
||||||
proto_item_append_text(errno_item,
|
else if (op_errno == 2 /* ENOENT */)
|
||||||
" (More replies follow)");
|
proto_item_append_text(errno_item, " (Last reply)");
|
||||||
else if (op_errno == 2 /* ENOENT */)
|
|
||||||
proto_item_append_text(errno_item,
|
|
||||||
" (Last reply)");
|
|
||||||
}
|
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -1147,9 +1119,7 @@ glusterfs_rpc_dissect_setattr(proto_tree *tree, tvbuff_t *tvb, int offset)
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
if (tree)
|
proto_tree_add_bitmask(tree, tvb, offset, hf_glusterfs_setattr_valid,
|
||||||
proto_tree_add_bitmask(tree, tvb, offset,
|
|
||||||
hf_glusterfs_setattr_valid,
|
|
||||||
ett_glusterfs_setattr_valid, flag_bits, ENC_NA);
|
ett_glusterfs_setattr_valid, flag_bits, ENC_NA);
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue