From 44689439cd83ec5929e6fa4c225c360622ec1eb8 Mon Sep 17 00:00:00 2001 From: etxrab Date: Thu, 16 Dec 2010 12:26:49 +0000 Subject: From Vincent Helfre: fixed the conversions for utran and eutran threshold which are used for Enhanced Measurement Report. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@35199 f5534014-38df-0310-8fa8-9805f1628bb7 --- epan/dissectors/packet-gsm_a_rr.c | 331 +++++++++++++++++++++++++++++--------- 1 file changed, 258 insertions(+), 73 deletions(-) (limited to 'epan/dissectors/packet-gsm_a_rr.c') diff --git a/epan/dissectors/packet-gsm_a_rr.c b/epan/dissectors/packet-gsm_a_rr.c index efaf97d421..3a0819a096 100644 --- a/epan/dissectors/packet-gsm_a_rr.c +++ b/epan/dissectors/packet-gsm_a_rr.c @@ -612,9 +612,11 @@ static int hf_gsm_a_rr_tdd_multirat_reporting = -1; static int hf_gsm_a_rr_qsearch_p = -1; static int hf_gsm_a_rr_3g_search_prio = -1; static int hf_gsm_a_rr_fdd_reporting_offset = -1; -static int hf_gsm_a_rr_fdd_reporting_threshold = -1; +static int hf_gsm_a_rr_fdd_reporting_threshold_rscp = -1; +static int hf_gsm_a_rr_fdd_reporting_threshold_ecn0 = -1; static int hf_gsm_a_rr_tdd_reporting_offset = -1; -static int hf_gsm_a_rr_tdd_reporting_threshold = -1; +static int hf_gsm_a_rr_tdd_reporting_threshold_rscp = -1; +static int hf_gsm_a_rr_tdd_reporting_threshold_ecn0 = -1; static int hf_gsm_a_rr_fdd_reporting_threshold_2 = -1; static int hf_gsm_a_rr_3g_ccn_active = -1; static int hf_gsm_a_rr_700_reporting_offset = -1; @@ -714,10 +716,12 @@ static int hf_gsm_a_rr_eutran_stop = -1; static int hf_gsm_a_rr_qsearch_c_eutran_initial = -1; static int hf_gsm_a_rr_eutran_rep_quant = -1; static int hf_gsm_a_rr_eutran_multirat_reporting = -1; -static int hf_gsm_a_rr_eutran_fdd_reporting_threshold = -1; +static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp = -1; +static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq = -1; static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_2 = -1; static int hf_gsm_a_rr_eutran_fdd_reporting_offset = -1; -static int hf_gsm_a_rr_eutran_tdd_reporting_threshold = -1; +static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp = -1; +static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq = -1; static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_2 = -1; static int hf_gsm_a_rr_eutran_tdd_reporting_offset = -1; static int hf_gsm_a_rr_eutran_fdd_measurement_report_offset = -1; @@ -4050,14 +4054,70 @@ static const value_string gsm_a_rr_xxx_reporting_offset_vals[] = { { 0, NULL } }; -static const value_string gsm_a_rr_xxx_reporting_threshold_vals[] = { - { 0, "Apply priority reporting if the reported value is above 0 dB"}, - { 1, "Apply priority reporting if the reported value is above 6 dB"}, - { 2, "Apply priority reporting if the reported value is above 12 dB"}, - { 3, "Apply priority reporting if the reported value is above 18 dB"}, - { 4, "Apply priority reporting if the reported value is above 24 dB"}, - { 5, "Apply priority reporting if the reported value is above 30 dB"}, - { 6, "Apply priority reporting if the reported value is above 36 dB"}, +/* The TS 45.008 is not that clear, but it should be understood: threshold = minimum reported value + 6 * resolution + * The minimum reported value, resolution is, for the different access technologies: + * GSM: -111 dBm, 1 dBm + * WCDMA/RSCP: -116 dBm, 1 dBm + * WCDMA/EcN0: -24.5 dB, 0.5 dB + * LTE/RSRP: -140 dBm, 1 dB + * LTE/RSRQ: -19.5 dB, 0.5 dB + */ +static const value_string gsm_a_rr_gsm_reporting_threshold_vals[] = { + { 0, "Apply priority reporting if the reported value is above -111 dBm"}, + { 1, "Apply priority reporting if the reported value is above -105 dBm"}, + { 2, "Apply priority reporting if the reported value is above -99 dBm"}, + { 3, "Apply priority reporting if the reported value is above -93 dBm"}, + { 4, "Apply priority reporting if the reported value is above -87 dBm"}, + { 5, "Apply priority reporting if the reported value is above -81 dBm"}, + { 6, "Apply priority reporting if the reported value is above -75 dBm"}, + { 7, "Never apply priority reporting"}, + { 0, NULL } +}; + +static const value_string gsm_a_rr_wcdma_rscp_reporting_threshold_vals[] = { + { 0, "Apply priority reporting if the reported value is above -116 dBm"}, + { 1, "Apply priority reporting if the reported value is above -110 dBm"}, + { 2, "Apply priority reporting if the reported value is above -104 dBm"}, + { 3, "Apply priority reporting if the reported value is above -98 dBm"}, + { 4, "Apply priority reporting if the reported value is above -92 dBm"}, + { 5, "Apply priority reporting if the reported value is above -86 dBm"}, + { 6, "Apply priority reporting if the reported value is above -80 dBm"}, + { 7, "Never apply priority reporting"}, + { 0, NULL } +}; + +static const value_string gsm_a_rr_wcdma_ecn0_reporting_threshold_vals[] = { + { 0, "Apply priority reporting if the reported value is above -24.5 dB"}, + { 1, "Apply priority reporting if the reported value is above -21.5 dB"}, + { 2, "Apply priority reporting if the reported value is above -17.5 dB"}, + { 3, "Apply priority reporting if the reported value is above -14.5 dB"}, + { 4, "Apply priority reporting if the reported value is above -11.5 dB"}, + { 5, "Apply priority reporting if the reported value is above -8.5 dB"}, + { 6, "Apply priority reporting if the reported value is above -5.5 dB"}, + { 7, "Never apply priority reporting"}, + { 0, NULL } +}; + +static const value_string gsm_a_rr_lte_rsrp_reporting_threshold_vals[] = { + { 0, "Apply priority reporting if the reported value is above -140 dBm"}, + { 1, "Apply priority reporting if the reported value is above -134 dBm"}, + { 2, "Apply priority reporting if the reported value is above -128 dBm"}, + { 3, "Apply priority reporting if the reported value is above -122 dBm"}, + { 4, "Apply priority reporting if the reported value is above -116 dBm"}, + { 5, "Apply priority reporting if the reported value is above -110 dBm"}, + { 6, "Apply priority reporting if the reported value is above -104 dBm"}, + { 7, "Never apply priority reporting"}, + { 0, NULL } +}; + +static const value_string gsm_a_rr_lte_rsrq_reporting_threshold_vals[] = { + { 0, "Apply priority reporting if the reported value is above -19.5 dB"}, + { 1, "Apply priority reporting if the reported value is above -16.5 dB"}, + { 2, "Apply priority reporting if the reported value is above -13.5 dB"}, + { 3, "Apply priority reporting if the reported value is above -10.5 dB"}, + { 4, "Apply priority reporting if the reported value is above -7.5 dB"}, + { 5, "Apply priority reporting if the reported value is above -4.5 dB"}, + { 6, "Apply priority reporting if the reported value is above -1.5 dB"}, { 7, "Never apply priority reporting"}, { 0, NULL } }; @@ -5065,7 +5125,7 @@ de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_of { gint curr_bit_offset; proto_item *item; - gint rep_quant_rsrq; + guint8 rep_quant; curr_bit_offset = bit_offset; @@ -5073,7 +5133,7 @@ de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_of proto_tree_add_bits_item(tree, hf_gsm_a_rr_qsearch_c_eutran_initial, tvb, curr_bit_offset, 4, FALSE); curr_bit_offset += 4; proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_rep_quant, tvb, curr_bit_offset, 1, FALSE); - rep_quant_rsrq = tvb_get_bits8(tvb,curr_bit_offset,1); + rep_quant = tvb_get_bits8(tvb,curr_bit_offset,1); curr_bit_offset += 1; proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_multirat_reporting, tvb, curr_bit_offset, 2, FALSE); curr_bit_offset += 2; @@ -5083,16 +5143,27 @@ de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_of { if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { - item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold, tvb, curr_bit_offset, 3, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", 6 * tvb_get_bits8(tvb,curr_bit_offset,3) - 111); - else proto_item_append_text(item, "TBD Conversion"); + if (rep_quant == 0) + { + proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, FALSE); + } curr_bit_offset += 3; if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } + else + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } curr_bit_offset += 6; } if (tvb_get_bits8(tvb,curr_bit_offset++,1)) @@ -5105,16 +5176,27 @@ de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_of if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { - item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold, tvb, curr_bit_offset, 3, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, "TBD Conversion"); + if (rep_quant == 0) + { + proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, FALSE); + } curr_bit_offset += 3; if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } + else + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } curr_bit_offset += 6; } if (tvb_get_bits8(tvb,curr_bit_offset++,1)) @@ -5129,15 +5211,27 @@ de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_of if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_measurement_report_offset, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } + else + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } curr_bit_offset += 6; if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } + else + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } curr_bit_offset += 6; } if (tvb_get_bits8(tvb,curr_bit_offset++,1)) @@ -5150,15 +5244,27 @@ de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_of if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_measurement_report_offset, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } + else + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } curr_bit_offset += 6; if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } + else + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } curr_bit_offset += 6; } if (tvb_get_bits8(tvb,curr_bit_offset++,1)) @@ -5169,9 +5275,14 @@ de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_of } } item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_reporting_granularity, tvb, curr_bit_offset, 1, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dB step)", 2 + tvb_get_bits8(tvb,curr_bit_offset,1)); - else proto_item_append_text(item, " (%d dB step)", 1 + tvb_get_bits8(tvb,curr_bit_offset,1)); - + if (rep_quant == 0) + { + proto_item_append_text(item, " (%d dB step)", 2 + tvb_get_bits8(tvb,curr_bit_offset,1)); + } + else + { + proto_item_append_text(item, " (%d dB step)", 1 + tvb_get_bits8(tvb,curr_bit_offset,1)); + } curr_bit_offset += 1; return(curr_bit_offset - bit_offset); @@ -5183,7 +5294,7 @@ de_rr_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset) proto_tree *subtree; proto_item *item; gint curr_bit_offset; - gint rep_quant_rsrq; + guint8 rep_quant = 0; curr_bit_offset = bit_offset; item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC].strptr); @@ -5208,23 +5319,34 @@ de_rr_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset) proto_tree_add_bits_item(subtree, hf_gsm_a_rr_qsearch_p_eutran, tvb, curr_bit_offset, 4, FALSE); curr_bit_offset += 4; proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_rep_quant, tvb, curr_bit_offset, 1, FALSE); - rep_quant_rsrq = tvb_get_bits8(tvb,curr_bit_offset,1); + rep_quant = tvb_get_bits8(tvb,curr_bit_offset,1); curr_bit_offset += 1; proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_multirat_reporting, tvb, curr_bit_offset, 2, FALSE); curr_bit_offset += 2; if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { - item = proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_fdd_reporting_threshold, tvb, curr_bit_offset, 3, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", 6 * tvb_get_bits8(tvb,curr_bit_offset,3) - 111); - else proto_item_append_text(item, "TBD Conversion"); + if (rep_quant == 0) + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, FALSE); + } curr_bit_offset += 3; if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { - item = proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } + else + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } curr_bit_offset += 6; } if (tvb_get_bits8(tvb,curr_bit_offset++,1)) @@ -5236,16 +5358,27 @@ de_rr_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset) if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { - item = proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_tdd_reporting_threshold, tvb, curr_bit_offset, 3, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", 6 * tvb_get_bits8(tvb,curr_bit_offset,3) - 111); - else proto_item_append_text(item, "TBD Conversion"); + if (rep_quant == 0) + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, FALSE); + } curr_bit_offset += 3; if (tvb_get_bits8(tvb,curr_bit_offset++,1)) { - item = proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); - if (!rep_quant_rsrq) proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); - else proto_item_append_text(item, " (%.1f dB)", tvb_get_bits8(tvb,curr_bit_offset,6) - 19.5); + item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, tvb, curr_bit_offset, 6, FALSE); + if (rep_quant == 0) + { + proto_item_append_text(item, " (%.1f dB)", (gfloat)tvb_get_bits8(tvb,curr_bit_offset,6)/2 - 19.5); + } + else + { + proto_item_append_text(item, " (%d dBm)", tvb_get_bits8(tvb,curr_bit_offset,6) - 140); + } curr_bit_offset += 6; } if (tvb_get_bits8(tvb,curr_bit_offset++,1)) @@ -5761,6 +5894,7 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint bit_offset += 1; if (value) { /* GPRS 3G Measurement Parameters Description */ + guint8 reporting_quant = 0; bit_offset_sav = bit_offset; item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC].strptr); subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC]); @@ -5773,6 +5907,7 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint if (value) { proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_rep_quant, tvb, bit_offset, 1, FALSE); + reporting_quant = tvb_get_bits8(tvb,bit_offset,1); bit_offset += 1; proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_multirat_reporting, tvb, bit_offset, 2, FALSE); bit_offset += 2; @@ -5783,7 +5918,14 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint { proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_reporting_offset, tvb, bit_offset, 3, FALSE); bit_offset += 3; - proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_reporting_threshold, tvb, bit_offset, 3, FALSE); + if (reporting_quant == 0) + { + proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_reporting_threshold_rscp, tvb, bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_reporting_threshold_ecn0, tvb, bit_offset, 3, FALSE); + } bit_offset += 3; } value = tvb_get_bits8(tvb,bit_offset,1); @@ -5799,7 +5941,14 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint { proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_reporting_offset, tvb, bit_offset, 3, FALSE); bit_offset += 3; - proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_reporting_threshold, tvb, bit_offset, 3, FALSE); + if (reporting_quant == 0) + { + proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_reporting_threshold_rscp, tvb, bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_reporting_threshold_ecn0, tvb, bit_offset, 3, FALSE); + } bit_offset += 3; } proto_item_set_len(item2,((bit_offset-bit_offset_sav)>>3)+1); @@ -9200,6 +9349,7 @@ sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U bit_offset += 1; if (value) { /* 3G Measurement Parameters Description */ + guint8 reporting_quant = 0; bit_offset_sav = bit_offset; item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC]); @@ -9208,6 +9358,7 @@ sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_search_prio, tvb, bit_offset, 1, FALSE); bit_offset += 1; proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_rep_quant, tvb, bit_offset, 1, FALSE); + reporting_quant = tvb_get_bits8(tvb,bit_offset,1); bit_offset += 1; value = tvb_get_bits8(tvb,bit_offset,1); bit_offset += 1; @@ -9222,7 +9373,14 @@ sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U { proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_offset, tvb, bit_offset, 3, FALSE); bit_offset += 3; - proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_threshold, tvb, bit_offset, 3, FALSE); + if (reporting_quant == 0) + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_threshold_rscp, tvb, bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_threshold_ecn0, tvb, bit_offset, 3, FALSE); + } bit_offset += 3; } value = tvb_get_bits8(tvb,bit_offset,1); @@ -9238,7 +9396,14 @@ sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U { proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_reporting_offset, tvb, bit_offset, 3, FALSE); bit_offset += 3; - proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_reporting_threshold, tvb, bit_offset, 3, FALSE); + if (reporting_quant == 0) + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_reporting_threshold_rscp, tvb, bit_offset, 3, FALSE); + } + else + { + proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_reporting_threshold_ecn0, tvb, bit_offset, 3, FALSE); + } bit_offset += 3; } value = tvb_get_bits8(tvb,bit_offset,1); @@ -10733,7 +10898,7 @@ proto_register_gsm_a_rr(void) }, { &hf_gsm_a_rr_900_reporting_threshold, { "900 Reporting Threshold", "gsm_a.rr.900_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for GSM frequency band 900 (900 Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_1800_reporting_offset, @@ -10743,7 +10908,7 @@ proto_register_gsm_a_rr(void) }, { &hf_gsm_a_rr_1800_reporting_threshold, { "1800 Reporting Threshold", "gsm_a.rr.1800_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for GSM frequency band 1800 (1800 Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_400_reporting_offset, @@ -10753,7 +10918,7 @@ proto_register_gsm_a_rr(void) }, { &hf_gsm_a_rr_400_reporting_threshold, { "400 Reporting Threshold", "gsm_a.rr.400_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for GSM frequency band 400 (400 Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_1900_reporting_offset, @@ -10763,7 +10928,7 @@ proto_register_gsm_a_rr(void) }, { &hf_gsm_a_rr_1900_reporting_threshold, { "1900 Reporting Threshold", "gsm_a.rr.1900_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for GSM frequency band 1900 (1900 Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_850_reporting_offset, @@ -10773,7 +10938,7 @@ proto_register_gsm_a_rr(void) }, { &hf_gsm_a_rr_850_reporting_threshold, { "850 Reporting Threshold", "gsm_a.rr.900_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for GSM frequency band 850 (850 Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_network_control_order, @@ -10832,7 +10997,7 @@ proto_register_gsm_a_rr(void) "Search for 3G cells if signal level below threshold (Qsearch P)", HFILL } }, { &hf_gsm_a_rr_3g_search_prio, - { "3G Search Prio", "gsm_a.rr.3g_search_prio", + { "3G Search Prio (ignored in Rel-8)", "gsm_a.rr.3g_search_prio", FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_3g_search_prio_value), 0x0, NULL, HFILL } }, @@ -10841,9 +11006,14 @@ proto_register_gsm_a_rr(void) FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00, "Offset to the reported value when prioritising the cells for reporting for FDD access technology (FDD Reporting Offset)", HFILL } }, - { &hf_gsm_a_rr_fdd_reporting_threshold, - { "FDD Reporting Threshold", "gsm_a.rr.fdd_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + { &hf_gsm_a_rr_fdd_reporting_threshold_rscp, + { "FDD Reporting Threshold RSCP", "gsm_a.rr.fdd_reporting_threshold_rscp", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_rscp_reporting_threshold_vals), 0x00, + "Apply priority reporting if the reported value is above threshold for FDD access technology (FDD Reporting Threshold)", HFILL } + }, + { &hf_gsm_a_rr_fdd_reporting_threshold_ecn0, + { "FDD Reporting Threshold EcN0", "gsm_a.rr.fdd_reporting_threshold_ecn0", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_ecn0_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for FDD access technology (FDD Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_tdd_reporting_offset, @@ -10851,9 +11021,14 @@ proto_register_gsm_a_rr(void) FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00, "Offset to the reported value when prioritising the cells for reporting for TDD access technology (TDD Reporting Offset)", HFILL } }, - { &hf_gsm_a_rr_tdd_reporting_threshold, - { "TDD Reporting Threshold", "gsm_a.rr.tdd_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + { &hf_gsm_a_rr_tdd_reporting_threshold_rscp, + { "TDD Reporting Threshold RSCP", "gsm_a.rr.tdd_reporting_threshold_rscp", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_rscp_reporting_threshold_vals), 0x00, + "Apply priority reporting if the reported value is above threshold for TDD access technology (TDD Reporting Threshold)", HFILL } + }, + { &hf_gsm_a_rr_tdd_reporting_threshold_ecn0, + { "TDD Reporting Threshold EcN0", "gsm_a.rr.tdd_reporting_threshold_ecn0", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_ecn0_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for TDD access technology (TDD Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_fdd_reporting_threshold_2, @@ -10873,7 +11048,7 @@ proto_register_gsm_a_rr(void) }, { &hf_gsm_a_rr_700_reporting_threshold, { "700 Reporting Threshold", "gsm_a.rr.700_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for GSM frequency band 700 (700 Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_810_reporting_offset, @@ -10883,7 +11058,7 @@ proto_register_gsm_a_rr(void) }, { &hf_gsm_a_rr_810_reporting_threshold, { "810 Reporting Threshold", "gsm_a.rr.810_reporting_threshold", - FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_threshold_vals), 0x00, + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00, "Apply priority reporting if the reported value is above threshold for GSM frequency band 810 (810 Reporting Threshold)", HFILL } }, { &hf_gsm_a_rr_cbq, @@ -11346,9 +11521,14 @@ proto_register_gsm_a_rr(void) FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - { &hf_gsm_a_rr_eutran_fdd_reporting_threshold, - { "E-UTRAN_FDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_fdd_reporting_threshold", - FT_UINT8, BASE_DEC, NULL, 0x00, + { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp, + { "E-UTRAN_FDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_fdd_reporting_threshold_rsrp", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrp_reporting_threshold_vals), 0x00, + NULL, HFILL } + }, + { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq, + { "E-UTRAN_FDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_fdd_reporting_threshold_rsrq", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrq_reporting_threshold_vals), 0x00, NULL, HFILL } }, { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, @@ -11361,9 +11541,14 @@ proto_register_gsm_a_rr(void) FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - { &hf_gsm_a_rr_eutran_tdd_reporting_threshold, - { "E-UTRAN_TDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_tdd_reporting_threshold", - FT_UINT8, BASE_DEC, NULL, 0x00, + { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp, + { "E-UTRAN_TDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_tdd_reporting_threshold_rsrp", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrp_reporting_threshold_vals), 0x00, + NULL, HFILL } + }, + { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq, + { "E-UTRAN_TDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_tdd_reporting_threshold_rsrq", + FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrq_reporting_threshold_vals), 0x00, NULL, HFILL } }, { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, -- cgit v1.2.3