aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-isns.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-isns.c')
-rw-r--r--epan/dissectors/packet-isns.c82
1 files changed, 37 insertions, 45 deletions
diff --git a/epan/dissectors/packet-isns.c b/epan/dissectors/packet-isns.c
index 1252be9b43..b2b2110e9c 100644
--- a/epan/dissectors/packet-isns.c
+++ b/epan/dissectors/packet-isns.c
@@ -940,25 +940,21 @@ dissect_isns_attr_iscsi_node_type(tvbuff_t *tvb, guint offset, proto_tree *paren
static guint
dissect_isns_attr_portal_security_bitmap(tvbuff_t *tvb, guint offset, proto_tree *parent_tree, int hf_index, guint32 tag, guint32 len)
{
- if(parent_tree){
- proto_item *item;
- proto_tree *tree;
- guint32 psb = tvb_get_ntohl(tvb, offset + 8);
-
- item = proto_tree_add_item(parent_tree, hf_index, tvb, offset + 8, len, ENC_BIG_ENDIAN);
- tree = proto_item_add_subtree(item, ett_isns_attribute);
+ static const int * flags[] = {
+ &hf_isns_psb_tunnel_mode,
+ &hf_isns_psb_transport_mode,
+ &hf_isns_psb_pfs,
+ &hf_isns_psb_aggressive_mode,
+ &hf_isns_psb_main_mode,
+ &hf_isns_psb_ike_ipsec,
+ &hf_isns_psb_bitmap,
+ NULL
+ };
- proto_tree_add_boolean(tree, hf_isns_psb_tunnel_mode, tvb, offset+8, 4, psb);
- proto_tree_add_boolean(tree, hf_isns_psb_transport_mode, tvb, offset+8, 4, psb);
- proto_tree_add_boolean(tree, hf_isns_psb_pfs, tvb, offset+8, 4, psb);
- proto_tree_add_boolean(tree, hf_isns_psb_aggressive_mode, tvb, offset+8, 4, psb);
- proto_tree_add_boolean(tree, hf_isns_psb_main_mode, tvb, offset+8, 4, psb);
- proto_tree_add_boolean(tree, hf_isns_psb_ike_ipsec, tvb, offset+8, 4, psb);
- proto_tree_add_boolean(tree, hf_isns_psb_bitmap, tvb, offset+8, 4, psb);
+ proto_tree_add_bitmask(parent_tree, tvb, offset+8, hf_index, ett_isns_attribute, flags, ENC_BIG_ENDIAN);
- proto_tree_add_uint(tree, hf_isns_attr_tag, tvb, offset, 4, tag);
- proto_tree_add_uint(tree, hf_isns_attr_len, tvb, offset+4, 4, len);
- }
+ proto_tree_add_uint(parent_tree, hf_isns_attr_tag, tvb, offset, 4, tag);
+ proto_tree_add_uint(parent_tree, hf_isns_attr_len, tvb, offset+4, 4, len);
return offset+8+len;
}
@@ -968,36 +964,32 @@ dissect_isns_attr_portal_security_bitmap(tvbuff_t *tvb, guint offset, proto_tree
static guint
dissect_isns_attr_scn_bitmap(tvbuff_t *tvb, guint offset, proto_tree *parent_tree, int hf_index, guint32 tag, guint32 len)
{
- if(parent_tree){
- proto_item *item;
- proto_tree *tree;
- guint32 scn_bitmap = tvb_get_ntohl(tvb, offset + 8);
-
- item = proto_tree_add_item(parent_tree, hf_index, tvb, offset + 8, len, ENC_BIG_ENDIAN);
- tree = proto_item_add_subtree(item, ett_isns_attribute);
+ /*
+ 24 INITIATOR AND SELF INFORMATION ONLY
+ 25 TARGET AND SELF INFORMATION ONLY
+ 26 MANAGEMENT REGISTRATION/SCN
+ 27 OBJECT REMOVED
+ 28 OBJECT ADDED
+ 29 OBJECT UPDATED
+ 30 DD/DDS MEMBER REMOVED (Mgmt Reg/SCN only)
+ 31 (Lsb) DD/DDS MEMBER ADDED (Mgmt Reg/SCN only)
+ */
+ static const int * flags[] = {
+ &hf_isns_scn_bitmap_initiator_and_self_information_only,
+ &hf_isns_scn_bitmap_target_and_self_information_only,
+ &hf_isns_scn_bitmap_management_registration_scn,
+ &hf_isns_scn_bitmap_object_removed,
+ &hf_isns_scn_bitmap_object_added,
+ &hf_isns_scn_bitmap_object_updated,
+ &hf_isns_scn_bitmap_dd_dds_member_removed,
+ &hf_isns_scn_bitmap_dd_dds_member_added,
+ NULL
+ };
- /*
- 24 INITIATOR AND SELF INFORMATION ONLY
- 25 TARGET AND SELF INFORMATION ONLY
- 26 MANAGEMENT REGISTRATION/SCN
- 27 OBJECT REMOVED
- 28 OBJECT ADDED
- 29 OBJECT UPDATED
- 30 DD/DDS MEMBER REMOVED (Mgmt Reg/SCN only)
- 31 (Lsb) DD/DDS MEMBER ADDED (Mgmt Reg/SCN only)
- */
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_initiator_and_self_information_only, tvb, offset+8, 4, scn_bitmap);
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_target_and_self_information_only, tvb, offset+8, 4, scn_bitmap);
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_management_registration_scn, tvb, offset+8, 4, scn_bitmap);
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_object_removed, tvb, offset+8, 4, scn_bitmap);
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_object_added, tvb, offset+8, 4, scn_bitmap);
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_object_updated, tvb, offset+8, 4, scn_bitmap);
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_dd_dds_member_removed, tvb, offset+8, 4, scn_bitmap);
- proto_tree_add_boolean(tree, hf_isns_scn_bitmap_dd_dds_member_added, tvb, offset+8, 4, scn_bitmap);
+ proto_tree_add_bitmask(parent_tree, tvb, offset+8, hf_index, ett_isns_attribute, flags, ENC_BIG_ENDIAN);
- proto_tree_add_uint(tree, hf_isns_attr_tag, tvb, offset, 4, tag);
- proto_tree_add_uint(tree, hf_isns_attr_len, tvb, offset+4, 4, len);
- }
+ proto_tree_add_uint(parent_tree, hf_isns_attr_tag, tvb, offset, 4, tag);
+ proto_tree_add_uint(parent_tree, hf_isns_attr_len, tvb, offset+4, 4, len);
return offset+8+len;
}