aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders <anders.broman@ericsson.com>2017-10-30 22:01:16 +0100
committerMichael Mann <mmann78@netscape.net>2017-10-31 00:10:15 +0000
commitd887d76f277be4aad9c0e86292d2f7b5b8537abc (patch)
treec4f3ba16d3e14515ff5b1741b6057d8b78c3e4b0
parent90867dd8e37c3e348ad2ecac9f30679666fb9fbe (diff)
[BSSMAP-LE] Correct dissection of 10.20 Positioning Data.
Change-Id: Ia0c3b688dfdcd9fdad4f65df12ef97db99bdb095 Reviewed-on: https://code.wireshark.org/review/24192 Reviewed-by: Anders Broman <a.broman58@gmail.com> Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r--epan/dissectors/packet-gsm_bssmap_le.c68
1 files changed, 62 insertions, 6 deletions
diff --git a/epan/dissectors/packet-gsm_bssmap_le.c b/epan/dissectors/packet-gsm_bssmap_le.c
index 86cb2bd16e..fe7e3268e9 100644
--- a/epan/dissectors/packet-gsm_bssmap_le.c
+++ b/epan/dissectors/packet-gsm_bssmap_le.c
@@ -188,12 +188,36 @@ static const value_string bssmap_le_pos_method_vals[] = {
{ 1, "Mobile Assisted E-OTD" },
{ 2, "Mobile Based E-OTD" },
{ 3, "Assisted GPS" },
- { 4, "Assisted GANSS " },
+ { 4, "Assisted GANSS" },
{ 5, "Assisted GPS and Assisted GANSS" },
{ 0, NULL }
};
+static const value_string bssmap_le_pos_data_pos_method_vals[] = {
+ { 0, "Timing Advance" },
+ { 1, "Reserved" },
+ { 2, "Reserved" },
+ { 3, "Mobile Assisted E - OTD" },
+ { 4, "Mobile Based E - OTD" },
+ { 5, "Mobile Assisted GPS" },
+ { 6, "Mobile Based GPS" },
+ { 7, "Conventional GPS" },
+ { 8, "U - TDOA" },
+ { 9, "Reserved for UTRAN use only" },
+ { 0xa, "Reserved for UTRAN use only" },
+ { 0xb, "Reserved for UTRAN use only" },
+ { 0xc, "Cell ID" },
+ { 0, NULL }
+};
+static const value_string bssmap_le_pos_data_usage_vals[] = {
+ { 0, "Attempted unsuccessfully due to failure or interruption" },
+ { 1, "Attempted successfully : results not used to generate location" },
+ { 2, "Attempted successfully : results used to verify but not generate location" },
+ { 3, "Attempted successfully : results used to generate location" },
+ { 4, "Attempted successfully : method or methods used by the MS cannot be determined" },
+ { 0, NULL }
+};
/* Initialize the protocol and registered fields */
static int proto_bssmap_le = -1;
@@ -235,6 +259,9 @@ static int hf_gsm_bssmap_le_apdu = -1;
static int hf_gsm_bssmap_le_message_elements = -1;
static int hf_gsm_bssmap_le_location_inf = -1;
static int hf_gsm_bssmap_le_pos_method = -1;
+static int hf_gsm_bssmap_le_pos_data_disc = -1;
+static int hf_gsm_bssmap_le_pos_data_pos_method = -1;
+static int hf_gsm_bssmap_le_pos_data_usage = -1;
/* Initialize the subtree pointers */
@@ -601,15 +628,29 @@ de_bmaple_location_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
* 10.20 Positioning Data
*/
static guint16
-de_bmaple_pos_dta(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_bmaple_pos_dta(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- tvbuff_t *data_tvb;
- guint32 curr_offset;
+ guint32 curr_offset, value;
curr_offset = offset;
- data_tvb = tvb_new_subset_length(tvb, curr_offset, len);
- dissect_geographical_description(data_tvb, pinfo, tree);
+ /* Octet 3 spare Positioning Data Discriminator*/
+ proto_tree_add_item_ret_uint(tree, hf_gsm_bssmap_le_pos_data_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &value);
+ curr_offset++;
+
+ if (value != 0) {
+ return len;
+ }
+ /* 0000 indicate usage of each positioning method that was attempted either successfully or unsuccessfully;
+ * 1 octet of data is provided for each positioning method included
+ */
+ while (curr_offset < (offset +len)) {
+ /* Octet x positioning method usage*/
+ proto_tree_add_item(tree, hf_gsm_bssmap_le_pos_data_pos_method, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_bssmap_le_pos_data_usage, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ }
+
return(len);
}
@@ -1222,6 +1263,21 @@ proto_register_gsm_bssmap_le(void)
FT_UINT8, BASE_HEX, VALS(bssmap_le_pos_method_vals), 0x0,
NULL, HFILL }
},
+ { &hf_gsm_bssmap_le_pos_data_disc,
+ { "Positioning Data Discriminator", "gsm_bssmap_le.pos_data_disc",
+ FT_UINT8, BASE_HEX, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_bssmap_le_pos_data_pos_method,
+ { "Positioning Method", "gsm_bssmap_le.pos_data.pos_method",
+ FT_UINT8, BASE_HEX, VALS(bssmap_le_pos_data_pos_method_vals), 0xf8,
+ NULL, HFILL }
+ },
+ { &hf_gsm_bssmap_le_pos_data_usage,
+ { "Usage", "gsm_bssmap_le.pos_data.usage",
+ FT_UINT8, BASE_HEX, VALS(bssmap_le_pos_data_usage_vals), 0x03,
+ NULL, HFILL }
+ },
};
expert_module_t* expert_gsm_a_bssmap_le;