aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorpascal <pascal@localhost>2012-05-20 20:56:42 +0000
committerpascal <pascal@localhost>2012-05-20 20:56:42 +0000
commit254fcdfe194a12a7c1e0dd119047858d21aa9d46 (patch)
tree9087f38df752319c4e444aa73641427784645783 /epan/dissectors
parent42ec0ca701ac3b9c62dd90575a388b82da8e6224 (diff)
Upgrade NAS dissector to Release 10 (v10.6.1)
svn path=/trunk/; revision=42728
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-gsm_a_common.c44
-rw-r--r--epan/dissectors/packet-gsm_a_common.h6
-rw-r--r--epan/dissectors/packet-gsm_a_dtap.c111
-rw-r--r--epan/dissectors/packet-gsm_a_gm.c350
4 files changed, 415 insertions, 96 deletions
diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c
index 83da021fee..77d60087db 100644
--- a/epan/dissectors/packet-gsm_a_common.c
+++ b/epan/dissectors/packet-gsm_a_common.c
@@ -438,6 +438,14 @@ static const value_string vamos_level_vals[] = {
{ 0, NULL}
};
+const value_string tighter_cap_level_vals[] = {
+ { 0, "TIGHTER not supported" },
+ { 1, "TIGHTER supported for speech and signalling channels only" },
+ { 2, "TIGHTER supported for speech and signalling channels and for GPRS and EGPRS, but not for EGPRS2" },
+ { 3, "TIGHTER supported for speech and signalling channels and for GPRS, EGPRS and EGPRS2" },
+ { 0, NULL}
+};
+
static const value_string gsm_a_rr_rxlev_vals [] = {
{ 0, "< -110 dBm"},
{ 1, "-110 <= x < -109 dBm"},
@@ -651,6 +659,8 @@ static int hf_gsm_a_e_utra_meas_and_report_support = -1;
static int hf_gsm_a_prio_based_resel_support = -1;
static int hf_gsm_a_utra_csg_cells_reporting = -1;
static int hf_gsm_a_vamos_level = -1;
+static int hf_gsm_a_tighter_cap = -1;
+static int hf_gsm_a_selective_ciph_down_sacch = -1;
static int hf_gsm_a_geo_loc_type_of_shape = -1;
static int hf_gsm_a_geo_loc_sign_of_lat = -1;
@@ -2376,7 +2386,7 @@ de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
/*
* [3] 10.5.1.7 Mobile Station Classmark 3
- * 3GPP TS 24.008 version 9.6.0 Release 9
+ * 3GPP TS 24.008 version 10.6.1 Release 10
*/
#define AVAILABLE_BITS_CHECK(n) \
bits_left = ((len + offset) << 3) - bit_offset; \
@@ -3031,6 +3041,24 @@ de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
bit_offset = bit_offset + 2;
/*
+ * Release 10 starts here
+ *
+ * < TIGHTER Capability : bit(2) > -- Release 10 starts here.
+ * Extract TIGHTER Capability
+ */
+ AVAILABLE_BITS_CHECK(2);
+ proto_tree_add_bits_item(tree, hf_gsm_a_tighter_cap, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset = bit_offset + 2;
+
+ /*
+ * < Selective Ciphering of Downlink SACCH : bit >
+ * Extract Selective Ciphering of Downlink SACCH
+ */
+ AVAILABLE_BITS_CHECK(1);
+ proto_tree_add_bits_item(tree, hf_gsm_a_selective_ciph_down_sacch, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset = bit_offset + 1;
+
+ /*
* Add spare bits until we reach an octet boundary
*/
bits_left = (((len + offset) << 3) - bit_offset) & 0x07;
@@ -3253,6 +3281,7 @@ de_cs_domain_spec_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
proto_tree_add_item(tree, hf_gsm_a_rr_t3212, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 7, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_gsm_a_att, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -3283,6 +3312,7 @@ de_ps_domain_spec_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
proto_tree_add_item(tree, hf_gsm_a_gm_rac, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 6, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_gsm_a_nmo_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_gsm_a_nmo, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -3380,7 +3410,7 @@ static const true_false_string gsm_a_ext_periodic_timers_value = {
};
static guint16
-de_ms_net_feat_sup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_ms_net_feat_sup(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, bit_offset;
@@ -4100,6 +4130,16 @@ proto_register_gsm_a_common(void)
FT_UINT8, BASE_DEC, VALS(vamos_level_vals), 0x00,
NULL, HFILL}
},
+ { &hf_gsm_a_tighter_cap,
+ { "TIGHTER Capability", "gsm_a.classmark3.tighter_cap",
+ FT_UINT8, BASE_DEC, VALS(tighter_cap_level_vals), 0x00,
+ NULL, HFILL}
+ },
+ { &hf_gsm_a_selective_ciph_down_sacch,
+ { "Selective Ciphering of Downlink SACCH", "gsm_a.classmark3.selective_ciph_down_sacch",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x00,
+ NULL, HFILL}
+ },
{ &hf_gsm_a_geo_loc_type_of_shape,
{ "Location estimate", "gsm_a.gad.location_estimate",
FT_UINT8, BASE_DEC, VALS(type_of_shape_vals), 0xf0,
diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h
index 0015b410eb..9c2579c397 100644
--- a/epan/dissectors/packet-gsm_a_common.h
+++ b/epan/dissectors/packet-gsm_a_common.h
@@ -753,6 +753,7 @@ extern const value_string gsm_a_qos_traff_hdl_pri_vals[];
extern const value_string gsm_a_type_of_number_values[];
extern const value_string gsm_a_numbering_plan_id_values[];
extern const value_string gsm_a_sms_vals[];
+extern const value_string tighter_cap_level_vals[];
extern value_string_ext gsm_a_rr_rxlev_vals_ext;
extern const value_string gsm_a_gm_type_of_ciph_alg_vals[];
@@ -997,6 +998,7 @@ typedef enum
DE_DAY_SAVING_TIME, /* Daylight Saving Time */
DE_EMERGENCY_NUM_LIST, /* Emergency Number List */
DE_ADD_UPD_PARAMS, /* Additional update parameters */
+ DE_MM_TIMER, /* MM Timer */
/* Call Control Information Elements 10.5.4 */
DE_AUX_STATES, /* Auxiliary States */
DE_BEARER_CAP, /* Bearer Capability */
@@ -1096,7 +1098,9 @@ typedef enum
DE_REQ_MS_INFO, /* [7] 10.5.5.25 Requested MS information */
DE_UE_NETWORK_CAP, /* [7] 10.5.5.26 UE network capability */
DE_EUTRAN_IRAT_INFO_CONTAINER, /* [7] 10.5.5.27 E-UTRAN inter RAT information container */
- DE_VOICE_DOMAIN_PREF, /* [7] 10.5.5.28 Voice domain preference and UE's usage setting */
+ DE_VOICE_DOMAIN_PREF, /* [7] 10.5.5.28 Voice domain preference and UE's usage setting */
+ DE_PTMSI_TYPE, /* [10] 10.5.5.29 P-TMSI type */
+ DE_LAI_2, /* [10] 10.5.5.30 Location Area Identification 2 */
/* Session Management Information Elements [3] 10.5.6 */
DE_ACC_POINT_NAME, /* Access Point Name */
DE_NET_SAPI, /* Network Service Access Point Identifier */
diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c
index 2ebb95cb90..495735cc04 100644
--- a/epan/dissectors/packet-gsm_a_dtap.c
+++ b/epan/dissectors/packet-gsm_a_dtap.c
@@ -66,6 +66,12 @@
* Stage 3
* (3GPP TS 24.008 version 9.6.0 Release 9)
*
+ * Reference [10]
+ * Mobile radio interface Layer 3 specification;
+ * Core network protocols;
+ * Stage 3
+ * (3GPP TS 24.008 version 10.6.1 Release 10)
+ *
* $Id$
*
* Wireshark - Network traffic analyzer
@@ -252,6 +258,7 @@ const value_string gsm_dtap_elem_strings[] = {
{ 0x00, "Daylight Saving Time" },
{ 0x00, "Emergency Number List" },
{ 0x00, "Additional update parameters" },
+ { 0x00, "MM Timer" },
/* Call Control Information Elements 10.5.4 */
{ 0x00, "Auxiliary States" }, /* 10.5.4.4 Auxiliary states */
{ 0x00, "Bearer Capability" }, /* 10.5.4.4a Backup bearer capability */
@@ -431,7 +438,10 @@ static int hf_gsm_a_dtap_serv_cat_b4 = -1;
static int hf_gsm_a_dtap_serv_cat_b3 = -1;
static int hf_gsm_a_dtap_serv_cat_b2 = -1;
static int hf_gsm_a_dtap_serv_cat_b1 = -1;
+static int hf_gsm_a_dtap_csmo = -1;
static int hf_gsm_a_dtap_csmt = -1;
+static int hf_gsm_a_dtap_mm_timer_unit = -1;
+static int hf_gsm_a_dtap_mm_timer_value = -1;
static int hf_gsm_a_dtap_alerting_pattern = -1;
static int hf_gsm_a_dtap_ccbs_activation = -1;
static int hf_gsm_a_dtap_stream_identifier = -1;
@@ -508,6 +518,7 @@ static gint ett_bc_oct_6f = -1;
static gint ett_bc_oct_6g = -1;
static gint ett_bc_oct_7 = -1;
static gint ett_epc_ue_tl_a_lb_setup = -1;
+static gint ett_mm_timer = -1;
static char a_bigbuf[1024];
@@ -1073,7 +1084,12 @@ de_emerg_num_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o
/*
* 10.5.3.14 Additional update parameters
*/
-static const true_false_string gsm_a_dtap_csmt_vals = {
+static const true_false_string gsm_a_dtap_csmo_value = {
+ "CS fallback mobile originating call",
+ "No additional information"
+};
+
+static const true_false_string gsm_a_dtap_csmt_value = {
"CS fallback mobile terminating call",
"No additional information"
};
@@ -1085,13 +1101,61 @@ de_add_upd_params(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_csmo, tvb, (curr_offset<<3)+6, 1, ENC_BIG_ENDIAN);
proto_tree_add_bits_item(tree, hf_gsm_a_dtap_csmt, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
return(len);
}
/*
+ * 10.5.3.15 MM Timer
+ */
+static const value_string gsm_a_dtap_mm_timer_unit_vals[] = {
+ { 0x00, "value is incremented in multiples of 2 seconds" },
+ { 0x01, "value is incremented in multiples of 1 minute" },
+ { 0x02, "value is incremented in multiples of decihours" },
+ { 0x07, "value indicates that the timer is deactivated" },
+ { 0, NULL }
+};
+
+static guint16
+de_mm_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ guint8 oct;
+ guint16 val;
+ const gchar *str;
+ proto_tree *subtree;
+ proto_item *item = NULL;
+
+ oct = tvb_get_guint8(tvb, offset);
+ val = oct&0x1f;
+
+ switch (oct>>5)
+ {
+ case 0: str = "sec"; val*=2; break;
+ case 1: str = "min"; break;
+ case 2: str = "min"; val*=6; break;
+ case 7: str = "";
+ item = proto_tree_add_text(tree, tvb, offset, 1,
+ "MM Timer: timer is deactivated");
+ break;
+ default: str = "min";
+ }
+
+ if (item == NULL) {
+ item = proto_tree_add_text(tree, tvb, offset, 1,
+ "MM Timer: %u %s", val, str);
+ }
+
+ subtree = proto_item_add_subtree(item, ett_mm_timer);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_mm_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_mm_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN);
+
+ return (1);
+}
+
+ /*
* [3] 10.5.4.4 Auxiliary states
*/
static guint16
@@ -2723,7 +2787,8 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset
case 18: str = "No user responding"; break;
case 19: str = "User alerting, no answer"; break;
case 21: str = "Call rejected"; break;
- case 22: str = "Number changed"; break;
+ case 22: str = "Call rejected due to feature at the destination"; break;
+ case 24: str = "Number changed"; break;
case 25: str = "Pre-emption"; break;
case 26: str = "Non selected user clearing"; break;
case 27: str = "Destination out of order"; break;
@@ -4180,6 +4245,7 @@ guint16 (*dtap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _
de_day_saving_time, /* Daylight Saving Time */
de_emerg_num_list, /* Emergency Number List */
de_add_upd_params, /* Additional update parameters */
+ de_mm_timer, /* MM Timer */
/* Call Control Information Elements 10.5.4 */
de_aux_states, /* Auxiliary States */
de_bearer_cap, /* Bearer Capability */
@@ -4421,6 +4487,9 @@ dtap_mm_cm_reestab_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
ELEM_OPT_TV(0x13, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
+
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -4462,6 +4531,8 @@ dtap_mm_cm_srvc_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
+ ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_DTAP, DE_MM_TIMER, " - T3246 value");
+
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -4577,6 +4648,10 @@ dtap_mm_cm_srvc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_PRIO, NULL);
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL);
+
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -4710,6 +4785,8 @@ dtap_mm_loc_upd_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
/* 34 Emergency Number List O TLV 5-50 10.5.3.13 */
ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL);
+ ELEM_OPT_TLV(0x35, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Per MS T3212");
+
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -4730,6 +4807,8 @@ dtap_mm_loc_upd_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
+ ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_DTAP, DE_MM_TIMER, " - T3246 value");
+
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -4836,6 +4915,10 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
ELEM_OPT_TV_SHORT(0xc0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL);
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_COMMON, DE_MS_NET_FEAT_SUP, NULL);
+
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -5159,7 +5242,7 @@ dtap_cc_emerg_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
- ELEM_OPT_TLV(0x2e, GSM_A_PDU_TYPE_DTAP, DE_SERV_CAT, " Emergency");
+ ELEM_OPT_TLV(0x2e, GSM_A_PDU_TYPE_DTAP, DE_SERV_CAT, " - Emergency category");
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -6619,9 +6702,24 @@ proto_register_gsm_a_dtap(void)
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
+ { &hf_gsm_a_dtap_csmo,
+ { "CSMO", "gsm_a.dtap.csmo",
+ FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_dtap_csmo_value), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_dtap_csmt,
{ "CSMT", "gsm_a.dtap.csmt",
- FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_dtap_csmt_vals), 0x0,
+ FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_dtap_csmt_value), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mm_timer_unit,
+ { "Unit", "gsm_a.dtap.mm_timer_unit",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_mm_timer_unit_vals), 0xe0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mm_timer_value,
+ { "Timer value", "gsm_a.dtap.mm_timer_value",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
NULL, HFILL }
},
{ &hf_gsm_a_dtap_alerting_pattern,
@@ -6897,7 +6995,7 @@ proto_register_gsm_a_dtap(void)
};
/* Setup protocol subtree array */
-#define NUM_INDIVIDUAL_ELEMS 20
+#define NUM_INDIVIDUAL_ELEMS 21
gint *ett[NUM_INDIVIDUAL_ELEMS +
NUM_GSM_DTAP_MSG_MM + NUM_GSM_DTAP_MSG_CC +
NUM_GSM_DTAP_MSG_SMS + NUM_GSM_DTAP_MSG_SS + NUM_GSM_DTAP_MSG_TP +
@@ -6923,6 +7021,7 @@ proto_register_gsm_a_dtap(void)
ett[17] = &ett_bc_oct_6g;
ett[18] = &ett_bc_oct_7;
ett[19] = &ett_epc_ue_tl_a_lb_setup;
+ ett[20] = &ett_mm_timer;
last_offset = NUM_INDIVIDUAL_ELEMS;
diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c
index 2550c709e7..7c0a25a6f0 100644
--- a/epan/dissectors/packet-gsm_a_gm.c
+++ b/epan/dissectors/packet-gsm_a_gm.c
@@ -178,6 +178,8 @@ const value_string gsm_gm_elem_strings[] = {
{ 0x00, "UE network capability" },
{ 0x00, "E-UTRAN inter RAT information container" },
{ 0x00, "Voice domain preference and UE's usage setting" },
+ { 0x00, "P-TMSI type" },
+ { 0x00, "Location Area Identification 2" },
/* Session Management Information Elements 10.5.6 */
{ 0x00, "Access Point Name" },
{ 0x00, "Network Service Access Point Identifier" },
@@ -302,15 +304,19 @@ static int hf_gsm_a_gm_otd_b = -1;
static int hf_gsm_a_gm_gps_a = -1;
static int hf_gsm_a_gm_gps_b = -1;
static int hf_gsm_a_gm_gps_c = -1;
+static int hf_gsm_a_gm_lcs_molr = -1;
+static int hf_gsm_a_gm_mbms = -1;
+static int hf_gsm_a_gm_ims_vops = -1;
+static int hf_gsm_a_gm_emc_bs = -1;
static int hf_gsm_a_gm_req_ms_info_irat = -1;
static int hf_gsm_a_gm_req_ms_info_irat2 = -1;
static int hf_gsm_a_gm_ue_usage_setting = -1;
static int hf_gsm_a_gm_voice_domain_pref_for_eutran = -1;
+static int hf_gsm_a_gm_ptmsi_type = -1;
static int hf_gsm_a_sm_pdp_type_org = -1;
static int hf_gsm_a_qos_mean_thr = -1;
static int hf_gsm_a_qos_peak_thr = -1;
static int hf_gsm_a_qos_prec_class = -1;
-static int hf_gsm_a_qos_traf_handl_prio = -1;
static int hf_gsm_a_qos_trans_delay = -1;
static int hf_gsm_a_qos_signalling_ind = -1;
static int hf_gsm_a_qos_source_stat_desc = -1;
@@ -385,6 +391,10 @@ static int hf_gsm_a_gm_rac_emst_cap = -1;
static int hf_gsm_a_gm_rac_mtti_cap = -1;
static int hf_gsm_a_gm_rac_utra_csg_cell_report = -1;
static int hf_gsm_a_gm_rac_eutra_csg_cell_report = -1;
+static int hf_gsm_a_gm_rac_dtr_cap = -1;
+static int hf_gsm_a_gm_rac_emsr_cap = -1;
+static int hf_gsm_a_gm_rac_fast_down_freq_switch_cap = -1;
+static int hf_gsm_a_gm_rac_tighter_cap = -1;
static int hf_gsm_a_sm_ti_flag = -1;
static int hf_gsm_a_sm_ext = -1;
@@ -1042,10 +1052,10 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o
curr_offset++;
NO_MORE_DATA_CHECK(len);
- /* bit 8: PS inter-RAT HO to UTRAN Iu mode capability */
+ /* bit 8: PS inter-RAT HO from GERAN to UTRAN Iu mode capability */
proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ps_irat_iu, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- /* bit 7: PS inter-RAT HO to E-UTRAN S1 mode capability */
+ /* bit 7: PS inter-RAT HO from GERAN to E-UTRAN S1 mode capability */
proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ps_irat_s1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 6: EMM Combined procedures capability */
@@ -1060,7 +1070,7 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o
/* bit 3: EPC capability */
proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_epc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- /* bit 3: NF capability */
+ /* bit 2: NF capability */
proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_nf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bits 1: Spare bit */
@@ -2778,6 +2788,54 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui
bits_in_oct -= bits_needed;
/*
+ * Release 10
+ */
+
+ /*
+ * DTR Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtr_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset += bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * EMSR Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_emsr_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset += bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Fast Downlink Frequency Switching Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_fast_down_freq_switch_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset += bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * TIGHTER Capability
+ */
+ bits_needed = 2;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_tighter_cap, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset += bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
* we are too long ... so jump over it
*/
while (curr_bits_length > 0)
@@ -2806,7 +2864,7 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui
* [9] 10.5.5.14
*/
static const range_string gmm_cause_vals[] = {
- { 0x00, 0x01, "Protocol error, unspecified(Not def in v8.6.0)"},
+ { 0x00, 0x01, "Protocol error, unspecified"},
{ 0x02, 0x02, "IMSI unknown in HLR"},
{ 0x03, 0x03, "Illegal MS"},
{ 0x04, 0x04, "IMSI unknown in VLR"}, /* Annex G.1 */
@@ -2823,27 +2881,23 @@ static const range_string gmm_cause_vals[] = {
{ 0x0f, 0x0f, "No Suitable Cells In Location Area"},
{ 0x10, 0x10, "MSC temporarily not reachable"},
{ 0x11, 0x11, "Network failure"},
- { 0x12, 0x13, "Protocol error, unspecified(Not def in v8.6.0)"},
+ { 0x12, 0x13, "Protocol error, unspecified"},
{ 0x14, 0x14, "MAC failure"},
{ 0x15, 0x15, "Synch failure"},
{ 0x16, 0x16, "Congestion"},
{ 0x17, 0x17, "GSM authentication unacceptable"},
- { 0x18, 0x18, "Protocol error, unspecified(Not def in v8.6.0)"},
+ { 0x18, 0x18, "Protocol error, unspecified"},
{ 0x19, 0x19, "Not authorized for this CSG"},
{ 0x20, 0x20, "Service option not supported"}, /* Annex G.4 */
{ 0x21, 0x21, "Requested service option not subscribed"}, /* Annex G.4 */
{ 0x22, 0x22, "Service option temporarily out of order"}, /* Annex G.4 */
-
- { 0x23, 0x25, "Protocol error, unspecified(Not def in v8.6.0)"},
-
+ { 0x23, 0x25, "Protocol error, unspecified"},
{ 0x26, 0x26, "Call cannot be identified(non-GPRS services only)"}, /* Annex G.4 */
- { 0x27, 0x27, "Protocol error, unspecified(Not def in v8.6.0)"},
+ { 0x27, 0x27, "Protocol error, unspecified"},
{ 0x28, 0x28, "No PDP context activated"},
- { 0x29, 0x2f, "Protocol error, unspecified(Not def in v8.6.0)"},
+ { 0x29, 0x2f, "Protocol error, unspecified"},
{ 0x30, 0x3f, "Retry upon entry into a new cell"},
-
- { 0x40, 0x5e, "Protocol error, unspecified(Not def in v8.6.0)"},
-
+ { 0x40, 0x5e, "Protocol error, unspecified"},
{ 0x5f, 0x5f, "Semantically incorrect message"},
{ 0x60, 0x60, "Invalid mandatory information"},
{ 0x61, 0x61, "Message type non-existent or not implemented"},
@@ -2851,11 +2905,9 @@ static const range_string gmm_cause_vals[] = {
{ 0x63, 0x63, "Information element non-existent or not implemented"},
{ 0x64, 0x64, "Conditional IE error"},
{ 0x65, 0x65, "Message not compatible with the protocol state"},
-
- { 0x66, 0x6e, "Protocol error, unspecified(Not def in v8.6.0)"},
-
+ { 0x66, 0x6e, "Protocol error, unspecified"},
{ 0x6f, 0x6f, "Protocol error, unspecified"},
- { 0x70, 0xff, "Protocol error, unspecified(Not def in v8.6.0)"},
+ { 0x70, 0xff, "Protocol error, unspecified"},
{ 0, 0, NULL }
};
/* NOTE 1 TS 124 008 V8.6.0 (2009-07)
@@ -3133,33 +3185,31 @@ de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o
/*
* [7] 10.5.5.23
*/
+static const true_false_string gsm_a_gm_lcs_molr_value = {
+ "LCS-MOLR via PS domain supported",
+ "LCS-MOLR via PS domain not supported"
+};
+static const true_false_string gsm_a_gm_ims_vops_value = {
+ "IMS voice over PS session supported in Iu mode, but not supported in A/Gb mode",
+ "IMS voice over PS session in Iu mode and A/Gb mode not supported"
+};
+static const true_false_string gsm_a_gm_emc_bs_value = {
+ "Emergency bearer services supported in Iu mode, but not supported in A/Gb mode",
+ "Emergency bearer services in Iu mode and A/Gb mode not supported"
+};
static guint16
de_gmm_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint32 curr_offset;
- const gchar *str;
+ guint32 curr_offset;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- switch (oct&8)
- {
- case 8: str = "LCS-MOLR via PS domain not supported"; break;
- default: str ="LCS-MOLR via PS domain supported";
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Network Feature Support: %s (%u)",
- str,
- (oct>>3)&1);
-
+ proto_tree_add_item(tree, hf_gsm_a_gm_lcs_molr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_mbms, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_ims_vops, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_emc_bs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- /* no length check possible */
-
return (curr_offset - offset);
}
@@ -3271,6 +3321,36 @@ de_gmm_voice_domain_pref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
return len;
}
+/* [10] 10.5.5.29 P-TMSI type */
+static const true_false_string gsm_a_gm_ptmsi_type_value = {
+ "Mapped P-TMSI",
+ "Native P-TMSI"
+};
+
+static guint16
+de_gmm_ptmsi_type(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, bit_offset;
+
+ curr_offset = offset;
+ bit_offset = (curr_offset<<3)+4;
+
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
+ bit_offset += 3;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_ptmsi_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+
+ return (curr_offset - offset);
+}
+/* [10] 10.5.5.30 Location Area Identification 2 */
+static guint16
+de_gmm_lai_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len)
+{
+ /* The Location Area Identification 2 value is coded as octet 2 to 6 of the */
+ /* Location Area Identification information element */
+ return de_lai(tvb, tree, pinfo, offset, len, add_string, string_len);
+}
+
/*
* [7] 10.5.7.1
*/
@@ -3718,15 +3798,17 @@ static const value_string gsm_a_sm_pco_ms2net_prot_vals[] = {
{ 0x03, "DNS Server IPv6 Address Request" },
{ 0x04, "Not Supported" },
{ 0x05, "MS Support of Network Requested Bearer Control indicator" },
- { 0x06, "Reserved" },
- { 0x07, "DSMIPv6 Home Agent Address Request" },
- { 0x08, "DSMIPv6 Home Network Prefix Request" },
- { 0x09, "DSMIPv6 IPv4 Home Agent Address Request" },
- { 0x0a, "IP address allocation via NAS signalling" },
- { 0x0b, "IPv4 address allocation via DHCPv4" },
- { 0x0c, "P-CSCF IPv4 Address Request" },
- { 0x0d, "DNS Server IPv4 Address Request" },
- { 0x0e, "MSISDN Request" },
+ { 0x06, "Reserved" },
+ { 0x07, "DSMIPv6 Home Agent Address Request" },
+ { 0x08, "DSMIPv6 Home Network Prefix Request" },
+ { 0x09, "DSMIPv6 IPv4 Home Agent Address Request" },
+ { 0x0a, "IP address allocation via NAS signalling" },
+ { 0x0b, "IPv4 address allocation via DHCPv4" },
+ { 0x0c, "P-CSCF IPv4 Address Request" },
+ { 0x0d, "DNS Server IPv4 Address Request" },
+ { 0x0e, "MSISDN Request" },
+ { 0x0f, "IFOM-Support-Request" },
+ { 0x10, "IPv4 Link MTU Request" },
{ 0, NULL }
};
static const value_string gsm_a_sm_pco_net2ms_prot_vals[] = {
@@ -3735,15 +3817,17 @@ static const value_string gsm_a_sm_pco_net2ms_prot_vals[] = {
{ 0x03, "DNS Server IPv6 Address" },
{ 0x04, "Policy Control rejection code" },
{ 0x05, "Selected Bearer Control Mode" },
- { 0x06, "Reserved" },
- { 0x07, "DSMIPv6 Home Agent Address" },
- { 0x08, "DSMIPv6 Home Network Prefix" },
- { 0x09, "DSMIPv6 IPv4 Home Agent Address" },
- { 0x0a, "Reserved" },
- { 0x0b, "Reserved" },
- { 0x0c, "P-CSCF IPv4 Address" },
- { 0x0d, "DNS Server IPv4 Address" },
- { 0x0e, "MSISDN" },
+ { 0x06, "Reserved" },
+ { 0x07, "DSMIPv6 Home Agent Address" },
+ { 0x08, "DSMIPv6 Home Network Prefix" },
+ { 0x09, "DSMIPv6 IPv4 Home Agent Address" },
+ { 0x0a, "Reserved" },
+ { 0x0b, "Reserved" },
+ { 0x0c, "P-CSCF IPv4 Address" },
+ { 0x0d, "DNS Server IPv4 Address" },
+ { 0x0e, "MSISDN" },
+ { 0x0f, "IFOM-Support" },
+ { 0x10, "IPv4 Link MTU" },
{ 0, NULL }
};
@@ -3830,10 +3914,12 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
case 0x0006:
case 0x000A:
case 0x000B:
+ case 0x000F:
break;
case 0x0004:
- if (link_dir == P2P_DIR_DL) {
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Reject Code: 0x%02x (%u)", e_len, e_len);
+ if ((link_dir == P2P_DIR_DL) && (e_len == 1)) {
+ oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Reject Code: 0x%02x (%u)", oct, oct);
}
break;
case 0x0005:
@@ -3860,6 +3946,12 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
ip_to_str((guint8 *)&ipv4_addr));
}
break;
+ case 0x0010:
+ if ((link_dir == P2P_DIR_DL) && (e_len == 2)) {
+ guint16 word = tvb_get_ntohs(tvb, curr_offset);
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "IPv4 link MTU size: %u octets", word);
+ }
+ break;
default:
{
if (e_len > 0) {
@@ -4292,14 +4384,7 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
proto_tree_add_uint_format_value(tree, hf_gsm_a_qos_trans_delay, tvb,
curr_offset, 1, oct, "%s (%u)", str, tmp_oct);
- tmp_oct = oct & 0x03;
- if (tmp_oct == 0)
- str = "Subscribed traffic handling priority/reserved";
- else
- str = ep_strdup_printf("Priority level %u", tmp_oct);
-
- proto_tree_add_uint_format_value(tree, hf_gsm_a_qos_traf_handl_prio, tvb,
- curr_offset, 1, oct, "%s (%u)", str, tmp_oct);
+ proto_tree_add_item(tree, hf_gsm_a_qos_traff_hdl_pri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 1;
NO_MORE_DATA_CHECK(len);
@@ -4453,7 +4538,7 @@ static const value_string gsm_a_sm_cause_vals[] = {
{ 0x24, "Regular deactivation" },
{ 0x25, "QoS not accepted" },
{ 0x26, "Network failure" },
- { 0x27, "Reactivation required" },
+ { 0x27, "Reactivation requested" },
{ 0x28, "Feature not supported" },
{ 0x29, "Semantic error in the TFT operation" },
{ 0x2a, "Syntactical error in the TFT operation" },
@@ -4464,10 +4549,12 @@ static const value_string gsm_a_sm_cause_vals[] = {
{ 0x2f, "Multicast group membership time-out" },
{ 0x2c, "Semantic errors in packet filter(s)" },
{ 0x2d, "Syntactical errors in packet filter(s)" },
- { 0x30, "Activation rejected, BCM violation" },
+ { 0x30, "Request rejected, BCM violation" },
{ 0x32, "PDP type IPv4 only allowed" },
{ 0x33, "PDP type IPv6 only allowed" },
{ 0x34, "Single address bearers only allowed" },
+ { 0x38, "Collision with network initiated request" },
+ { 0x3c, "Bearer handling not supported" },
{ 0x51, "Invalid transaction identifier value" },
{ 0x5f, "Semantically incorrect message" },
{ 0x60, "Invalid mandatory information" },
@@ -4480,6 +4567,7 @@ static const value_string gsm_a_sm_cause_vals[] = {
{ 0x70, "APN restriction value incompatible with active PDP context" },
{ 0, NULL }
};
+static value_string_ext gsm_a_sm_cause_vals_ext = VALUE_STRING_EXT_INIT(gsm_a_sm_cause_vals);
static guint16
de_sm_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
@@ -4490,7 +4578,7 @@ de_sm_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 off
oct = tvb_get_guint8(tvb, offset);
/* SM Cause can be sent in both directions */
- str = val_to_str_const(oct, gsm_a_sm_cause_vals,
+ str = val_to_str_ext_const(oct, &gsm_a_sm_cause_vals_ext,
"Protocol error, unspecified / Service option temporarily out of order");
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_cause, tvb,
@@ -4512,7 +4600,7 @@ de_sm_cause_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
oct = tvb_get_guint8(tvb, offset);
/* SM Cause 2 is sent only in the Network-to-MS direction */
- str = val_to_str_const(oct, gsm_a_sm_cause_vals,
+ str = val_to_str_ext_const(oct, &gsm_a_sm_cause_vals_ext,
"Service option temporarily out of order");
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_cause_2, tvb,
@@ -5171,6 +5259,8 @@ guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
NULL, /* UE network capability */
de_gmm_eutran_irat_info_container, /* E-UTRAN inter RAT information container */
de_gmm_voice_domain_pref, /* Voice domain preference and UE's usage setting */
+ de_gmm_ptmsi_type, /* P-TMSI type */
+ de_gmm_lai_2, /* Location Area Identification 2 */
/* Session Management Information Elements 10.5.6 */
de_sm_apn, /* Access Point Name */
de_sm_nsapi, /* Network Service Access Point Identifier */
@@ -5262,6 +5352,14 @@ dtap_gmm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV( 0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL);
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
+ ELEM_OPT_TV_SHORT(0xE0, GSM_A_PDU_TYPE_GM, DE_PTMSI_TYPE, NULL);
+
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_COMMON, DE_MS_NET_FEAT_SUP, NULL);
+
+ ELEM_OPT_TLV(0x14, GSM_A_PDU_TYPE_GM, DE_LAI_2, " - Old location area identification");
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5306,7 +5404,7 @@ dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TV( 0x25, GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
- ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302");
+ ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value");
ELEM_OPT_T( 0x8C, GSM_A_PDU_TYPE_GM, DE_CELL_NOT, NULL);
@@ -5318,9 +5416,11 @@ dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TV_SHORT( 0xA0, GSM_A_PDU_TYPE_GM, DE_REQ_MS_INFO, NULL);
- ELEM_OPT_TLV( 0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3319");
+ ELEM_OPT_TLV( 0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3319 value");
+
+ ELEM_OPT_TLV( 0x38, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3323 value" );
- ELEM_OPT_TLV( 0x38, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3323" );
+ ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5365,7 +5465,9 @@ dtap_gmm_attach_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
- ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302" );
+ ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value" );
+
+ ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5716,6 +5818,14 @@ dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
ELEM_OPT_TLV( 0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL);
+ ELEM_OPT_TV_SHORT(0xE0, GSM_A_PDU_TYPE_GM, DE_PTMSI_TYPE, NULL);
+
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_COMMON, DE_MS_NET_FEAT_SUP, NULL);
+
+ ELEM_OPT_TLV(0x14, GSM_A_PDU_TYPE_GM, DE_LAI_2, " - Old location area identification");
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5756,7 +5866,7 @@ dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
ELEM_OPT_TV( 0x25, GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
- ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302" );
+ ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value" );
ELEM_OPT_T( 0x8C, GSM_A_PDU_TYPE_GM, DE_CELL_NOT, NULL);
@@ -5772,9 +5882,11 @@ dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
ELEM_OPT_TV_SHORT( 0xA0, GSM_A_PDU_TYPE_GM, DE_REQ_MS_INFO, NULL);
- ELEM_OPT_TLV( 0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3319");
+ ELEM_OPT_TLV( 0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3319 value");
+
+ ELEM_OPT_TLV( 0x38, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3323 value");
- ELEM_OPT_TLV( 0x38, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3323");
+ ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5826,7 +5938,9 @@ dtap_gmm_rau_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, NULL);
- ELEM_OPT_TLV( 0x26, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302" );
+ ELEM_OPT_TLV(0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value");
+
+ ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5914,6 +6028,8 @@ dtap_gmm_service_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
ELEM_OPT_TLV( 0x36, GSM_A_PDU_TYPE_GM, DE_UPLINK_DATA_STATUS, NULL);
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5957,6 +6073,8 @@ dtap_gmm_service_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
+ ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -5992,6 +6110,8 @@ dtap_sm_act_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TV_SHORT( 0xA0, GSM_A_PDU_TYPE_GM, DE_REQ_TYPE, NULL);
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6034,6 +6154,8 @@ dtap_sm_act_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV( 0x39, GSM_A_PDU_TYPE_GM, DE_SM_CAUSE_2, " - SM cause");
+ ELEM_OPT_TV_SHORT(0xB0 , GSM_A_PDU_TYPE_GM, DE_SM_CONNECTIVITY_TYPE, NULL);
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6059,6 +6181,8 @@ dtap_sm_act_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
+ ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value");
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6093,6 +6217,8 @@ dtap_sm_act_sec_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui
ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6156,6 +6282,8 @@ dtap_sm_act_sec_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui
ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
+ ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value");
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6278,6 +6406,8 @@ dtap_sm_mod_pdp_req_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin
ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6358,6 +6488,8 @@ dtap_sm_mod_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
+ ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value");
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6551,6 +6683,8 @@ dtap_sm_act_mbms_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
/* 35 MBMS protocol configuration options MBMS protocol configuration options 10.5.6.15 O TLV 3 - 253 */
ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -6599,6 +6733,8 @@ dtap_sm_act_mbms_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
+ ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value");
+
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@@ -7152,6 +7288,26 @@ proto_register_gsm_a_gm(void)
FT_BOOLEAN, 8, TFS(&gsm_a_gm_gps_c_vals), 0x01,
NULL, HFILL }
},
+ { &hf_gsm_a_gm_lcs_molr,
+ { "LCS-MOLR", "gsm_a.gm.lcs_molr",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_lcs_molr_value), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_mbms,
+ { "MBMS", "gsm_a.gm.mbms",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_ims_vops,
+ { "IMS VoPS", "gsm_a.gm.ims_vops",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_ims_vops_value), 0x02,
+ "IMS voice over PS session indicator", HFILL }
+ },
+ { &hf_gsm_a_gm_emc_bs,
+ { "EMC BS", "gsm_a.gm.emc_bs",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_emc_bs_value), 0x01,
+ "Emergency bearer services indicator", HFILL }
+ },
{ &hf_gsm_a_gm_req_ms_info_irat,
{ "I-RAT", "gsm_a.gm.req_ms_info_irat",
FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_req_ms_info_irat_vals), 0x0,
@@ -7172,6 +7328,11 @@ proto_register_gsm_a_gm(void)
FT_UINT8, BASE_DEC, VALS(gsm_a_gm_voice_domain_pref_for_eutran_vals), 0x0,
NULL, HFILL }
},
+ { &hf_gsm_a_gm_ptmsi_type,
+ { "P-TMSI type", "gsm_a.gm.ptmsi_type",
+ FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_ptmsi_type_value), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_sm_pdp_type_org,
{ "PDP type organization", "gsm_a.sm.pdp_type_org",
FT_UINT8, BASE_DEC, VALS(gsm_a_sm_pdp_type_org_vals), 0x0f,
@@ -7192,11 +7353,6 @@ proto_register_gsm_a_gm(void)
FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_qos_prec_class_vals), 0x07,
NULL, HFILL }
},
- { &hf_gsm_a_qos_traf_handl_prio,
- { "Traffic handling priority", "gsm_a.qos.traf_handl_prio",
- FT_UINT8, BASE_DEC, NULL, 0x03,
- NULL, HFILL }
- },
{ &hf_gsm_a_qos_trans_delay,
{ "Transfer delay", "gsm_a.qos.trans_delay",
FT_UINT8, BASE_DEC, NULL, 0xfc,
@@ -7358,12 +7514,12 @@ proto_register_gsm_a_gm(void)
NULL, HFILL }
},
{ &hf_gsm_a_gmm_net_cap_ps_irat_iu,
- { "PS inter-RAT HO to UTRAN Iu mode capability", "gsm_a.gmm.net_cap.ps_irat_iu",
+ { "PS inter-RAT HO from GERAN to UTRAN Iu mode capability", "gsm_a.gmm.net_cap.ps_irat_iu",
FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_ps_irat_iu_vals), 0x80,
NULL, HFILL }
},
{ &hf_gsm_a_gmm_net_cap_ps_irat_s1,
- { "PS inter-RAT HO to E-UTRAN S1 mode capability", "gsm_a.gmm.net_cap.ps_irat_s1",
+ { "PS inter-RAT HO from GERAN to E-UTRAN S1 mode capability", "gsm_a.gmm.net_cap.ps_irat_s1",
FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_ps_irat_s1_vals), 0x40,
NULL, HFILL }
},
@@ -7673,15 +7829,35 @@ proto_register_gsm_a_gm(void)
NULL, HFILL }
},
{ &hf_gsm_a_gm_rac_utra_csg_cell_report,
- { "UTRA CSG Cells Reporting", "gsm_a.gm.rac.utra_csg_cell_report",
+ { "Reporting of UTRAN CSG cells in packet transfer mode", "gsm_a.gm.rac.utra_csg_cell_report",
FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_gm_rac_eutra_csg_cell_report,
- { "E-UTRA CSG Cells Reporting", "gsm_a.gm.rac.mtti_cap",
+ { "Reporting of E-UTRAN CSG cells in packet transfer mode", "gsm_a.gm.rac.eutra_csg_cell_report",
FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
NULL, HFILL }
},
+ { &hf_gsm_a_gm_rac_dtr_cap,
+ { "Dynamic Timeslot Reduction Capability", "gsm_a.gm.rac.dtr_cap",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_emsr_cap,
+ { "Enhanced Multiplexing for Single RLC Entity Capability", "gsm_a.gm.rac.emsr_cap",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_fast_down_freq_switch_cap,
+ { "Fast Downlink Frequency Switching Capability", "gsm_a.gm.rac.fast_down_freq_switch_cap",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_tighter_cap,
+ { "TIGHTER Capability", "gsm_a.gm.rac.tighter_cap",
+ FT_UINT8, BASE_DEC, VALS(tighter_cap_level_vals), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_sm_ti_flag,
{ "TI Flag", "gsm_a.sm.ti_flag",
FT_BOOLEAN, 8, TFS(&gsm_a_sm_ti_flag_vals), 0x80,