From 795077b3ea95b1c2fb8f8cf5c6971da05a0c3ed2 Mon Sep 17 00:00:00 2001 From: Ivan Nardi Date: Mon, 5 Jun 2017 13:24:03 +0200 Subject: [Bssmap] Fix and improve dissection See TS 48.008: * in "Perform Location Request" msg, "Cell Identifier" ie is optional, not mandatory (3.2.1.71) * in "Uplink Releae Command" msg, "Cause" ie is mandatory (3.2.1.62) * fixed and improved "Service Handover" ie dissection (3.2.2.75) Change-Id: I2194bf56ef21a2cccbd4f2ed7ff22565af04cddd Reviewed-on: https://code.wireshark.org/review/21957 Reviewed-by: Pascal Quantin Petri-Dish: Pascal Quantin Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann --- epan/dissectors/packet-gsm_a_bssmap.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'epan/dissectors/packet-gsm_a_bssmap.c') diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c index 5a8d1cfc9b..396f90afc5 100644 --- a/epan/dissectors/packet-gsm_a_bssmap.c +++ b/epan/dissectors/packet-gsm_a_bssmap.c @@ -3082,7 +3082,6 @@ be_seg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guin /* * 3.2.2.75 Service Handover */ -#if 0 static const value_string gsm_a_bssmap_serv_ho_inf_vals[] = { { 0, "Handover to UTRAN or cdma2000 should be performed - Handover to UTRAN or cdma2000 is preferred" }, { 1, "Handover to UTRAN or cdma2000 should not be performed - Handover to GSM is preferred" }, @@ -3094,7 +3093,6 @@ static const value_string gsm_a_bssmap_serv_ho_inf_vals[] = { { 7, "no information available for service based handover" }, { 0, NULL } }; -#endif static guint16 be_serv_ho(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { @@ -3104,7 +3102,7 @@ be_serv_ho(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offs /* Service Handover information */ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_gsm_a_bssmap_serv_ho_inf, tvb, curr_offset+1, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gsm_a_bssmap_serv_ho_inf, tvb, curr_offset, 1, ENC_BIG_ENDIAN); curr_offset++; return(len); } @@ -6388,7 +6386,7 @@ bssmap_uplink_rel_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, g curr_len = len; /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_OPT_TLV(BE_CAUSE, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + ELEM_MAND_TLV(BE_CAUSE, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL, ei_gsm_a_bssmap_missing_mandatory_element); EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_bssmap_extraneous_data); } @@ -6570,7 +6568,7 @@ bssmap_perf_loc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui /* Location Type 3.2.2.63 M 3-n */ ELEM_MAND_TLV(BE_LOC_TYPE, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_TYPE, NULL, ei_gsm_a_bssmap_missing_mandatory_element); /* Cell Identifier 3.2.2.17 O 5-10 */ - ELEM_MAND_TLV(BE_CELL_ID, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL, ei_gsm_a_bssmap_missing_mandatory_element); + ELEM_OPT_TLV(BE_CELL_ID, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); /* Classmark Information Type 3 3.2.2.20 O 3-14 */ ELEM_OPT_TLV(BE_CM_INFO_3, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL); /* LCS Client Type 3.2.2.67 C (note 3) 3-n */ @@ -7555,7 +7553,7 @@ proto_register_gsm_a_bssmap(void) }, { &hf_gsm_a_bssmap_serv_ho_inf, { "Service Handover information", "gsm_a.bssmap.serv_ho_inf", - FT_UINT8, BASE_HEX, NULL, 0x07, + FT_UINT8, BASE_DEC, VALS(gsm_a_bssmap_serv_ho_inf_vals), 0x07, NULL, HFILL } }, { &hf_gsm_a_bssmap_max_nb_traffic_chan, -- cgit v1.2.3