diff options
author | Anders Broman <anders.broman@ericsson.com> | 2011-04-06 15:01:42 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2011-04-06 15:01:42 +0000 |
commit | 2251b8d331c7dc609a90a981c534a8bbd70541ee (patch) | |
tree | d8a21f51d0cdae124e04897dd842e4ba8b98226f | |
parent | 964690903fe3fbaae37a8af8eed647152ed42773 (diff) | |
download | wireshark-2251b8d331c7dc609a90a981c534a8bbd70541ee.tar.gz wireshark-2251b8d331c7dc609a90a981c534a8bbd70541ee.tar.bz2 wireshark-2251b8d331c7dc609a90a981c534a8bbd70541ee.zip |
From Johan Wåhl:
Add dissection of feature list flags.
svn path=/trunk/; revision=36497
-rw-r--r-- | epan/dissectors/packet-diameter_3gpp.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/epan/dissectors/packet-diameter_3gpp.c b/epan/dissectors/packet-diameter_3gpp.c index dddfac3eb2..bff5219a63 100644 --- a/epan/dissectors/packet-diameter_3gpp.c +++ b/epan/dissectors/packet-diameter_3gpp.c @@ -56,6 +56,10 @@ static int hf_diameter_3gpp_tmgi = -1; static int hf_diameter_mbms_service_id = -1; static int hf_diameter_address_digits = -1; static int hf_diameter_3gpp_spare_bits = -1; +static int hf_diameter_3gpp_feature_list_flags = -1; +static int hf_diameter_3gpp_feature_list_flags_bit0 = -1; +static int hf_diameter_3gpp_feature_list_flags_bit1 = -1; +static int hf_diameter_3gpp_feature_list_flags_bit2 = -1; static int hf_diameter_3gpp_ulr_flags = -1; static int hf_diameter_3gpp_ulr_flags_bit0 = -1; static int hf_diameter_3gpp_ulr_flags_bit1 = -1; @@ -101,6 +105,7 @@ static int hf_diameter_3gpp_idr_flags_bit2 = -1; static int hf_diameter_3gpp_idr_flags_bit3 = -1; static int hf_diameter_3gpp_idr_flags_bit4 = -1; static gint diameter_3gpp_msisdn_ett = -1; +static gint diameter_3gpp_feature_list_ett = -1; static gint diameter_3gpp_tmgi_ett = -1; static gint diameter_3gpp_ulr_flags_ett = -1; static gint diameter_3gpp_ula_flags_ett = -1; @@ -114,6 +119,38 @@ static gint diameter_3gpp_idr_flags_ett = -1; /* Dissector handles */ static dissector_handle_t xml_handle; + +/* AVP Code: 630 Feature-List + * imscxdx.xml + * IMS Cx Dx AVPS 3GPP TS 29.229 + */ + +static int +dissect_diameter_3gpp_feature_list(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + + proto_item* item; + proto_tree *sub_tree; + int offset = 0; + guint32 bit_offset; + + item = proto_tree_add_item(tree, hf_diameter_3gpp_feature_list_flags, tvb, offset, 4, FALSE); + sub_tree = proto_item_add_subtree(item, diameter_3gpp_feature_list_ett); + + bit_offset = 0; + proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 29, FALSE); + bit_offset+=29; + proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_feature_list_flags_bit2, tvb, bit_offset, 1, FALSE); + bit_offset++; + proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_feature_list_flags_bit1, tvb, bit_offset, 1, FALSE); + bit_offset++; + proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_feature_list_flags_bit0, tvb, bit_offset, 1, FALSE); + bit_offset++; + + offset = bit_offset>>3; + return offset; + +} + /* AVP Code: 701 MSISDN */ static int dissect_diameter_3gpp_msisdn(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { @@ -475,6 +512,9 @@ proto_reg_handoff_diameter_3gpp(void) /* AVP Code: 606 User-Data */ dissector_add_uint("diameter.3gpp", 606, new_create_dissector_handle(dissect_diameter_3gpp_user_data, proto_diameter_3gpp)); + /* AVP Code: 630 Feature-List */ + dissector_add_uint("diameter.3gpp", 630, new_create_dissector_handle(dissect_diameter_3gpp_feature_list, proto_diameter_3gpp)); + /* AVP Code: 701 MSISDN */ dissector_add_uint("diameter.3gpp", 701, new_create_dissector_handle(dissect_diameter_3gpp_msisdn, proto_diameter_3gpp)); @@ -569,6 +609,26 @@ proto_register_diameter_3gpp(void) FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, + { &hf_diameter_3gpp_feature_list_flags, + { "Feature-List Flags", "diameter.3gpp.feature_list_flags", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_diameter_3gpp_feature_list_flags_bit0, + { "Shared IFC Sets", "diameter.3gpp.feature_list_flags_bit0", + FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0, + NULL, HFILL } + }, + { &hf_diameter_3gpp_feature_list_flags_bit1, + { "Alias Indication", "diameter.3gpp.feature_list_flags_bit1", + FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0, + NULL, HFILL } + }, + { &hf_diameter_3gpp_feature_list_flags_bit2, + { "IMS Restoration Indication", "diameter.3gpp.feature_list_flags_bit2", + FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0, + NULL, HFILL } + }, { &hf_diameter_3gpp_ulr_flags, { "ULR Flags", "diameter.3gpp.ulr_flags", FT_UINT32, BASE_HEX, NULL, 0x0, @@ -794,6 +854,7 @@ proto_register_diameter_3gpp(void) /* Setup protocol subtree array */ static gint *ett[] = { &diameter_3gpp_msisdn_ett, + &diameter_3gpp_feature_list_ett, &diameter_3gpp_tmgi_ett, &diameter_3gpp_ulr_flags_ett, &diameter_3gpp_ula_flags_ett, |