aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gsm_a_bssmap.c
diff options
context:
space:
mode:
authorIvan Nardi <nardi.ivan@gmail.com>2017-06-05 13:24:03 +0200
committerMichael Mann <mmann78@netscape.net>2017-06-05 13:00:14 +0000
commit795077b3ea95b1c2fb8f8cf5c6971da05a0c3ed2 (patch)
tree5fcee032687aa67ea9722dc183f8e4fddfc3b708 /epan/dissectors/packet-gsm_a_bssmap.c
parent21305e9835d40dbd812514471397fb1de3a0740c (diff)
[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 <pascal.quantin@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-gsm_a_bssmap.c')
-rw-r--r--epan/dissectors/packet-gsm_a_bssmap.c10
1 files changed, 4 insertions, 6 deletions
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,