aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2011-12-12 07:24:57 +0000
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2011-12-12 07:24:57 +0000
commit34a33f3b02303ce821ad1ccfbe71d43dd1c5ccb5 (patch)
tree72bc6aeebe8366aacd2ac472cff20af3845ac497
parentc6e4a3d0740d1dfd6440055b49ccf71211121cf0 (diff)
From Mike Morrin:
eliminates the global variable for tracking which nibble is to be decoded by taking advantage of the fact that half octet IEs always occur in pairs, and thus a pair can be grouped together for decoding. There was probably also some confusion caused by the macros UPPER_NIBBLE and LOWER_NIBBLE because the GSM bit numbering is opposite to Wireshark internal numbering, so I have changed these to be LEFT_NIBBLE and RIGHT_NIBBLE, which corresponds to the display format in Wireshark. The dissection order of half octet IEs has been adjusted where necessary to align with the ordering shown in the GSM specifications. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6658 git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@40157 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--epan/dissectors/packet-gsm_a_common.c71
-rw-r--r--epan/dissectors/packet-gsm_a_common.h40
-rw-r--r--epan/dissectors/packet-gsm_a_dtap.c3
-rw-r--r--epan/dissectors/packet-gsm_a_rr.c47
4 files changed, 61 insertions, 100 deletions
diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c
index d0646d125d..edbbbd31f0 100644
--- a/epan/dissectors/packet-gsm_a_common.c
+++ b/epan/dissectors/packet-gsm_a_common.c
@@ -43,9 +43,6 @@
#include "packet-gsm_a_common.h"
#include "packet-e212.h"
-/* nasty globals as a result of the split of packet-gsm_a.c in need of further restructure */
-/* nasty static for handling half octet mandatory V IEs */
-gboolean lower_nibble=FALSE;
const value_string gsm_common_elem_strings[] = {
/* Common Information Elements 10.5.1 */
@@ -551,6 +548,7 @@ int hf_gsm_a_call_prio = -1;
int hf_gsm_a_skip_ind = -1;
int hf_gsm_a_spare_bits = -1;
int hf_gsm_a_lac = -1;
+static int hf_gsm_a_spare_nibble = -1;
static int hf_gsm_a_type_of_ciph_alg = -1;
static int hf_gsm_a_old_xid = -1;
static int hf_gsm_a_iov_ui = -1;
@@ -1514,7 +1512,7 @@ guint16 elem_tv_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint
a_add_string=ep_alloc(1024);
a_add_string[0] = '\0';
- consumed = (*elem_funcs[idx])(tvb, subtree, pinfo, curr_offset, -1, a_add_string, 1024);
+ consumed = (*elem_funcs[idx])(tvb, subtree, pinfo, curr_offset, RIGHT_NIBBLE, a_add_string, 1024);
if (a_add_string[0] != '\0')
{
@@ -1746,50 +1744,35 @@ guint16 elem_v(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_typ
/*
* Short Value (V_SHORT) element dissector
*
- * Length is (ab)used in these functions to indicate upper nibble of the octet (-2) or lower nibble (-1)
- * noting that the tv_short dissector always sets the length to -1, as the upper nibble is the IEI.
- * This is expected to be used upper nibble first, as the tables of 24.008.
+ * nibble is used in this function to indicate right or left nibble of the octet
+ * This is expected to be used right nibble first, as the tables of 24.008.
*/
-guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset)
+guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset, guint32 nibble)
{
- guint16 consumed;
+ guint16 consumed = 1;
guint32 curr_offset;
const value_string *elem_names;
gint *elem_ett;
guint16 (**elem_funcs)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+ gchar *a_add_string;
curr_offset = offset;
- consumed = 0;
SET_ELEM_VARS(pdu_type, elem_names, elem_ett, elem_funcs);
+ a_add_string=ep_alloc(1024);
+ a_add_string[0] = '\0';
+
if (elem_funcs[idx] == NULL)
{
- /* NOT A BAD THING - LENGTH IS HALF NIBBLE */
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "No element dissector");
-
- consumed = 1;
+ /* NOT NECESSARILY A BAD THING - LENGTH IS HALF OCTET */
+ (void)de_spare_nibble(tvb, tree, pinfo, curr_offset, nibble, a_add_string, 1024);
}
else
{
- gchar *a_add_string;
-
- a_add_string=ep_alloc(1024);
- a_add_string[0] = '\0';
- consumed = (*elem_funcs[idx])(tvb, tree, pinfo, curr_offset, (lower_nibble?LOWER_NIBBLE:UPPER_NIBBLE), a_add_string, 1024);
- }
- if (!lower_nibble) /* is this the first (upper) nibble ? */
- {
- consumed--; /* only half a nibble has been consumed, but all ie dissectors assume they consume 1 octet */
- lower_nibble = TRUE;
+ (void)(*elem_funcs[idx])(tvb, tree, pinfo, curr_offset, nibble, a_add_string, 1024);
}
- else /* if it is the second (lower) nibble, move on... */
- lower_nibble = FALSE;
-
return(consumed);
}
@@ -3030,22 +3013,21 @@ de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
/*
* [3] 10.5.1.8
*/
-static guint16
-de_spare_nibble(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+guint16 de_spare_nibble(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
+ gint bit_offset;
- curr_offset = offset;
+ curr_offset = offset;
+ if (RIGHT_NIBBLE==len)
+ bit_offset = 4;
+ else
+ bit_offset = 0;
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Spare Nibble");
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_nibble, tvb, (curr_offset<<3)+bit_offset+3, 1, ENC_BIG_ENDIAN);
+ curr_offset = curr_offset + 1;
- curr_offset++;
-
- /* no length check possible */
-
- return(curr_offset - offset);
+ return(curr_offset - offset);
}
/*
@@ -4096,6 +4078,11 @@ proto_register_gsm_a_common(void)
FT_UINT16, BASE_HEX_DEC, NULL, 0x00,
NULL, HFILL }
},
+ { &hf_gsm_a_spare_nibble,
+ { "Spare Nibble","gsm_a.spare",
+ FT_UINT8, BASE_DEC_HEX, NULL, 0x00,
+ NULL, HFILL }
+ },
};
/* Setup protocol subtree array */
diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h
index 5e63de8c35..ca571c11ca 100644
--- a/epan/dissectors/packet-gsm_a_common.h
+++ b/epan/dissectors/packet-gsm_a_common.h
@@ -155,7 +155,6 @@ extern sccp_msg_info_t* sccp_msg;
extern sccp_assoc_info_t* sccp_assoc;
extern int gsm_a_tap;
-extern gboolean lower_nibble;
extern packet_info *gsm_a_dtap_pinfo;
/* TS 23 032 */
@@ -203,20 +202,19 @@ extern const char* get_gsm_a_msg_string(int pdu_type, int idx);
#define IS_UPLINK_TRUE 1
#define IS_UPLINK_UNKNOWN 2
-/* Defines and nasty static for handling half octet mandatory V IEs
- * TODO: Note originally UPPER_NIBBLE was -2 and LOWER_NIBBLE was -1
- * changed here to unsigned integer as it wouldn't compile (Warnings on Ubuntu)
- * ugly hack...
+/* Defines for handling half octet mandatory V IEs
+ * Named LEFT and RIGHT (as displayed) because the GSM definitions and our internal representation
+ * have the bits numbered in opposite senses
*/
-#define UPPER_NIBBLE (2)
-#define LOWER_NIBBLE (1)
+#define LEFT_NIBBLE (2)
+#define RIGHT_NIBBLE (1)
/* FUNCTIONS */
/* ELEMENT FUNCTIONS */
#define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
- if (((edc_len) > (edc_max_len))||lower_nibble) \
+ if ((edc_len) > (edc_max_len)) \
{ \
proto_tree_add_text(tree, tvb, \
curr_offset, (edc_len) - (edc_max_len), "Extraneous Data"); \
@@ -224,7 +222,7 @@ extern const char* get_gsm_a_msg_string(int pdu_type, int idx);
}
#define EXTRANEOUS_DATA_CHECK_EXPERT(edc_len, edc_max_len, pinfo) \
- if (((edc_len) > (edc_max_len))||lower_nibble) \
+ if ((edc_len) > (edc_max_len)) \
{ \
proto_item *expert_item; \
expert_item = proto_tree_add_text(tree, tvb, \
@@ -388,12 +386,10 @@ extern guint16 elem_v(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint
/*
* Short Value (V_SHORT) element dissector
*
- * Length is (ab)used in these functions to indicate upper nibble of the octet (-2) or lower nibble (-1)
- * noting that the tv_short dissector always sets the length to -1, as the upper nibble is the IEI.
- * This is expected to be used upper nibble first, as the tables of 24.008.
+ * nibble used in this functions to indicate left or right nibble of the octet
+ * This is expected to be used right nibble first, as the tables of 24.008.
*/
-
-extern guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset);
+extern guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset, guint32 nibble);
/* XXX: Most (if not all) the functions which make use of the following macros have the variables 'consumed',
@@ -590,17 +586,12 @@ extern guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
if ((signed)curr_len <= 0) return; \
}
-#define ELEM_MAND_V_SHORT(EMV_pdu_type, EMV_elem_idx) \
+#define ELEM_MAND_VV_SHORT(EMV_pdu_type, EMV_elem_idx1, EMV_elem_idx2) \
{\
- if ((consumed = elem_v_short(tvb, tree, pinfo, EMV_pdu_type, EMV_elem_idx, curr_offset)) > 0) \
- { \
- curr_offset += consumed; \
- curr_len -= consumed; \
- } \
- else \
- { \
- /* Mandatory, but nothing we can do */ \
- } \
+ elem_v_short(tvb, tree, pinfo, EMV_pdu_type, EMV_elem_idx1, curr_offset, RIGHT_NIBBLE); \
+ elem_v_short(tvb, tree, pinfo, EMV_pdu_type, EMV_elem_idx2, curr_offset, LEFT_NIBBLE); \
+ curr_offset ++ ; /* consumed length is 1, regardless of contents */ \
+ curr_len -- ; \
if ((signed)curr_len <= 0) return; \
}
@@ -695,6 +686,7 @@ guint16 de_rr_tlli(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
guint16 de_rej_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
guint16 de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_spare_nibble(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
guint16 de_emm_ue_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
guint16 de_emm_trac_area_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c
index 0bd73552e9..4030ec57d3 100644
--- a/epan/dissectors/packet-gsm_a_dtap.c
+++ b/epan/dissectors/packet-gsm_a_dtap.c
@@ -6361,6 +6361,7 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
val_to_str(pd, protocol_discriminator_vals, "Unknown (%u)"));
pd_tree = proto_item_add_subtree(oct_1_item, ett_dtap_oct_1);
+ proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN);
if (ti == -1)
{
@@ -6396,8 +6397,6 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
}
- proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN);
-
if ((ti != -1) &&
(ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK)
{
diff --git a/epan/dissectors/packet-gsm_a_rr.c b/epan/dissectors/packet-gsm_a_rr.c
index 56d3d9cdce..1f7d4c85f1 100644
--- a/epan/dissectors/packet-gsm_a_rr.c
+++ b/epan/dissectors/packet-gsm_a_rr.c
@@ -2066,12 +2066,12 @@ de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
gint bit_offset;
curr_offset = offset;
- if (UPPER_NIBBLE==len)
+ if (RIGHT_NIBBLE==len)
bit_offset = 4;
else
bit_offset = 0;
- item = proto_tree_add_text(tree, tvb, curr_offset, 3, "%s",
+ item = proto_tree_add_text(tree, tvb, curr_offset, 1, "%s",
gsm_rr_elem_strings[DE_RR_CHNL_NEEDED].strptr);
subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_CHNL_NEEDED]);
@@ -2114,7 +2114,7 @@ de_rr_cip_mode_set(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
* Note: The coding of fields SC and algorithm identifier is defined in [44.018]
* as part of the Cipher Mode Setting IE.
*/
- if (UPPER_NIBBLE==len)
+ if (RIGHT_NIBBLE==len)
bit_offset = 4;
else
bit_offset = 0;
@@ -2145,7 +2145,7 @@ de_rr_cip_mode_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
gint bit_offset;
curr_offset = offset;
- if (UPPER_NIBBLE==len)
+ if (RIGHT_NIBBLE==len)
bit_offset = 4;
else
bit_offset = 0;
@@ -8966,17 +8966,14 @@ static void
dtap_rr_cip_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
guint32 curr_offset;
- guint32 consumed;
guint curr_len;
curr_offset = offset;
curr_len = len;
- lower_nibble = FALSE;
/* Ciphering Mode Setting 10.5.2.9 M V 0.5 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_SET);
/* Cipher Response 10.5.2.10 M V 0.5 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_RESP);
+ ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_SET, DE_RR_CIP_MODE_RESP);
EXTRANEOUS_DATA_CHECK(curr_len, 0);
@@ -8993,7 +8990,6 @@ dtap_rr_cip_mode_cpte(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, g
curr_offset = offset;
curr_len = len;
- lower_nibble = FALSE;
/* Mobile Equipment Identity 10.5.1.4 O TLV */
ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON, DE_MID, "Mobile Equipment Identity");
@@ -9419,11 +9415,9 @@ dtap_rr_imm_ass(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
* i.e. coded with a "0" in each.
*/
- /* Page Mode 10.5.2.26 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE);
-
+ /* Page Mode 10.5.2.26 M V 1/2 */
/* Dedicated mode or TBF 10.5.2.25b M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_DED_MOD_OR_TBF);
+ ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE, DE_RR_DED_MOD_OR_TBF);
if((oct&0x10) == 0){
/* Channel Description 10.5.2.5 C V 3m */
@@ -9469,9 +9463,8 @@ dtap_rr_imm_ass_ext(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
curr_len = len;
/* Page Mode 10.5.2.26 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE);
/* Spare Half Octet 10.5.1.8 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE);
+ ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE, DE_SPARE_NIBBLE);
/* Channel Description 1 Channel Description 10.5.2.5 M V 3 */
ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, " - Channel Description 1");
/* Request Reference 1 Request Reference 10.5.2.30 M V 3 */
@@ -9508,9 +9501,8 @@ dtap_rr_imm_ass_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
curr_len = len;
/* Page Mode 10.5.2.26 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE);
/* Spare Half Octet 10.5.1.8 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE);
+ ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE, DE_SPARE_NIBBLE);
/* Request Reference 1 Request Reference 10.5.2.30 M V 3 */
ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, " - Request Reference 1");
/* Wait Indication 1 Wait Indication 10.5.2.43 M V 1 */
@@ -9562,13 +9554,10 @@ dtap_rr_paging_req_type_1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U
curr_offset = offset;
curr_len = len;
- lower_nibble = FALSE;
/* RR Page Mode 10.5.2.26 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE);
-
/* RR Channel Needed 10.5.2.8 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_CHNL_NEEDED);
+ ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE, DE_RR_CHNL_NEEDED);
/* RR Mobile Identity 10.5.1.4 M LV 2-9 */
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, " - Mobile Identity 1");
@@ -9593,13 +9582,10 @@ dtap_rr_paging_req_type_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U
curr_offset = offset;
curr_len = len;
- lower_nibble = FALSE;
/* RR Page Mode 10.5.2.26 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE);
-
/* RR Channel Needed 10.5.2.8 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_CHNL_NEEDED);
+ ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE, DE_RR_CHNL_NEEDED);
/* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 1");
@@ -9627,13 +9613,10 @@ dtap_rr_paging_req_type_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U
curr_offset = offset;
curr_len = len;
- lower_nibble = FALSE;
/* RR Page Mode 10.5.2.26 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE);
-
/* RR Channel Needed 10.5.2.8 M V 1/2 */
- ELEM_MAND_V_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_CHNL_NEEDED);
+ ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE, DE_RR_CHNL_NEEDED);
/* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 1");
@@ -10867,6 +10850,7 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
val_to_str(pd, protocol_discriminator_vals, "Unknown (%u)"));
pd_tree = proto_item_add_subtree(oct_1_item, ett_ccch_oct_1);
+ proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 1, 1, ENC_BIG_ENDIAN);
if (ti == -1){
proto_tree_add_item(pd_tree, hf_gsm_a_skip_ind, tvb, 1, 1, ENC_BIG_ENDIAN);
@@ -10890,7 +10874,6 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
}
- proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 1, 1, ENC_BIG_ENDIAN);
if ((ti != -1) && (ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK){
proto_tree_add_item(tree, hf_gsm_a_extension, tvb, 2, 1, ENC_BIG_ENDIAN);
@@ -11243,12 +11226,12 @@ proto_register_gsm_a_rr(void)
},
{ &hf_gsm_a_rr_page_mode,
{ "Page Mode","gsm_a.rr.page_mode",
- FT_UINT8,BASE_DEC, VALS(gsm_a_rr_page_mode_vals), 0x03,
+ FT_UINT8,BASE_DEC, VALS(gsm_a_rr_page_mode_vals), 0x0F,
NULL, HFILL }
},
{ &hf_gsm_a_rr_dedicated_mode_or_tbf,
{ "Dedicated mode or TBF","gsm_a.rr.dedicated_mode_or_tbf",
- FT_UINT8,BASE_DEC, VALS(gsm_a_rr_dedicated_mode_or_tbf_vals), 0x70,
+ FT_UINT8,BASE_DEC, VALS(gsm_a_rr_dedicated_mode_or_tbf_vals), 0xF0,
NULL, HFILL }
},
{ &hf_gsm_a_rr_pow_cmd_epc,