diff --git a/diameter/TGPP.xml b/diameter/TGPP.xml index ea72c2e027..9246a40e57 100644 --- a/diameter/TGPP.xml +++ b/diameter/TGPP.xml @@ -1059,12 +1059,9 @@ - - - - + - + diff --git a/epan/dissectors/packet-diameter_3gpp.c b/epan/dissectors/packet-diameter_3gpp.c index 5dcc2e9ce6..0b8936360c 100644 --- a/epan/dissectors/packet-diameter_3gpp.c +++ b/epan/dissectors/packet-diameter_3gpp.c @@ -38,18 +38,23 @@ static expert_field ei_diameter_3gpp_plmn_id_wrong_len = EI_INIT; /* Initialize the protocol and registered fields */ static int proto_diameter_3gpp = -1; -static int hf_diameter_3gpp_timezone = -1; -static int hf_diameter_3gpp_timezone_adjustment = -1; -static int hf_diameter_3gpp_rat_type = -1; -static int hf_diameter_3gpp_visited_nw_id = -1; -static int hf_diameter_3gpp_path = -1; -static int hf_diameter_3gpp_contact = -1; -/* static int hf_diameter_3gpp_user_data = -1; */ -static int hf_diameter_3gpp_ipaddr = -1; -static int hf_diameter_3gpp_mbms_required_qos_prio = -1; -static int hf_diameter_3gpp_tmgi = -1; -static int hf_diameter_3gpp_service_ind = -1; -static int hf_diameter_mbms_service_id = -1; +static int hf_diameter_3gpp_timezone = -1; +static int hf_diameter_3gpp_timezone_adjustment = -1; +static int hf_diameter_3gpp_rat_type = -1; +static int hf_diameter_3gpp_visited_nw_id = -1; +static int hf_diameter_3gpp_path = -1; +static int hf_diameter_3gpp_contact = -1; +/* static int hf_diameter_3gpp_user_data = -1; */ +static int hf_diameter_3gpp_ipaddr = -1; +static int hf_diameter_3gpp_mbms_required_qos_prio = -1; +static int hf_diameter_3gpp_tmgi = -1; +static int hf_diameter_3gpp_service_ind = -1; +static int hf_diameter_3gpp_req_nodes = -1; +static int hf_diameter_3gpp_req_nodes_bit0 = -1; +static int hf_diameter_3gpp_req_nodes_bit1 = -1; +static int hf_diameter_3gpp_req_nodes_bit2 = -1; +static int hf_diameter_3gpp_req_nodes_bit3 = -1; +static int hf_diameter_mbms_service_id = -1; static int hf_diameter_3gpp_spare_bits = -1; static int hf_diameter_3gpp_uar_flags_flags = -1; static int hf_diameter_3gpp_uar_flags_flags_bit0 = -1; @@ -498,6 +503,7 @@ static gint diameter_3gpp_mbms_bearer_result_ett = -1; static gint diameter_3gpp_tmgi_allocation_result_ett = -1; static gint diameter_3gpp_tmgi_deallocation_result_ett = -1; static gint diameter_3gpp_sar_flags_ett = -1; +static gint diameter_3gpp_req_nodes_ett = -1; static gint diameter_3gpp_emergency_services_flags_ett = -1; static gint diameter_3gpp_pur_flags_ett = -1; static gint diameter_3gpp_clr_flags_ett = -1; @@ -1284,6 +1290,35 @@ dissect_diameter_3gpp_service_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_t return length; } +/* + * AVP Code: 713 Requested-Nodes + */ + +static int +dissect_diameter_3gpp_req_nodes(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data) +{ + + static const int* diameter_3gpp_req_nodes_fields[] = { + &hf_diameter_3gpp_req_nodes_bit3, + &hf_diameter_3gpp_req_nodes_bit2, + &hf_diameter_3gpp_req_nodes_bit1, + &hf_diameter_3gpp_req_nodes_bit0, + NULL + }; + + diam_sub_dis_t* diam_sub_dis_inf = (diam_sub_dis_t*)data; + + /* Hide the item created in packet-diameter.c and only show the one created here */ + proto_item_set_hidden(diam_sub_dis_inf->item); + + /* Change to BMT_NO_FALSE if the list gets to long(?)*/ + proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_diameter_3gpp_req_nodes, + diameter_3gpp_req_nodes_ett, diameter_3gpp_req_nodes_fields, ENC_BIG_ENDIAN, BMT_NO_FALSE); + + return 4; +} + + /* AVP Code: 900 TMGI */ static int dissect_diameter_3gpp_tmgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) @@ -2950,6 +2985,9 @@ proto_reg_handoff_diameter_3gpp(void) /* AVP Code: 704 Service-Indication */ dissector_add_uint("diameter.3gpp", 704, create_dissector_handle(dissect_diameter_3gpp_service_ind, proto_diameter_3gpp)); + /* AVP Code: 713 Requested-Nodes */ + dissector_add_uint("diameter.3gpp", 713, create_dissector_handle(dissect_diameter_3gpp_req_nodes, proto_diameter_3gpp)); + /* AVP Code: 900 TMGI */ dissector_add_uint("diameter.3gpp", 900, create_dissector_handle(dissect_diameter_3gpp_tmgi, proto_diameter_3gpp)); @@ -3339,6 +3377,31 @@ proto_register_diameter_3gpp(void) FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, + { &hf_diameter_3gpp_req_nodes, + { "Requested-Nodes", "diameter.3gpp.req_nodes", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_diameter_3gpp_req_nodes_bit0, + { "MME", "diameter.3gpp.req_nodes_bit0", + FT_BOOLEAN, 32, NULL, 0x00000001, + NULL, HFILL } + }, + { &hf_diameter_3gpp_req_nodes_bit1, + { "SGSN", "diameter.3gpp.req_nodes_bit1", + FT_BOOLEAN, 32, NULL, 0x00000002, + NULL, HFILL } + }, + { &hf_diameter_3gpp_req_nodes_bit2, + { "3GPP-AAA-SERVER-TWAN", "diameter.3gpp.req_nodes_bit2", + FT_BOOLEAN, 32, NULL, 0x00000004, + NULL, HFILL } + }, + { &hf_diameter_3gpp_req_nodes_bit3, + { "AMF", "diameter.3gpp.req_nodes_bit3", + FT_BOOLEAN, 32, NULL, 0x00000008, + NULL, HFILL } + }, { &hf_diameter_mbms_service_id, { "MBMS Service ID", "diameter.3gpp.mbms_service_id", FT_UINT24, BASE_HEX, NULL, 0x0, @@ -5676,6 +5739,7 @@ proto_register_diameter_3gpp(void) &diameter_3gpp_tmgi_allocation_result_ett, &diameter_3gpp_tmgi_deallocation_result_ett, &diameter_3gpp_sar_flags_ett, + &diameter_3gpp_req_nodes_ett, &diameter_3gpp_emergency_services_flags_ett, &diameter_3gpp_pur_flags_ett, &diameter_3gpp_clr_flags_ett,