* Mobile radio interface Layer 3 specification;
* Core network protocols;
* Stage 3
- * (3GPP TS 24.008 version 8.6.0 Release 8)
+ * (3GPP TS 24.008 version 9.6.0 Release 9)
*
* $Id$
*
#include "packet-ber.h"
#include "packet-q931.h"
#include "packet-gsm_a_common.h"
-#include "packet-ipv6.h"
#include "packet-e212.h"
#include "packet-ppp.h"
{ 0x58, "Activate MBMS Context Reject" },
{ 0x59, "Request MBMS Context Activation" },
{ 0x5a, "Request MBMS Context Activation Reject" },
+ { 0x5b, "Request Secondary PDP Context Activation" },
+ { 0x5c, "Request Secondary PDP Context Activation Reject" },
+ { 0x5d, "Notification" },
{ 0, NULL }
};
{ 0x00, "MS Radio Access Capability" },
{ 0x00, "GMM Cause" },
{ 0x00, "Routing Area Identification" },
+ { 0x00, "Routing Area Identification 2" },
{ 0x00, "Update Result" },
{ 0x00, "Update Type" },
{ 0x00, "A&C Reference Number" },
{ 0x00, "PS LCS Capability" },
{ 0x00, "Network Feature Support" },
{ 0x00, "Inter RAT information container" },
+ { 0x00, "Requested MS information" },
+ { 0x00, "UE network capability" },
+ { 0x00, "E-UTRAN inter RAT information container" },
+ { 0x00, "Voice domain preference and UE's usage setting" },
/* Session Management Information Elements 10.5.6 */
{ 0x00, "Access Point Name" },
{ 0x00, "Network Service Access Point Identifier" },
{ 0x00, "MBMS protocol configuration options" },
{ 0x00, "Enhanced network service access point identifier" },
{ 0x00, "Request type" },
+ { 0x00, "Notification indicator" },
/* GPRS Common Information Elements 10.5.7 */
{ 0x00, "PDP Context Status" },
{ 0x00, "Radio Priority" },
{ 0x00, "GPRS Timer 2" },
{ 0x00, "Radio Priority 2"},
{ 0x00, "MBMS context status"},
+ { 0x00, "Uplink data status"},
{ 0x00, "Spare Nibble"},
{ 0, NULL }
};
static int hf_gsm_a_gm_update_type = -1;
static int hf_gsm_a_gm_gprs_timer_unit = -1;
static int hf_gsm_a_gm_gprs_timer_value = -1;
+static int hf_gsm_a_gm_nsapi_5_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_6_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_7_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_8_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_9_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_10_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_11_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_12_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_13_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_14_ul_stat = -1;
+static int hf_gsm_a_gm_nsapi_15_ul_stat = -1;
static int hf_gsm_a_gm_pco_pid = -1;
static int hf_gsm_a_gm_type_of_identity = -1;
static int hf_gsm_a_gm_rac = -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_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_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_sm_tmgi = -1;
static int hf_gsm_a_sm_enh_nsapi = -1;
static int hf_gsm_a_sm_req_type = -1;
+static int hf_gsm_a_sm_notif_ind = -1;
static int hf_gsm_a_gm_rac_ctrled_early_cm_sending = -1;
+static int hf_gsm_a_gm_rac_pseudo_sync = -1;
+static int hf_gsm_a_gm_rac_vgcs = -1;
+static int hf_gsm_a_gm_rac_vbs = -1;
static int hf_gsm_a_gm_rac_multislot_capability = -1;
+static int hf_gsm_a_gm_rac_hscsd_multi_slot_class = -1;
+static int hf_gsm_a_gm_rac_gprs_multi_slot_class = -1;
+static int hf_gsm_a_gm_rac_gprs_ext_dyn_alloc_cap = -1;
+static int hf_gsm_a_gm_rac_ecsd_multi_slot_class = -1;
+static int hf_gsm_a_gm_rac_egprs_multi_slot_class = -1;
+static int hf_gsm_a_gm_rac_egprs_ext_dyn_alloc_cap = -1;
+static int hf_gsm_a_gm_rac_dtm_gprs_multi_slot_class = -1;
static int hf_gsm_a_gm_rac_single_slt_dtm = -1;
static int hf_gsm_a_gm_rac_dtm_egprs_multi_slot_cls_pres = -1;
+static int hf_gsm_a_gm_rac_dtm_egprs_multi_slot_class = -1;
static int hf_gsm_a_gm_rac_8psk_pow_cap_pres = -1;
static int hf_gsm_a_gm_rac_comp_int_meas_cap = -1;
static int hf_gsm_a_gm_rel_lev_ind = -1;
static int hf_gsm_a_gm_rac_umts_384_tdd_ra_cap = -1;
static int hf_gsm_a_gm_rac_cdma2000_cap = -1;
static int hf_gsm_a_gm_rac_umts_128_tdd_ra_cap = -1;
+static int hf_gsm_a_gm_rac_mod_based_multi_slot_class_support = -1;
+static int hf_gsm_a_gm_rac_geran_iu_mode_cap = -1;
+static int hf_gsm_a_gm_rac_flo_iu_cap = -1;
+static int hf_gsm_a_gm_rac_mult_tbf_cap = -1;
+static int hf_gsm_a_gm_rac_down_adv_rec_perf = -1;
+static int hf_gsm_a_gm_rac_ext_rlc_mac_ctrl_msg_seg_cap = -1;
+static int hf_gsm_a_gm_rac_dtm_enh_cap = -1;
+static int hf_gsm_a_gm_rac_dtm_gprs_high_multi_slot_class = -1;
+static int hf_gsm_a_gm_rac_dtm_egprs_high_multi_slot_class = -1;
+static int hf_gsm_a_gm_rac_ps_ho_cap = -1;
+static int hf_gsm_a_gm_rac_dtm_ho_cap = -1;
+static int hf_gsm_a_gm_rac_multi_slot_cap_red_down_dual_carrier = -1;
+static int hf_gsm_a_gm_rac_down_dual_carrier_dtm_cap = -1;
+static int hf_gsm_a_gm_rac_flex_ts_assign = -1;
+static int hf_gsm_a_gm_rac_gan_ps_ho_cap = -1;
+static int hf_gsm_a_gm_rac_rlc_non_pers_mode = -1;
+static int hf_gsm_a_gm_rac_reduced_lat_cap = -1;
+static int hf_gsm_a_gm_rac_ul_egprs2 = -1;
+static int hf_gsm_a_gm_rac_dl_egprs2 = -1;
+static int hf_gsm_a_gm_rac_eutra_fdd_support = -1;
+static int hf_gsm_a_gm_rac_eutra_tdd_support = -1;
+static int hf_gsm_a_gm_rac_geran_to_eutra_support_in_geran_ptm = -1;
+static int hf_gsm_a_gm_rac_prio_based_resel_support = -1;
+static int hf_gsm_a_gm_rac_alt_efta_multi_slot_class = -1;
+static int hf_gsm_a_gm_rac_efta_multi_slot_cap_red_down_dual_carrier = -1;
+static int hf_gsm_a_gm_rac_ind_up_layer_pdu_start_cap_for_rlc_um = -1;
+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_sm_ti_flag = -1;
+static int hf_gsm_a_sm_ext = -1;
static int hf_gsm_a_gmm_net_cap_gea1 = -1;
static int hf_gsm_a_gmm_net_cap_smdch = -1;
static int hf_gsm_a_gmm_net_cap_lcs = -1;
static int hf_gsm_a_gmm_net_cap_ps_irat_iu = -1;
static int hf_gsm_a_gmm_net_cap_ps_irat_s1 = -1;
-static int hf_gsm_a_gmm_net_cap_csfb = -1;
+static int hf_gsm_a_gmm_net_cap_comb_proc = -1;
static int hf_gsm_a_gmm_net_cap_isr = -1;
static int hf_gsm_a_gmm_net_cap_srvcc_to_geran = -1;
static int hf_gsm_a_gmm_net_cap_epc = -1;
+static int hf_gsm_a_gmm_net_cap_nf = -1;
/* Initialize the subtree pointers */
static gint ett_tc_component = -1;
static dissector_handle_t data_handle;
static dissector_handle_t rrc_irat_ho_info_handle;
+static dissector_handle_t lte_rrc_ue_eutra_cap_handle;
static dissector_table_t gprs_sm_pco_subdissector_table; /* GPRS SM PCO PPP Protocols */
};
static guint16
-de_gmm_attach_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_attach_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_item(tree, hf_gsm_a_gm_fop, tvb, offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_res_of_attach, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gm_fop, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_res_of_attach, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
};
static guint16
-de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
proto_item *tf = NULL;
proto_tree *tf_tree = NULL;
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_ciph_key_seq_num, tvb, offset << 3, 4, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_ciph_key_seq_num, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
tf = proto_tree_add_text(tree,
tvb, offset, 1,
tf_tree = proto_item_add_subtree(tf, ett_gmm_attach_type );
- proto_tree_add_item(tf_tree, hf_gsm_a_gm_for, tvb, offset, 1, FALSE);
- proto_tree_add_item(tf_tree, hf_gsm_a_gm_type_of_attach, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tf_tree, hf_gsm_a_gm_for, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tf_tree, hf_gsm_a_gm_type_of_attach, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
/*
* [9] 10.5.5.3 Ciphering algorithm
*/
-static const value_string gsm_a_gm_type_of_ciph_alg_vals[] = {
+const value_string gsm_a_gm_type_of_ciph_alg_vals[] = {
{ 0x00, "ciphering not used" },
{ 0x01, "GPRS Encryption Algorithm GEA/1" },
{ 0x02, "GPRS Encryption Algorithm GEA/2" },
};
static guint16
-de_gmm_ciph_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ciph_alg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_type_of_ciph_alg, tvb, offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_type_of_ciph_alg, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
};
static guint16
-de_gmm_tmsi_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_tmsi_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_tmsi_flag, tvb, offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_tmsi_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
* [7] 10.5.5.5
*/
static guint16
-de_gmm_detach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_detach_type(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;
{ 0, 0, NULL },
};
guint16
-de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_drx_param(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;
oct);
curr_offset++;
- proto_tree_add_item(tf_tree, hf_gsm_a_gmm_cn_spec_drs_cycle_len_coef, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tf_tree, hf_gsm_a_gmm_split_on_ccch, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tf_tree, hf_gsm_a_gmm_non_drx_timer, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tf_tree, hf_gsm_a_gmm_cn_spec_drs_cycle_len_coef, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tf_tree, hf_gsm_a_gmm_split_on_ccch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tf_tree, hf_gsm_a_gmm_non_drx_timer, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
};
static guint16
-de_gmm_ftostby(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ftostby(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 bit_offset;
/* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE LOWER NIBBLE */
bit_offset = (offset << 3) + 4;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, FALSE);
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_force_to_standby, tvb, bit_offset + 1, 3, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_force_to_standby, tvb, bit_offset + 1, 3, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
* [9] 10.5.5.7 Force to standby (higher nibble)
*/
static guint16
-de_gmm_ftostby_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ftostby_h(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 bit_offset;
/* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
bit_offset = offset << 3;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, FALSE);
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_force_to_standby, tvb, bit_offset + 1, 3, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_force_to_standby, tvb, bit_offset + 1, 3, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
* [7] 10.5.5.8
*/
static guint16
-de_gmm_ptmsi_sig(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ptmsi_sig(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;
proto_item *curr_item;
curr_offset = offset;
- curr_item= proto_tree_add_item(tree,hf_gsm_a_ptmsi_sig,tvb,curr_offset,3,FALSE);
+ curr_item= proto_tree_add_item(tree,hf_gsm_a_ptmsi_sig,tvb,curr_offset,3,ENC_BIG_ENDIAN);
proto_item_append_text(curr_item,"%s",add_string ? add_string : "");
curr_offset+=3;
* [7] 10.5.5.8a
*/
static guint16
-de_gmm_ptmsi_sig2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_)
+de_gmm_ptmsi_sig2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len _U_)
{
guint32 curr_offset;
proto_item *curr_item;
curr_offset = offset;
- curr_item= proto_tree_add_item(tree,hf_gsm_a_ptmsi_sig2,tvb,curr_offset,3,FALSE);
+ curr_item= proto_tree_add_item(tree,hf_gsm_a_ptmsi_sig2,tvb,curr_offset,3,ENC_BIG_ENDIAN);
proto_item_append_text(curr_item,"%s",add_string ? add_string : "");
curr_offset+=3;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
};
static guint16
-de_gmm_ident_type2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ident_type2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_type_of_identity, tvb, offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_type_of_identity, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
};
static guint16
-de_gmm_imeisv_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_imeisv_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 bit_offset;
/* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
bit_offset = offset << 3;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, FALSE);
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_imeisv_req, tvb, bit_offset + 1, 3, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_imeisv_req, tvb, bit_offset + 1, 3, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
* [7] 10.5.5.11
*/
static guint16
-de_gmm_rec_npdu_lst(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_gmm_rec_npdu_lst(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guint curr_len;
} while ( curr_len > 1 );
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
"PS inter-RAT HO to E-UTRAN S1 mode not supported"
};
-static const true_false_string gsm_a_gmm_net_cap_csfb_vals = {
- "Mobile station supports CS fallback",
- "Mobile station does not support CS fallback"
+static const true_false_string gsm_a_gmm_net_cap_comb_proc_vals = {
+ "Mobile station supports EMM combined procedures",
+ "Mobile station does not support EMM combined procedures"
};
static const true_false_string gsm_a_gmm_net_cap_isr_vals = {
"EPC not supported"
};
+static const true_false_string gsm_a_gmm_net_cap_nf_vals = {
+ "Mobile station supports the notification procedure",
+ "Mobile station does not support the notification procedure"
+};
+
guint16
-de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
proto_tree *subtree;
curr_offset = offset;
/* bit 8: GEA1 */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_gea1, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_gea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 7: SM capabilities via dedicated channels */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_smdch, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_smdch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 6: SM capabilities via GPRS channels */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_smgprs, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_smgprs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 5: UCS2 support */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ucs2, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ucs2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bits 4 3: SS Screening Indicator */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ss_scr_ind, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ss_scr_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 2: SoLSA Capability */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_solsa, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_solsa, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 1 */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_rev, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
/* bit 8: PFC feature mode */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_pfc, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bits 7 6 5 4 3 2: Extended GEA bits */
- item = proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ext_gea_bits, tvb, curr_offset, 1, FALSE);
+ item = proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ext_gea_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
subtree = proto_item_add_subtree(item, ett_gmm_network_cap);
- proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea2, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea3, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea4, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea5, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea6, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea7, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 1: LCS VA capability */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_lcs, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_lcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
/* bit 8: PS inter-RAT HO to UTRAN Iu mode capability */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ps_irat_iu, tvb, curr_offset, 1, FALSE);
+ 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 */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ps_irat_s1, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ps_irat_s1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- /* bit 6: CSFB Capability */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_csfb, tvb, curr_offset, 1, FALSE);
+ /* bit 6: EMM Combined procedures capability */
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_comb_proc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 5: ISR support */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_isr, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_isr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 4: SRVCC to GERAN/UTRAN capability */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_srvcc_to_geran, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_srvcc_to_geran, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bit 3: EPC capability */
- proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_epc, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_epc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- /* bits 2 1: Spare bits */
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+6, 2, FALSE);
+ /* bit 3: 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 */
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
curr_offset++;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
{ 0, NULL }
};
-static const value_string gsm_a_gm_revision_level_indicator_vals[] = {
- { 0x00, "The ME is Release '98 or older" },
- { 0x01, "The ME is Release '99 onwards" },
+static const true_false_string gsm_a_gm_vgcs = {
+ "VGCS capability and notifications wanted",
+ "no VGCS capability or no notifications wanted"
+};
+
+static const true_false_string gsm_a_gm_vbs = {
+ "VBS capability and notifications wanted",
+ "no VBS capability or no notifications wanted"
+};
+
+static const value_string gsm_a_gm_multi_slot_vals[] = {
+ { 0x00, "Not specified" },
+ { 0x01, "Max Rx-Slot/TDMA:1 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:2 Tta:3 Ttb:2 Tra:4 Trb:2 Type:1" },
+ { 0x02, "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:3 Tta:3 Ttb:2 Tra:3 Trb:1 Type:1" },
+ { 0x03, "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:3 Tta:3 Ttb:2 Tra:3 Trb:1 Type:1" },
+ { 0x04, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
+ { 0x05, "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
+ { 0x06, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
+ { 0x07, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
+ { 0x08, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
+ { 0x09, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
+ { 0x0a, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
+ { 0x0b, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
+ { 0x0c, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:5 Tta:2 Ttb:1 Tra:2 Trb:1 Type:1" },
+ { 0x0d, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
+ { 0x0e, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
+ { 0x0f, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
+ { 0x10, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:2 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
+ { 0x11, "Max Rx-Slot/TDMA:7 Max Tx-Slot/TDMA:7 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:1 Trb:0 Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
+ { 0x12, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:8 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:0 Tra:0 Trb:0 Type:2" },
+ { 0x13, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x14, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x15, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x16, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x17, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x18, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x19, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x1a, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x1b, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x1c, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x1d, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:8 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
+ { 0x1e, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
+ { 0x1f, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
+ { 0x20, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
+ { 0x21, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
+ { 0x22, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
+ { 0x23, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x24, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x25, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x26, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x27, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x28, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x29, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x2a, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x2b, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x2c, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0x2d, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
+ { 0, NULL }
+};
+
+static const value_string gsm_a_gm_dtm_gprs_multi_slot_class_vals[] = {
+ { 0x00, "Unused. If received, the network shall interpret this as Multislot class 5" },
+ { 0x01, "Multislot class 5 supported" },
+ { 0x02, "Multislot class 9 supported" },
+ { 0x03, "Multislot class 11 supported" },
+ { 0, NULL }
+};
+
+static const true_false_string gsm_a_gm_revision_level_indicator = {
+ "The ME is Release '99 onwards",
+ "The ME is Release '98 or older"
+};
+
+static const value_string gsm_a_gm_down_adv_rec_perf_vals[] = {
+ { 0x00, "Downlink Advanced Receiver Performance not supported" },
+ { 0x01, "Downlink Advanced Receiver Performance - phase I supported" },
+ { 0x02, "Downlink Advanced Receiver Performance - phase II supported" },
+ { 0, NULL }
+};
+
+static const true_false_string gsm_a_gm_dtm_enh_cap = {
+ "The mobile station supports enhanced DTM CS establishment and enhanced DTM CS release procedures",
+ "The mobile station does not support enhanced DTM CS establishment and enhanced DTM CS release procedures"
+};
+
+static const value_string gsm_a_gm_dtm_gprs_high_multi_slot_class_vals[] = {
+ { 0x00, "Unused. If received, the network shall interpret this as 'Multislot class 31 or 36 supported'" },
+ { 0x01, "Multislot class 31 or 36 supported" },
+ { 0x02, "Multislot class 32 or 37 supported" },
+ { 0x03, "Multislot class 33 or 38 supported" },
+ { 0x04, "Multislot class 41 supported" },
+ { 0x05, "Multislot class 42 supported" },
+ { 0x06, "Multislot class 43 supported" },
+ { 0x07, "Multislot class 44 supported" },
+ { 0, NULL }
+};
+
+static const value_string gsm_a_gm_multi_slot_cap_red_down_dual_carrier_vals[] = {
+ { 0x00, "No reduction" },
+ { 0x01, "The MS supports 1 timeslot fewer than the maximum number of receive timeslots" },
+ { 0x02, "The MS supports 2 timeslots fewer than the maximum number of receive timeslots" },
+ { 0x03, "The MS supports 3 timeslots fewer than the maximum number of receive timeslots" },
+ { 0x04, "The MS supports 4 timeslots fewer than the maximum number of receive timeslots" },
+ { 0x05, "The MS supports 5 timeslots fewer than the maximum number of receive timeslots" },
+ { 0x06, "The MS supports 6 timeslots fewer than the maximum number of receive timeslots" },
+ { 0x07, "Reserved for future use" },
+ { 0, NULL }
+};
+
+static const value_string gsm_a_gm_ul_egprs2_vals[] = {
+ { 0x00, "The mobile station does not support either EGPRS2-A or EGPRS2-B in the uplink" },
+ { 0x01, "The mobile station supports EGPRS2-A in the uplink" },
+ { 0x02, "The mobile station supports both EGPRS2-A and EGPRS2-B in the uplink" },
+ { 0x03, "This value is not used in this release/version of the specifications. If received it shall be interpreted as 'The mobile station supports both EGPRS2-A and EGPRS2-B in the uplink'" },
+ { 0, NULL }
+};
+
+static const value_string gsm_a_gm_dl_egprs2_vals[] = {
+ { 0x00, "The mobile station does not support either EGPRS2-A or EGPRS2-B in the downlink" },
+ { 0x01, "The mobile station supports EGPRS2-A in the downlink" },
+ { 0x02, "The mobile station supports both EGPRS2-A and EGPRS2-B in the downlink" },
+ { 0x03, "This value is not used in this release/version of the specifications. If received it shall be interpreted as 'The mobile station supports both EGPRS2-A and EGPRS2-B in the downlink'" },
+ { 0, NULL }
+};
+
+static const value_string gsm_a_gm_geran_to_eutra_support_in_geran_ptm_vals[] = {
+ { 0x00, "None" },
+ { 0x01, "E-UTRAN Neighbour Cell measurements and MS autonomous cell reselection to E-UTRAN supported" },
+ { 0x02, "CCN towards E-UTRAN, E-UTRAN Neighbour Cell measurement reporting and Network controlled cell reselection to E-UTRAN supported in addition to capabilities indicated by '01'" },
+ { 0x03, "PS Handover to E-UTRAN supported in addition to capabilities indicated by '01' and '10'" },
+ { 0, NULL }
+};
+static const value_string gsm_a_gm_alt_efta_multi_slot_class_vals[] = {
+ { 0x00, "No Alternative EFTA multislot class is indicated. Use (DTM) EGPRS (high) multislot class only" },
+ { 0x01, "Alternative EFTA multislot class is Multislot class 19" },
+ { 0x02, "Alternative EFTA multislot class is Multislot class 20" },
+ { 0x03, "Alternative EFTA multislot class is Multislot class 21" },
+ { 0x04, "Alternative EFTA multislot class is Multislot class 22" },
+ { 0x05, "Alternative EFTA multislot class is Multislot class 23" },
+ { 0x06, "Alternative EFTA multislot class is Multislot class 24" },
+ { 0x07, "Alternative EFTA multislot class is Multislot class 25" },
+ { 0x08, "Alternative EFTA multislot class is Multislot class 26" },
+ { 0x09, "Alternative EFTA multislot class is Multislot class 27" },
+ { 0x0a, "Alternative EFTA multislot class is Multislot class 28" },
+ { 0x0b, "Alternative EFTA multislot class is Multislot class 29" },
+ { 0x0c, "Unused" },
+ { 0x0d, "Unused" },
+ { 0x0e, "Unused" },
+ { 0x0f, "Unused" },
{ 0, NULL }
};
+
guint16
-de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guint curr_len;
guchar acc_type;
guint value;
const gchar *str;
- /** XXX: AFAIT only the first 32 entries of the following are actually used. Is this a bug someplace ?? */
- static const gchar *multi_slot_str[64] = {
- "Not specified", /* 00 */
- "Max Rx-Slot/TDMA:1 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:2 Tta:3 Ttb:2 Tra:4 Trb:2 Type:1", /* 01 */
- "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:3 Tta:3 Ttb:2 Tra:3 Trb:1 Type:1", /* 02 */
- "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:3 Tta:3 Ttb:2 Tra:3 Trb:1 Type:1", /* 03 */
- "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1", /* 04 */
- "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1", /* 05 */
- "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1", /* 06 */
- "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1", /* 07 */
- "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1", /* 08 */
- "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1", /* 09 */
- "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1", /* 10 */
- "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1", /* 11 */
- "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:5 Tta:2 Ttb:1 Tra:2 Trb:1 Type:1", /* 12 */
- "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)", /* 13 */
- "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)", /* 14 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)", /* 15 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:2 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)", /* 16 */
- "Max Rx-Slot/TDMA:7 Max Tx-Slot/TDMA:7 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:1 Trb:0 Type:2 (a: 1 with frequency hopping, 0 otherwise)", /* 17 */
- "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:8 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:0 Tra:0 Trb:0 Type:2", /* 18 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 19 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 20 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 21 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 22 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 23 */
- "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 24 */
- "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 25 */
- "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 26 */
- "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 27 */
- "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 28 */
- "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:8 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise", /* 29 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1", /* 30 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1", /* 31 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1", /* 32 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1", /* 33 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1", /* 34 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 35 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 36 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 37 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 38 */
- "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 39 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 40 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 41 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 42 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 43 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 44 */
- "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))", /* 45 */
- "Not specified", /* 46 */
- "Not specified", /* 47 */
- "Not specified", /* 48 */
- "Not specified", /* 49 */
- "Not specified", /* 50 */
- "Not specified", /* 51 */
- "Not specified", /* 52 */
- "Not specified", /* 53 */
- "Not specified", /* 54 */
- "Not specified", /* 55 */
- "Not specified", /* 56 */
- "Not specified", /* 57 */
- "Not specified", /* 58 */
- "Not specified", /* 59 */
- "Not specified", /* 60 */
- "Not specified", /* 61 */
- "Not specified", /* 62 */
- "Not specified", /* 63 */
- };
guint indx = 0;
guchar dtm_gprs_mslot = 0;
guchar dtm_egprs_mslot = 4;
acc_type = oct>>(32-bits_needed);
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_tech_type, tvb, bit_offset, 4, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_tech_type, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset+=4;
curr_bits_length -= bits_needed;
GET_DATA;
bits_length = curr_bits_length = oct>>(32-bits_needed);
-
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_cap_struct_len, tvb, bit_offset, 7, FALSE);
+
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_cap_struct_len, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
proto_item_set_len(tf, (bits_length>>3)+1);
/* This is already done - length doesn't contain this field
curr_bits_length -= bits_needed;
acc_type = oct>>(32-bits_needed);
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_cap_struct_len, tvb, bit_offset, 7, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_cap_struct_len, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
bit_offset+=4;
curr_bits_length -= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ctrled_early_cm_sending, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ctrled_early_cm_sending, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0x00: str="PS capability not present"; break;
- case 0x01: str="PS capability present"; break;
- default: str="This should not happen";
- }
-
- proto_tree_add_text(tf_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "Pseudo Synchronisation: %s (%u)",str,oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_pseudo_sync, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0x00: str="no VGCS capability or no notifications wanted"; break;
- case 0x01: str="VGCS capability and notifications wanted"; break;
- default: str="This should not happen";
- }
-
- proto_tree_add_text(tf_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "Voice Group Call Service: %s (%u)",str,oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_vgcs, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0x00: str="no VBS capability or no notifications wanted"; break;
- case 0x01: str="VBS capability and notifications wanted"; break;
- default: str="This should not happen";
- }
-
- proto_tree_add_text(tf_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "Voice Broadcast Service: %s (%u)",str,oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_vbs, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
value = oct>>(32-bits_needed);
- mc_item = proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_multislot_capability, tvb, bit_offset, 1, FALSE);
+ mc_item = proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_multislot_capability, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
bits_needed = 5;
GET_DATA;
- /* analyse bits */
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "HSCSD multislot class: %s (%u)",multi_slot_str[oct>>(32-bits_needed)],oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_hscsd_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
bit_offset+=5;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 5;
GET_DATA;
- /* analyse bits */
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "GPRS multislot class: %s (%u)",multi_slot_str[oct>>(32-bits_needed)],oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_gprs_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
bit_offset+=5;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0x00: str="Extended Dynamic Allocation Capability for GPRS is not implemented"; break;
- case 0x01: str="Extended Dynamic Allocation Capability for GPRS is implemented"; break;
- default: str="This should not happen";
- }
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "GPRS Extended Dynamic Allocation Capability: %s (%u)",str,oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_gprs_ext_dyn_alloc_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
GET_DATA;
/* analyse bits */
- proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_sms_value, tvb, bit_offset, 4, FALSE);
+ proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_sms_value, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset+=4;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
GET_DATA;
/* analyse bits */
- proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_sm_value, tvb, bit_offset, 4, FALSE);
+ proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_sm_value, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset+=4;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 5;
GET_DATA;
- /* analyse bits */
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "ECSD multislot class: %s (%u)",multi_slot_str[oct>>(32-bits_needed)],oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ecsd_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
bit_offset+=5;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 5;
GET_DATA;
- /* analyse bits */
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "EGPRS multislot class: %s (%u)",multi_slot_str[oct>>(32-bits_needed)],oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_egprs_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
bit_offset+=5;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0x00: str="Extended Dynamic Allocation Capability for EGPRS is not implemented"; break;
- case 0x01: str="Extended Dynamic Allocation Capability for EGPRS is implemented"; break;
- default: str="This should not happen";
- }
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "EGPRS Extended Dynamic Allocation Capability: %s (%u)",str, oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_egprs_ext_dyn_alloc_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
/* analyse bits */
dtm_gprs_mslot = oct>>(32-bits_needed);
- switch ( oct>>(32-bits_needed) )
- {
- case 0: str="Unused. If received, the network shall interpret this as Multislot class 5"; break;
- case 1: str="Multislot class 5 supported"; break;
- case 2: str="Multislot class 9 supported"; break;
- case 3: str="Multislot class 11 supported"; break;
- default: str="This should not happen";
- }
-
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "DTM GPRS Multi Slot Class: %s (%u)",str,oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_gprs_multi_slot_class, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
bit_offset+=2;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_rac_single_slt_dtm, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_rac_single_slt_dtm, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
/* analyse bits */
dtm_egprs_mslot = oct>>(32-bits_needed);
- proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_rac_dtm_egprs_multi_slot_cls_pres, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_rac_dtm_egprs_multi_slot_cls_pres, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 2;
GET_DATA;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0: str="Unused. If received, the network shall interpret this as Multislot class 5"; break;
- case 1: str="Multislot class 5 supported"; break;
- case 2: str="Multislot class 9 supported"; break;
- case 3: str="Multislot class 11 supported"; break;
- default: str="This should not happen";
- }
-
- proto_tree_add_text(mc_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "DTM EGPRS Multi Slot Class: %s (%u)",str,oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_egprs_multi_slot_class, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
bit_offset+=2;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_8psk_pow_cap_pres, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_8psk_pow_cap_pres, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_comp_int_meas_cap, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_comp_int_meas_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rel_lev_ind, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rel_lev_ind, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_fdd_cap, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_fdd_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_384_tdd_ra_cap, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_384_tdd_ra_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_cdma2000_cap, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_cdma2000_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_128_tdd_ra_cap, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_128_tdd_ra_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_feat_pkg, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_feat_pkg, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
+ bit_offset++;
/*
* Extended DTM GPRS Multi Slot Class
bits_needed = 1;
GET_DATA;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0x00: str="Modulation based multislot class not supported"; break;
- case 0x01: str="Modulation based multislot class supported"; break;
- default: str="This should not happen";
- }
-
- proto_tree_add_text(tf_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "Modulation based multislot class support: %s (%u)",str,oct>>(32-bits_needed));
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_mod_based_multi_slot_class_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset++;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_needed = 1;
GET_DATA;
+ value = tvb_get_bits8(tvb, bit_offset, 1);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_iu_mode_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;
+ if (value)
+ {
+ /* GERAN Iu Mode Capabilities struct present */
+ bits_needed = 4;
+ GET_DATA;
+ value = tvb_get_bits8(tvb, bit_offset, 4);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+ if (value)
+ {
+ /*
+ * FLO Iu Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_flo_iu_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;
+ value--;
+
+ /* skip spare bits */
+ bit_offset+=value;
+ curr_bits_length -= value;
+ oct <<= value;
+ bits_in_oct -= value;
+ }
+ }
+
+ /*
+ * GMSK Multislot Power Profile
+ */
+ bits_needed = 2;
+ GET_DATA;
+
/* analyse bits */
switch ( oct>>(32-bits_needed) )
{
- case 0x00: str="GERAN Iu mode not supported"; break;
- case 0x01: str="GERAN Iu mode supported"; break;
+ case 0x00: str="GMSK_MULTISLOT_POWER_PROFILE 0"; break;
+ case 0x01: str="GMSK_MULTISLOT_POWER_PROFILE 1"; break;
+ case 0x02: str="GMSK_MULTISLOT_POWER_PROFILE 2"; break;
+ case 0x03: str="GMSK_MULTISLOT_POWER_PROFILE 3"; break;
default: str="This should not happen";
}
proto_tree_add_text(tf_tree,
tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "GERAN Iu Mode Capability: %s (%u)",str,oct>>(32-bits_needed));
- bit_offset++;
+ "GMSK Multislot Power Profile: %s (%u)",str,oct>>(32-bits_needed));
+ bit_offset+=2;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
/*
- * GMSK/8-PSK Multislot Power Profile
+ * 8-PSK Multislot Power Profile
*/
- bits_needed = 1;
+ bits_needed = 2;
GET_DATA;
/* analyse bits */
+ switch ( oct>>(32-bits_needed) )
+ {
+ case 0x00: str="8-PSK_MULTISLOT_POWER_PROFILE 0"; break;
+ case 0x01: str="8-PSK_MULTISLOT_POWER_PROFILE 1"; break;
+ case 0x02: str="8-PSK_MULTISLOT_POWER_PROFILE 2"; break;
+ case 0x03: str="8-PSK_MULTISLOT_POWER_PROFILE 3"; break;
+ default: str="This should not happen";
+ }
+
+ proto_tree_add_text(tf_tree,
+ tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
+ "8-PSK Multislot Power Profile: %s (%u)",str,oct>>(32-bits_needed));
+ bit_offset+=2;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Release 6
+ */
+
+ /*
+ * Multiple TBF Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_mult_tbf_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;
+
+ /*
+ * Downlink Advanced Receiver Performance
+ */
+ bits_needed = 2;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_down_adv_rec_perf, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Extended RLC/MAC Control Message Segmentation Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ext_rlc_mac_ctrl_msg_seg_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;
+
+ /*
+ * DTM Enhancements Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_enh_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;
+
+ /*
+ * DTM GPRS High Multi Slot Class & DTM EGPRS High Multi Slot Class
+ */
+ bits_needed = 1;
+ GET_DATA;
if ((oct>>(32-bits_needed))==0)
{
- proto_tree_add_text(tf_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "GMSK/8-PSK Multislot Power Profile: Bits are not available (%u)",oct>>(32-bits_needed));
- bit_offset++;
+ bit_offset+=bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
- bits_in_oct -= bits_needed;
+ bits_in_oct -= bits_needed;
}
else
{
+ bit_offset+=bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
- bit_offset++;
/*
- * GMSK Multislot Power Profile
+ * DTM GPRS High Multi Slot Class
*/
- bits_needed = 2;
+ bits_needed = 3;
GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_gprs_high_multi_slot_class, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
+ bits_needed = 1;
+ GET_DATA;
+ if ((oct>>(32-bits_needed))==0)
{
- case 0x00: str="GMSK_MULTISLOT_POWER_PROFILE 0"; break;
- case 0x01: str="GMSK_MULTISLOT_POWER_PROFILE 1"; break;
- case 0x02: str="GMSK_MULTISLOT_POWER_PROFILE 2"; break;
- case 0x03: str="GMSK_MULTISLOT_POWER_PROFILE 3"; break;
- default: str="This should not happen";
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
}
+ else
+ {
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
- proto_tree_add_text(tf_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "GMSK Multislot Power Profile: %s (%u)",str,oct>>(32-bits_needed));
- bit_offset+=2;
+ /*
+ * DTM EGPRS High Multi Slot Class
+ */
+ bits_needed = 3;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_egprs_high_multi_slot_class, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+ }
+ }
+
+ /*
+ * PS Handover Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ps_ho_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;
+
+ /*
+ * Release 7
+ */
+
+ /*
+ * DTM Handover Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_ho_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;
+
+ /*
+ * Multislot Capability Reduction for Downlink Dual Carrier & Downlink Dual Carrier for DTM Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ if ((oct>>(32-bits_needed))==0)
+ {
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+ }
+ else
+ {
+ bit_offset+=bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
/*
- * 8-PSK Multislot Power Profile
+ * Multislot Capability Reduction for Downlink Dual Carrier
*/
- bits_needed = 2;
+ bits_needed = 3;
GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_multi_slot_cap_red_down_dual_carrier, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
- /* analyse bits */
- switch ( oct>>(32-bits_needed) )
- {
- case 0x00: str="8-PSK_MULTISLOT_POWER_PROFILE 0"; break;
- case 0x01: str="8-PSK_MULTISLOT_POWER_PROFILE 1"; break;
- case 0x02: str="8-PSK_MULTISLOT_POWER_PROFILE 2"; break;
- case 0x03: str="8-PSK_MULTISLOT_POWER_PROFILE 3"; break;
- default: str="This should not happen";
- }
+ /*
+ * Downlink Dual Carrier for DTM Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_down_dual_carrier_dtm_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;
+ }
- proto_tree_add_text(tf_tree,
- tvb, curr_offset-1-add_ocetets, 1+add_ocetets,
- "8-PSK Multislot Power Profile: %s (%u)",str,oct>>(32-bits_needed));
- bit_offset+=2;
+ /*
+ * Flexible Timeslot Assignment
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_flex_ts_assign, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * GAN PS Handover Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_gan_ps_ho_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;
+
+ /*
+ * RLC Non-persistent Mode
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_rlc_non_pers_mode, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Reduced Latency Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_reduced_lat_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;
+
+ /*
+ * Uplink EGPRS2
+ */
+ bits_needed = 2;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ul_egprs2, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Downlink EGPRS2
+ */
+ bits_needed = 2;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dl_egprs2, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Release 8
+ */
+
+ /*
+ * E-UTRA FDD support
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_fdd_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * E-UTRA TDD support
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_tdd_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * GERAN to E-UTRA support in GERAN packet transfer mode
+ */
+ bits_needed = 2;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_to_eutra_support_in_geran_ptm, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Priority-based reselection support
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_prio_based_resel_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * Release 9
+ */
+
+ /*
+ * Enhanced Flexible Timeslot Assignment
+ */
+ bits_needed = 1;
+ GET_DATA;
+ if ((oct>>(32-bits_needed))==0)
+ {
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+ }
+ else
+ {
+ bit_offset+=bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
+ /*
+ * Alternative EFTA Multislot Class
+ */
+ bits_needed = 4;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_alt_efta_multi_slot_class, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * EFTA Multislot Capability Reduction for Downlink Dual Carrier
+ */
+ bits_needed = 3;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_efta_multi_slot_cap_red_down_dual_carrier, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
}
+
+ /*
+ * Indication of Upper Layer PDU Start Capability for RLC UM
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ind_up_layer_pdu_start_cap_for_rlc_um, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * EMST Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_emst_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;
+
+ /*
+ * MTTI Capability
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_mtti_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;
+
+ /*
+ * UTRA CSG Cells Reporting
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_utra_csg_cell_report, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset+=bits_needed;
+ curr_bits_length -= bits_needed;
+ oct <<= bits_needed;
+ bits_in_oct -= bits_needed;
+
+ /*
+ * E-UTRA CSG Cells Reporting
+ */
+ bits_needed = 1;
+ GET_DATA;
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_csg_cell_report, tvb, bit_offset, 1, 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
curr_offset+= curr_len;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
/* NOTE: The listed reject cause values are defined in annex G. */
static guint16
-de_gmm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_cause(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;
curr_offset = offset;
- proto_tree_add_item(tree, hf_gsm_a_gm_cause, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gm_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
* [7] 10.5.5.15 Routing area identification
*/
guint16
-de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
proto_tree *subtree;
proto_item *item;
mcc,mnc,lac,rac);
subtree = proto_item_add_subtree(item, ett_gmm_rai);
- dissect_e212_mcc_mnc(tvb, gsm_a_dtap_pinfo, subtree, offset, TRUE);
+ dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, TRUE);
- proto_tree_add_item(subtree, hf_gsm_a_lac, tvb, curr_offset+3, 2, FALSE);
- proto_tree_add_item(subtree, hf_gsm_a_gm_rac, tvb, curr_offset+5, 1, FALSE);
+ proto_tree_add_item(subtree, hf_gsm_a_lac, tvb, curr_offset+3, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_gm_rac, tvb, curr_offset+5, 1, ENC_BIG_ENDIAN);
curr_offset+=6;
if (add_string)
return(curr_offset - offset);
}
+/*
+ * [7] 10.5.5.15a Routing area identification 2
+ */
+static guint16
+de_gmm_rai2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ /* The routing area identification 2 value is coded as octet 2 to 7 of the Routing area identification information element. */
+ return de_gmm_rai(tvb, tree, pinfo, offset, len, add_string, string_len);
+}
+
/*
* [7] 10.5.5.17
*/
static guint16
-de_gmm_update_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_update_res(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;
};
static guint16
-de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
proto_item *tf = NULL;
proto_tree *tf_tree = NULL;
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_ciph_key_seq_num, tvb, offset << 3, 4, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_ciph_key_seq_num, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
tf = proto_tree_add_text(tree,
tvb, offset, 1,
tf_tree = proto_item_add_subtree(tf, ett_gmm_update_type );
- proto_tree_add_item(tf_tree, hf_gsm_a_gm_for, tvb, offset, 1, FALSE);
- proto_tree_add_item(tf_tree, hf_gsm_a_gm_update_type, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tf_tree, hf_gsm_a_gm_for, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tf_tree, hf_gsm_a_gm_update_type, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
* [9] 10.5.5.19 A&C reference number (lower nibble)
*/
static guint16
-de_gmm_ac_ref_nr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ac_ref_nr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
/* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE LOWER NIBBLE */
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_ac_ref_nr, tvb, (offset << 3) + 4, 4, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_ac_ref_nr, tvb, (offset << 3) + 4, 4, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
* [9] 10.5.5.19 A&C reference number (higher nibble)
*/
static guint16
-de_gmm_ac_ref_nr_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ac_ref_nr_h(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
/* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_ac_ref_nr, tvb, offset << 3, 4, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_ac_ref_nr, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
};
static guint16
-de_gmm_service_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_service_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 bit_offset;
bit_offset = offset << 3;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += 1;
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_serv_type, tvb, bit_offset, 3, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_serv_type, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
bit_offset += 3;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += 1;
- proto_tree_add_bits_item(tree, hf_gsm_a_gm_ciph_key_seq_num, tvb, bit_offset, 3, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_ciph_key_seq_num, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
};
static guint16
-de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 2, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_apc, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_otd_a, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_otd_b, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_gps_a, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_gps_b, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_gm_gps_c, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_apc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_otd_a, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_otd_b, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_gps_a, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_gps_b, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_gm_gps_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
* [7] 10.5.5.23
*/
static guint16
-de_gmm_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+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;
/* [7] 10.5.5.24 Inter RAT information container */
static guint16
-de_gmm_rat_info_container(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_gmm_rat_info_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
tvbuff_t *rrc_irat_ho_info_tvb;
defined in 3GPP TS 25.331 [23c]. If this field includes padding bits, they are defined in 3GPP TS 25.331 [23c].*/
rrc_irat_ho_info_tvb = tvb_new_subset(tvb, curr_offset, len, len);
if (rrc_irat_ho_info_handle)
- call_dissector(rrc_irat_ho_info_handle, rrc_irat_ho_info_tvb, gsm_a_dtap_pinfo , tree);
+ call_dissector(rrc_irat_ho_info_handle, rrc_irat_ho_info_tvb,pinfo , tree);
else
proto_tree_add_text(tree, tvb, curr_offset, len,"INTER RAT HANDOVER INFO - Not decoded");
}
+/* [7] 10.5.5.25 Requested MS information */
+static const true_false_string gsm_a_gm_req_ms_info_irat_vals = {
+ "Inter RAT information container IE requested",
+ "Inter RAT information container IE not requested"
+};
+static const true_false_string gsm_a_gm_req_ms_info_irat2_vals = {
+ "E-UTRAN inter RAT information container IE requested",
+ "E-UTRAN inter RAT information container IE not requested"
+};
+
+static guint16
+de_gmm_req_ms_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ guint32 bit_offset;
+
+ curr_offset = offset;
+ bit_offset = (curr_offset<<3)+4;
+
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_req_ms_info_irat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_req_ms_info_irat2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset+=2;
+ curr_offset++;
+
+ return len;
+}
+
+/* [7] 10.5.5.26 UE network capability
+ * See subclause 9.9.3.x in 3GPP TS 24.301 [120].
+ */
+
+/* [7] 10.5.5.27 E-UTRAN inter RAT information container */
+static guint16
+de_gmm_eutran_irat_info_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ tvbuff_t *lte_rrc_ue_eutra_cap_tvb;
+
+ curr_offset = offset;
+
+/* The value part of the E-UTRAN inter RAT information container information element
+ is formatted and coded according to the UE-EUTRA-Capability IE defined in 3GPP TS 36.331 [129]*/
+ lte_rrc_ue_eutra_cap_tvb = tvb_new_subset(tvb, curr_offset, len, len);
+ if (lte_rrc_ue_eutra_cap_handle)
+ call_dissector(lte_rrc_ue_eutra_cap_handle, lte_rrc_ue_eutra_cap_tvb, pinfo, tree);
+ else
+ proto_tree_add_text(tree, tvb, curr_offset, len,"E-UTRAN Inter RAT information container - Not decoded");
+
+ return len;
+}
+
+/* [7] 10.5.5.28 Voice domain preference and UE's usage setting */
+static const true_false_string gsm_a_gm_ue_usage_setting_vals = {
+ "Data centric",
+ "Voice centric"
+};
+static const value_string gsm_a_gm_voice_domain_pref_for_eutran_vals[] = {
+ {0x0, "CS Voice only"},
+ {0x1, "IMS PS Voice only"},
+ {0x2, "CS voice preferred, IMS PS Voice as secondary"},
+ {0x3, "IMS PS voice preferred, CS Voice as secondary"},
+ { 0, NULL }
+};
+
+static guint16
+de_gmm_voice_domain_pref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ guint32 bit_offset;
+
+ curr_offset = offset;
+ bit_offset = curr_offset<<3;
+
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
+ bit_offset+=5;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_ue_usage_setting, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_voice_domain_pref_for_eutran, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ bit_offset+=2;
+ curr_offset++;
+
+ return len;
+}
+
/*
* [7] 10.5.7.1
*/
static guint16
-de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint8 oct;
guint16 pdp_nr;
curr_offset++;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
* [7] 10.5.7.2
*/
static guint16
-de_gc_radio_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gc_radio_prio(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;
};
static guint16
-de_gc_timer(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gc_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;
str);
subtree = proto_item_add_subtree(item, ett_gmm_gprs_timer);
- proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer_unit, tvb, offset, 1, FALSE);
- proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer_value, tvb, offset, 1, FALSE);
+ proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
* [7] 10.5.7.4
*/
static guint16
-de_gc_timer2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_)
+de_gc_timer2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_)
{
guint8 oct;
guint16 val;
* [7] 10.5.7.5
*/
static guint16
-de_gc_radio_prio2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_gc_radio_prio2(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;
* [8] 10.5.7.6 MBMS context status
*/
static guint16
-de_gc_mbms_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_gc_mbms_context_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
- guint i;
+ guint i;
guint8 oct, j;
proto_item *tf = NULL;
proto_tree *tf_tree = NULL;
return(len);
}
+
+/*
+ * [8] 10.5.7.7 Uplink data status
+ */
+static const true_false_string gsm_a_gm_nsapi_ul_stat_vals = {
+ "uplink data are pending for the preserved PDP context",
+ "no uplink data are pending for the preserved PDP context or the PDP context is PDP-INACTIVE or is PDP-ACTIVE with a RAB already established"
+};
+
+static guint16
+de_gc_uplink_data_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ guint32 bit_offset;
+
+ curr_offset = offset;
+ bit_offset = curr_offset<<3;
+
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_7_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_6_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_5_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
+ bit_offset+=5;
+ curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_15_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_14_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_13_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_12_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_11_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_10_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_9_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_8_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ curr_offset++;
+
+ return(len);
+}
+
/*
* [7] 10.5.6.1
*/
-#define MAX_APN_LENGTH 50
+#define MAX_APN_LENGTH 100
guint16
-de_sm_apn(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_)
+de_sm_apn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len _U_)
{
guint32 curr_offset;
guint curr_len;
curr_offset+= len;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
* [7] 10.5.6.2
*/
static guint16
-de_sm_nsapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_)
+de_sm_nsapi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_)
{
guint8 oct;
guint32 curr_offset;
};
guint16
-de_sm_pco(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
proto_item *generated_item = NULL;
guint32 curr_offset;
oct = tvb_get_guint8(tvb, curr_offset);
- link_dir = gsm_a_dtap_pinfo->link_dir;
+ link_dir = pinfo->link_dir;
generated_item =proto_tree_add_int(tree, hf_gsm_a_gm_link_dir, tvb, curr_offset, 0, link_dir);
PROTO_ITEM_SET_GENERATED(generated_item);
/* 1 ext 0 0 0 0 Spare Configuration protocol */
- proto_tree_add_item(tree, hf_gsm_a_gm_sm_ext, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_gm_sm_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* Configuration protocol (octet 3)
* Bits
* 3 2 1
* dissect the embedded message
*/
l3_tvb = tvb_new_subset(tvb, curr_offset, e_len, e_len);
- call_dissector(handle, l3_tvb , gsm_a_dtap_pinfo , tree );
+ /* In this case we do not want the columns updated */
+ col_set_writable(pinfo->cinfo, FALSE);
+ call_dissector(handle, l3_tvb , pinfo , tree );
+ col_set_writable(pinfo->cinfo, TRUE);
}
else
{
* dissect the embedded DATA message
*/
l3_tvb = tvb_new_subset(tvb, curr_offset, e_len, e_len);
- call_dissector(data_handle, l3_tvb, gsm_a_dtap_pinfo , tree);
+ call_dissector(data_handle, l3_tvb, pinfo , tree);
}
}
}
}
curr_offset+= curr_len;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
};
static guint16
-de_sm_pdp_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_pdp_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
- guint curr_len;
const gchar *str;
guchar pdp_type_org, pdp_type_num;
- curr_len = len;
curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 4, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_sm_pdp_type_org, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_sm_pdp_type_org, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
pdp_type_org = tvb_get_guint8(tvb, curr_offset) & 0x0f;
curr_offset += 1;
switch (pdp_type_num)
{
case 0x57:
- proto_tree_add_item(tree,hf_gsm_a_sm_ip6_address,tvb,curr_offset,16,FALSE);
+ proto_tree_add_item(tree,hf_gsm_a_sm_ip6_address,tvb,curr_offset,16,ENC_NA);
curr_offset+=16;
break;
case 0x8d:
- proto_tree_add_item(tree,hf_gsm_a_sm_ip4_address,tvb,curr_offset,4,FALSE);
+ proto_tree_add_item(tree,hf_gsm_a_sm_ip4_address,tvb,curr_offset,4,ENC_BIG_ENDIAN);
curr_offset+=4;
- proto_tree_add_item(tree,hf_gsm_a_sm_ip6_address,tvb,curr_offset,16,FALSE);
+ proto_tree_add_item(tree,hf_gsm_a_sm_ip6_address,tvb,curr_offset,16,ENC_NA);
curr_offset+=16;
break;
default:
- proto_tree_add_item(tree,hf_gsm_a_sm_ip4_address,tvb,curr_offset,4,FALSE);
+ proto_tree_add_item(tree,hf_gsm_a_sm_ip4_address,tvb,curr_offset,4,ENC_BIG_ENDIAN);
curr_offset+=4;
}
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
}
guint16
-de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guchar oct, tmp_oct;
curr_offset = offset;
/* Octet 3 */
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 2, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_delay_cls, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_reliability_cls, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_delay_cls, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_reliability_cls, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset+= 1;
/* Octet 4 */
oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_item(tree, hf_gsm_a_qos_peak_thr, tvb, curr_offset, 1, FALSE);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3) + 4, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_prec_class, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_qos_peak_thr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3) + 4, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_prec_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset+= 1;
/* Octet 5 */
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 3, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_mean_thr, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_mean_thr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset+= 1;
NO_MORE_DATA_CHECK(len);
/* Octet 6 */
- proto_tree_add_item(tree, hf_gsm_a_qos_traffic_cls, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_del_order, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_del_of_err_sdu, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_qos_traffic_cls, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_del_order, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_del_of_err_sdu, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset+= 1;
NO_MORE_DATA_CHECK(len);
NO_MORE_DATA_CHECK(len);
/* Octet 10 */
- proto_tree_add_item(tree, hf_gsm_a_qos_ber, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_sdu_err_rat, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_qos_ber, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_sdu_err_rat, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset+= 1;
NO_MORE_DATA_CHECK(len);
/* Ocet 14 */
oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 3, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_qos_signalling_ind, tvb , curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_qos_signalling_ind, tvb , curr_offset, 1, ENC_BIG_ENDIAN);
tmp_oct = oct & 7;
if (tmp_oct == 0x01)
curr_offset+= 1;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
};
static guint16
-de_sm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+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_)
{
guint8 oct;
const gchar *str;
oct = tvb_get_guint8(tvb, offset);
- str = match_strval(oct, gsm_a_sm_cause_vals);
/* SM Cause can be sent in both directions */
- if (!str)
- str = "Protocol error, unspecified / Service option temporarily out of order";
+ str = val_to_str_const(oct, gsm_a_sm_cause_vals,
+ "Protocol error, unspecified / Service option temporarily out of order");
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_cause, tvb,
offset, 1, oct, "%s (%u)", str, oct);
* [9] 10.5.6.6a SM cause 2
*/
static guint16
-de_sm_cause_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_sm_cause_2(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;
const gchar *str;
oct = tvb_get_guint8(tvb, offset);
- str = match_strval(oct, gsm_a_sm_cause_vals);
/* SM Cause 2 is sent only in the Network-to-MS direction */
- if (!str)
- str = "Service option temporarily out of order";
+ str = val_to_str_const(oct, gsm_a_sm_cause_vals,
+ "Service option temporarily out of order");
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_cause_2, tvb,
offset, 1, oct, "%s (%u)", str, oct);
/*
* [7] 10.5.6.7
*/
+
+static const true_false_string gsm_a_sm_ti_flag_vals = {
+ "The message is sent to the side that originates the TI",
+ "The message is sent from the side that originates the TI"
+};
+
static guint16
-de_sm_linked_ti(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_linked_ti(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guint curr_len;
gchar oct;
-
- static const gchar *ti_flag[2]={
- "The message is sent from the side that originates the TI" ,
- "The message is sent to the side that originates the TI" };
-
curr_len = len;
curr_offset = offset;
oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "TI flag: %s (%u)",ti_flag[oct>>7],oct>>7);
+ proto_tree_add_item(tree, hf_gsm_a_sm_ti_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
+
+ /* The TI value and the TI flag occupy bits 5 - 7 and bit 8 of the first octet respectively.
+ * The extended TI shall not be used unless TI values of 7 or greater are needed.
+ * Where the extended TI is used, the TI IE includes a second octet. The TI value in the first octet is ignored, and the TI
+ * value is encoded in bits 7-1 of the second octet.
+ */
if ( curr_len > 1 )
{
+ curr_offset++;
oct = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_text(tree,
tvb, curr_offset, 1,
"TI value: 0x%02x (%u)",oct&0x7f,oct&0x7f);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "ext: 0x%02x (%u)",oct>>7,oct>>7);
+ proto_tree_add_item(tree, hf_gsm_a_sm_ext, tvb, offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
}
else
{
proto_tree_add_text(tree,
tvb, curr_offset, 1,
"TI value: 0x%02x (%u)",(oct>>4)&7,(oct>>4)&7);
+ curr_offset++;
}
- curr_offset+= curr_len;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
};
static guint16
-de_sm_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_sm_sapi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, offset << 3, 4, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_sm_llc_sapi, tvb, offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_sm_llc_sapi, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
};
static guint16
-de_sm_tear_down(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_sm_tear_down(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_sm_tdi, tvb, offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_sm_tdi, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
};
guint16
-de_sm_pflow_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_pflow_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guint value;
curr_offset = offset;
value = tvb_get_guint8(tvb,curr_offset);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_sm_packet_flow_id, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_sm_packet_flow_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
if (add_string)
g_snprintf(add_string, string_len, " - %s", rval_to_str(value, gsm_a_sm_packet_flow_id_vals, "Unknown"));
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
};
guint16
-de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guint curr_len;
pkt_fil_count = oct&0x0f;
e_bit = (oct>>4)&1;
- proto_tree_add_item(tree,hf_gsm_a_tft_op_code,tvb,curr_offset,1,FALSE);
- proto_tree_add_item(tree,hf_gsm_a_tft_e_bit,tvb,curr_offset,1,FALSE);
- proto_tree_add_item(tree,hf_gsm_a_tft_pkt_flt,tvb,curr_offset,1,FALSE);
+ proto_tree_add_item(tree,hf_gsm_a_tft_op_code,tvb,curr_offset,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree,hf_gsm_a_tft_e_bit,tvb,curr_offset,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree,hf_gsm_a_tft_pkt_flt,tvb,curr_offset,1,ENC_BIG_ENDIAN);
curr_offset++;
curr_len--;
proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data");
return(len);
}
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 4, FALSE);
- proto_tree_add_item(tf_tree, hf_gsm_a_tft_pkt_flt_id, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tf_tree, hf_gsm_a_tft_pkt_flt_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
curr_len--;
count++;
proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data");
return(len);
}
- proto_tree_add_bits_item(tf_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 2, FALSE);
- proto_tree_add_item(tf_tree, hf_gsm_a_tft_pkt_flt_dir, tvb, curr_offset, 1, FALSE);
- proto_tree_add_item(tf_tree, hf_gsm_a_tft_pkt_flt_id, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_bits_item(tf_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tf_tree, hf_gsm_a_tft_pkt_flt_dir, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tf_tree, hf_gsm_a_tft_pkt_flt_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
curr_len--;
case 0x10:
str="IPv4 remote address type";
- proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip4_address,tvb,curr_offset,4,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip4_address,tvb,curr_offset,4,ENC_BIG_ENDIAN);
curr_offset+=4;
curr_len-=4;
- proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip4_mask,tvb,curr_offset,4,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip4_mask,tvb,curr_offset,4,ENC_BIG_ENDIAN);
curr_offset+=4;
curr_len-=4;
pf_length-=8;
case 0x20:
str="IPv6 remote address type";
- proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip6_address,tvb,curr_offset,16,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip6_address,tvb,curr_offset,16,ENC_NA);
curr_offset+=16;
curr_len-=16;
- proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip6_mask,tvb,curr_offset,16,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip6_mask,tvb,curr_offset,16,ENC_NA);
curr_offset+=16;
curr_len-=16;
pf_length-=32;
case 0x30:
str="Protocol identifier/Next header type";
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_protocol_header,tvb,curr_offset,1,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_protocol_header,tvb,curr_offset,1,ENC_BIG_ENDIAN);
curr_offset+=1;
curr_len-=1;
pf_length-=1;
case 0x40:
str="Single local port type";
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_port,tvb,curr_offset,2,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_port,tvb,curr_offset,2,ENC_BIG_ENDIAN);
curr_offset+=2;
curr_len-=2;
pf_length-=2;
case 0x41:
str="Local port range type";
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_low,tvb,curr_offset,2,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_low,tvb,curr_offset,2,ENC_BIG_ENDIAN);
curr_offset+=2;
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_high,tvb,curr_offset,2,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_high,tvb,curr_offset,2,ENC_BIG_ENDIAN);
curr_offset+=2;
curr_len-=4;
pf_length-=4;
case 0x50:
str="Single remote port type";
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_port,tvb,curr_offset,2,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_port,tvb,curr_offset,2,ENC_BIG_ENDIAN);
curr_offset+=2;
curr_len-=2;
pf_length-=2;
case 0x51:
str="Remote port range type";
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_low,tvb,curr_offset,2,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_low,tvb,curr_offset,2,ENC_BIG_ENDIAN);
curr_offset+=2;
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_high,tvb,curr_offset,2,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_high,tvb,curr_offset,2,ENC_BIG_ENDIAN);
curr_offset+=2;
curr_len-=4;
pf_length-=4;
case 0x60:
str="Security parameter index type";
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_security,tvb,curr_offset,4,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_security,tvb,curr_offset,4,ENC_BIG_ENDIAN);
curr_offset+=4;
curr_len-=4;
pf_length-=4;
case 0x70:
str="Type of service/Traffic class type";
- proto_tree_add_item(comp_tree,hf_gsm_a_qos_traffic_cls,tvb,curr_offset,1,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_qos_traffic_cls,tvb,curr_offset,1,ENC_BIG_ENDIAN);
curr_offset++;
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_traffic_mask,tvb,curr_offset,1,FALSE);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_traffic_mask,tvb,curr_offset,1,ENC_BIG_ENDIAN);
curr_offset++;
curr_len-=2;
pf_length-=2;
case 0x80:
str="Flow label type";
- proto_tree_add_bits_item(comp_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 4, FALSE);
- proto_tree_add_item(comp_tree,hf_gsm_a_tft_flow_label_type,tvb,curr_offset,3,FALSE);
+ proto_tree_add_bits_item(comp_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(comp_tree,hf_gsm_a_tft_flow_label_type,tvb,curr_offset,3,ENC_BIG_ENDIAN);
curr_offset+=3;
curr_len-=3;
pf_length-=3;
tf = proto_tree_add_text(tree, tvb, curr_offset, pf_length+2, "Parameter %d" ,count);
tf_tree = proto_item_add_subtree(tf, ett_sm_tft );
param = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_item(tf_tree, hf_gsm_a_tft_param_id, tvb, curr_offset, 1, FALSE);
+ proto_tree_add_item(tf_tree, hf_gsm_a_tft_param_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 2;
curr_len -= 2;
switch (param) {
case 0x02:
proto_tree_add_text(tf_tree, tvb, curr_offset, 2, "Media Component number value: 0x%x",
- tvb_get_bits16(tvb, curr_offset<<3, 16, FALSE));
+ tvb_get_bits16(tvb, curr_offset<<3, 16, ENC_BIG_ENDIAN));
proto_tree_add_text(tf_tree, tvb, curr_offset+2, 2, "IP flow number: 0x%x",
- tvb_get_bits16(tvb, (curr_offset+2)<<3, 16, FALSE));
+ tvb_get_bits16(tvb, (curr_offset+2)<<3, 16, ENC_BIG_ENDIAN));
break;
case 0x03:
}
}
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(len);
}
* [9] 10.5.6.13 Temporary Mobile Group Identity (TMGI)
*/
static guint16
-de_sm_tmgi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_tmgi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
- proto_tree_add_item(tree, hf_gsm_a_sm_tmgi, tvb, curr_offset, 3, FALSE);
+ proto_tree_add_item(tree, hf_gsm_a_sm_tmgi, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
curr_offset += 3;
NO_MORE_DATA_CHECK(len);
- curr_offset = dissect_e212_mcc_mnc(tvb, gsm_a_dtap_pinfo, tree, curr_offset, TRUE);
+ curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, curr_offset, TRUE);
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
* [9] 10.5.6.14 MBMS bearer capabilities
*/
static guint16
-de_sm_mbms_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_mbms_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset, temp32;
guint8 oct;
curr_offset+= 1;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
* [9] 10.5.6.15 MBMS protocol configuration options
*/
static guint16
-de_sm_mbms_prot_conf_opt(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+de_sm_mbms_prot_conf_opt(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 8, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 8, ENC_BIG_ENDIAN);
curr_offset++;
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return(curr_offset - offset);
}
* [9] 10.5.6.16 Enhanced network service access point identifier
*/
static guint16
-de_sm_enh_nsapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_sm_enh_nsapi(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;
const gchar *str;
};
static guint16
-de_sm_req_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_sm_req_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset<<3) + 4, 1, FALSE);
- proto_tree_add_item(tree, hf_gsm_a_sm_req_type, tvb, offset, 1, FALSE);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset<<3) + 4, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_sm_req_type, tvb, offset, 1, ENC_BIG_ENDIAN);
/* no length check possible */
return(1);
}
-guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = {
+/*
+ * [9] 10.5.6.18 Notification indicator
+ */
+static const value_string gsm_a_sm_notif_ind_vals[] = {
+ { 0x0, "Reserved"},
+ { 0x1, "SRVCC handover cancelled, IMS session re-establishment required"},
+ { 0, NULL }
+};
+
+static guint16
+de_sm_notif_ind(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;
+
+ curr_offset = offset;
+
+ proto_tree_add_item(tree, hf_gsm_a_sm_notif_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ return(len);
+}
+
+
+guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = {
/* GPRS Mobility Management Information Elements 10.5.5 */
de_gmm_attach_res, /* Attach Result */
de_gmm_attach_type, /* Attach Type */
de_gmm_ms_radio_acc_cap,/* MS Radio Access Capability */
de_gmm_cause, /* GMM Cause */
de_gmm_rai, /* Routing Area Identification */
+ de_gmm_rai2, /* Routing Area Identification 2 */
de_gmm_update_res, /* Update Result */
de_gmm_update_type, /* Update Type */
de_gmm_ac_ref_nr, /* A&C Reference Number */
de_gmm_ps_lcs_cap, /* PS LCS Capability */
de_gmm_net_feat_supp, /* Network Feature Support */
de_gmm_rat_info_container, /* Inter RAT information container */
+ de_gmm_req_ms_info, /* Requested MS information */
+ 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 */
/* Session Management Information Elements 10.5.6 */
de_sm_apn, /* Access Point Name */
de_sm_nsapi, /* Network Service Access Point Identifier */
de_sm_mbms_prot_conf_opt, /* MBMS protocol configuration options */
de_sm_enh_nsapi, /* Enhanced network service access point identifier */
de_sm_req_type, /* Request type */
+ de_sm_notif_ind, /* Notification indicator */
/* GPRS Common Information Elements 10.5.7 */
de_gc_context_stat, /* PDP Context Status */
de_gc_radio_prio, /* Radio Priority */
de_gc_timer2, /* GPRS Timer 2 */
de_gc_radio_prio2, /* Radio Priority 2 */
de_gc_mbms_context_stat,/* 10.5.7.6 MBMS context status */
+ de_gc_uplink_data_stat, /* 10.5.7.7 Uplink data status */
NULL, /* NONE */
};
* [7] 9.4.1
*/
static void
-dtap_gmm_attach_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP, NULL);
/* Included in attach type
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, NULL);
curr_offset--;
curr_len++;
*/
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ATTACH_TYPE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ATTACH_TYPE, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_DRX_PARAM );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL);
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID , NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI, " - Old routing area identification");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL);
ELEM_OPT_TLV( 0x33 , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ ELEM_OPT_TLV(0x11, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
+
+ ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_3, NULL);
+
+ ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
+
+ ELEM_OPT_TLV(0x58, NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL);
+
+ ELEM_OPT_TLV(0x1A, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Additional mobile identity");
+
+ ELEM_OPT_TLV(0x1B, GSM_A_PDU_TYPE_GM, DE_RAI_2, " - Additional old routing area identification");
+
+ ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.2
*/
static void
-dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, NULL);
curr_len++;
curr_offset--;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ATTACH_RES );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ATTACH_RES, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO_2 );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO_2, " - Radio priority for TOM8");
curr_len++;
curr_offset--;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, " - Radio priority for SMS");
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI, NULL);
ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, NULL);
ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ 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( 0x38 , GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2 , " - T3323" );
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.3
*/
static void
-dtap_gmm_attach_com(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_attach_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
-/* guint32 consumed; */
+ guint32 consumed;
guint curr_len;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
+
+ ELEM_OPT_TLV(0x27, GSM_A_PDU_TYPE_GM, DE_RAT_INFO_CONTAINER, " - Inter RAT handover information");
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ ELEM_OPT_TLV(0x2B, GSM_A_PDU_TYPE_GM, DE_EUTRAN_IRAT_INFO_CONTAINER, " - E-UTRAN inter RAT handover information");
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.4
*/
static void
-dtap_gmm_attach_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_attach_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE );
+ 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" );
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.5
*/
static void
-dtap_gmm_detach_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_detach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, NULL);
/* Force to standy might be wrong - To decode it correct, we need the direction */
curr_len++;
curr_offset--;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_DETACH_TYPE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_DETACH_TYPE, NULL);
ELEM_OPT_TV( 0x25 , GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE , NULL);
ELEM_OPT_TLV( 0x18 , GSM_A_PDU_TYPE_COMMON, DE_MID , " - P-TMSI" );
- ELEM_OPT_TLV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG , NULL);
+ ELEM_OPT_TLV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG_2 , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.6
*/
static void
-dtap_gmm_detach_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_detach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
if ( curr_len != 0 )
{
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, NULL);
curr_len++;
curr_offset--;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, NULL);
}
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.7
*/
static void
-dtap_gmm_ptmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_ptmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID , " - Allocated P-TMSI" );
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, NULL);
curr_len++;
curr_offset--;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, NULL);
- ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_COMMON, DE_MID , " - P-TMSI Signature" );
+ ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG , " - P-TMSI Signature" );
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.8
*/
static void
-dtap_gmm_ptmsi_realloc_com(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_ptmsi_realloc_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
/* guint32 consumed; */
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.9
*/
static void
-dtap_gmm_auth_ciph_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_auth_ciph_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_IMEISV_REQ );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_IMEISV_REQ, NULL);
curr_offset--;
curr_len++;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_CIPH_ALG );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_CIPH_ALG, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_AC_REF_NUM_H );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_AC_REF_NUM_H, NULL);
curr_offset--;
curr_len++;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, NULL);
ELEM_OPT_TV( 0x21 , GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_RAND , NULL);
if ( curr_len == 0 )
{
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
return;
}
ELEM_OPT_TLV( 0x28 , GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.10
*/
static void
-dtap_gmm_auth_ciph_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_auth_ciph_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, NULL);
curr_offset--;
curr_len++;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_AC_REF_NUM );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_AC_REF_NUM, NULL);
ELEM_OPT_TV( 0x22 , GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM , NULL);
ELEM_OPT_TLV( 0x29 , GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM_EXT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.11
*/
static void
-dtap_gmm_auth_ciph_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_auth_ciph_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint curr_len;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.10a
*/
static void
-dtap_gmm_auth_ciph_fail(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_auth_ciph_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.12
*/
static void
-dtap_gmm_ident_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_ident_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint curr_len;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
/* If the half octect that are about to get decoded is the LAST in the octetstream, the macro will call return BEFORE we get a chance to fix the index. The end result will be that the first half-octet will be decoded but not the last. */
#if 0
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ID_TYPE_2 );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ID_TYPE_2, NULL);
curr_offset--;
curr_len++;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, NULL);
#endif
- elem_v(tvb, tree, GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, curr_offset);
- elem_v(tvb, tree, GSM_A_PDU_TYPE_GM, DE_ID_TYPE_2, curr_offset);
+ elem_v(tvb, tree, pinfo, GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, curr_offset, NULL);
+ elem_v(tvb, tree, pinfo, GSM_A_PDU_TYPE_GM, DE_ID_TYPE_2, curr_offset, NULL);
curr_offset+=1;
curr_len-=1;
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.13
*/
static void
-dtap_gmm_ident_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_ident_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.14
*/
static void
-dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
/* is included in update type
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, NULL);
curr_offset--;
curr_len++;
*/
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_UPD_TYPE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_UPD_TYPE, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI, " - Old routing area identification");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL);
ELEM_OPT_TLV( 0x33 , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ ELEM_OPT_TLV(0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL);
+
+ ELEM_OPT_TLV(0x58, NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL);
+
+ ELEM_OPT_TLV(0x1A, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Additional mobile identity");
+
+ ELEM_OPT_TLV(0x1B, GSM_A_PDU_TYPE_GM, DE_RAI_2, " - Additional old routing area identification");
+
+ ELEM_OPT_TLV(0x11, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
+
+ ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_3, NULL);
+
+ ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
+
+ ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.15
*/
static void
-dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_UPD_RES );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_UPD_RES, NULL);
curr_offset--;
curr_len++;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - Periodic RA update timer");
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI, NULL);
ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG , NULL);
ELEM_OPT_TLV( 0x18 , GSM_A_PDU_TYPE_COMMON, DE_MID , " - Allocated P-TMSI");
- ELEM_OPT_TLV( 0x23 , GSM_A_PDU_TYPE_COMMON, DE_MID , NULL);
+ ELEM_OPT_TLV( 0x23 , GSM_A_PDU_TYPE_COMMON, DE_MID , " - MS identity");
ELEM_OPT_TLV( 0x26 , GSM_A_PDU_TYPE_GM, DE_REC_N_PDU_NUM_LIST , NULL);
ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ ELEM_OPT_TLV(0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS , NULL);
+
+ 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(0x38 , GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2 , " - T3323");
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.16
*/
static void
-dtap_gmm_rau_com(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_rau_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
/* [7] 10.5.5.11 */
ELEM_OPT_TLV( 0x26 , GSM_A_PDU_TYPE_GM, DE_REC_N_PDU_NUM_LIST , NULL);
/* Inter RAT information container 10.5.5.24 TS 24.008 version 6.8.0 Release 6 */
- /*TO DO: Implement */
- ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_RAT_INFO_CONTAINER , NULL);
+ ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_RAT_INFO_CONTAINER , " - Inter RAT handover information");
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ ELEM_OPT_TLV(0x2B, GSM_A_PDU_TYPE_GM, DE_EUTRAN_IRAT_INFO_CONTAINER, " - E-UTRAN inter RAT handover information");
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.17
*/
static void
-dtap_gmm_rau_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_rau_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, NULL);
curr_offset--;
curr_len++;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND );
+ 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" );
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.18
*/
static void
-dtap_gmm_status(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [8] 9.4.19 GMM Information
*/
static void
-dtap_gmm_information(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_information(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
ELEM_OPT_TLV( 0x43 , GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME , " - Full Name" );
ELEM_OPT_TLV( 0x49 , GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.20
*/
static void
-dtap_gmm_service_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_service_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
/* Is included in SRVC TYPE
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, NULL);
curr_offset--;
curr_len++;
*/
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SRVC_TYPE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SRVC_TYPE, NULL);
/* P-TMSI Mobile station identity 10.5.1.4 M LV 6 */
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
/* MBMS context status 10.5.7.6 TLV 2 - 18 */
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_GM, DE_UPLINK_DATA_STATUS, NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.21
*/
static void
-dtap_gmm_service_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_service_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
ELEM_OPT_TLV( 0x32 , GSM_A_PDU_TYPE_GM, DE_PDP_CONTEXT_STAT , NULL);
/* MBMS context status 10.5.7.6 TLV 2 - 18 */
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* [7] 9.4.22
*/
static void
-dtap_gmm_service_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_gmm_service_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: MS to network
*/
static void
-dtap_sm_act_pdp_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* MS to network */
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_UL;
+ pinfo->link_dir = P2P_DIR_UL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_NET_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_NET_SAPI, " - Requested NSAPI");
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_QOS , " - Requested QoS" );
ELEM_OPT_TV_SHORT(0xA0, GSM_A_PDU_TYPE_GM, DE_REQ_TYPE, NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_act_pdp_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network to MS*/
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_DL;
+ pinfo->link_dir = P2P_DIR_DL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Negotiated LLC SAPI");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_QOS , " - Negotiated QoS" );
#if 0
/* This is done automatically */
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SPARE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SPARE, NULL);
curr_offset--;
curr_len++;
#endif
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, NULL);
- ELEM_OPT_TLV( 0x2B , GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR , NULL);
+ ELEM_OPT_TLV( 0x2B , GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR , " - PDP address");
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL);
- ELEM_OPT_TLV( 0x39 , GSM_A_PDU_TYPE_GM, DE_SM_CAUSE_2, NULL );
+ ELEM_OPT_TLV( 0x39 , GSM_A_PDU_TYPE_GM, DE_SM_CAUSE_2, " - SM cause");
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_act_pdp_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network to MS*/
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_DL;
+ pinfo->link_dir = P2P_DIR_DL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: MS to network
*/
static void
-dtap_sm_act_sec_pdp_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_sec_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* MS to Network */
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_UL;
+ pinfo->link_dir = P2P_DIR_UL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_NET_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_NET_SAPI, " - Requested NSAPI");
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_QOS , " - Requested QoS" );
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_act_sec_pdp_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_sec_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network to MS*/
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_DL;
+ pinfo->link_dir = P2P_DIR_DL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Negotiated LLC SAPI");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_QOS , " - Negotiated QoS" );
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, NULL);
#if 0
/* This is done automatically */
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SPARE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SPARE, NULL);
curr_offset--;
curr_len++;
#endif
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_act_sec_pdp_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_sec_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network to MS*/
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_DL;
+ pinfo->link_dir = P2P_DIR_DL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_req_pdp_act(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_req_pdp_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network to MS*/
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_DL;
+ pinfo->link_dir = P2P_DIR_DL;
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR , " - Offered PDP address" );
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: MS to network
*/
static void
-dtap_sm_req_pdp_act_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_req_pdp_act_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* MS to Network */
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_UL;
+ pinfo->link_dir = P2P_DIR_UL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_mod_pdp_req_net(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_mod_pdp_req_net(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network to MS */
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_DL;
+ pinfo->link_dir = P2P_DIR_DL;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM,DE_RAD_PRIO);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM,DE_RAD_PRIO, NULL);
#if 0
/* This is done automatically */
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SPARE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SPARE, NULL);
curr_offset--;
curr_len++;
#endif
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_QOS , " - New QoS" );
- ELEM_OPT_TLV( 0x2B , GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR , NULL);
+ ELEM_OPT_TLV( 0x2B , GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR , " - PDP address");
ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL);
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ ELEM_OPT_TLV(0x36 , GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: MS to network
*/
static void
-dtap_sm_mod_pdp_req_ms(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_mod_pdp_req_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* MS to Network */
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_UL;
+ pinfo->link_dir = P2P_DIR_UL;
ELEM_OPT_TV( 0x32 , GSM_A_PDU_TYPE_GM, DE_LLC_SAPI , " - Requested LLC SAPI" );
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: MS to network
*/
static void
-dtap_sm_mod_pdp_acc_ms(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_mod_pdp_acc_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* MS to Network */
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_UL;
+ pinfo->link_dir = P2P_DIR_UL;
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: Network to MS
*/
static void
-dtap_sm_mod_pdp_acc_net(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_mod_pdp_acc_net(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network to MS */
- gsm_a_dtap_pinfo->link_dir = P2P_DIR_DL;
+ pinfo->link_dir = P2P_DIR_DL;
ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_GM, DE_QOS , " - Negotiated QoS" );
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: both
*/
static void
-dtap_sm_mod_pdp_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_mod_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
/* Network or the MS */
- gsm_a_dtap_pinfo->link_dir = LINK_DIR_UNKNOWN;
+ pinfo->link_dir = LINK_DIR_UNKNOWN;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: both
*/
static void
-dtap_sm_deact_pdp_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_deact_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
- gsm_a_dtap_pinfo->link_dir = LINK_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->link_dir = LINK_DIR_UNKNOWN;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM , DE_TEAR_DOWN_IND , NULL);
/* MBMS context status 10.5.7.6 TLV 2 - 18 */
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: both
*/
static void
-dtap_sm_deact_pdp_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_deact_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
- gsm_a_dtap_pinfo->link_dir = LINK_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->link_dir = LINK_DIR_UNKNOWN;
ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL);
/* MBMS context status 10.5.7.6 TLV 2 - 18 */
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
+}
+
+/*
+ * [8] 9.5.15a Request Secondary PDP Context Activation
+ * Direction: network to MS
+ */
+static void
+dtap_sm_req_sec_pdp_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->link_dir = P2P_DIR_DL;
+
+ /* Required QoS Quality of service 10.5.6.5 M LV 13-17 */
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_QOS , " - Required QoS");
+
+ /* Linked TI Linked TI 10.5.6.7 M LV 2-3 */
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_LINKED_TI , NULL);
+
+ /* 36 TFT Traffic Flow Template 10.5.6.12 O TLV 3-257 */
+ ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE, NULL);
+
+ /* 27 Protocol configuration options Protocol configuration options 10.5.6.3 O TLV 3 - 253 */
+ ELEM_OPT_TLV(0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
+}
+
+/*
+ * [8] 9.5.15b Request Secondary PDP Context Activation Reject
+ * Direction: MS to network
+ */
+static void
+dtap_sm_req_sec_pdp_act_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->link_dir = P2P_DIR_UL;
+
+ /* SM cause SM cause 10.5.6.6 M V 1 */
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
+
+ /* 27 Protocol configuration options Protocol configuration options 10.5.6.3 O TLV 3 - 253 */
+ ELEM_OPT_TLV(0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
+}
+
+/*
+ * [8] 9.5.16a Notification
+ * Direction: network to MS
+ */
+static void
+dtap_sm_notif(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->link_dir = P2P_DIR_DL;
+
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_SM_NOTIF_IND, NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: both
*/
static void
-dtap_sm_status(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_UNKNOWN;
- gsm_a_dtap_pinfo->link_dir = LINK_DIR_UNKNOWN;
+ pinfo->p2p_dir = P2P_DIR_UNKNOWN;
+ pinfo->link_dir = LINK_DIR_UNKNOWN;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: MS to network
*/
static void
-dtap_sm_act_mbms_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_mbms_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
/* Requested MBMS NSAPI Enhanced Network service access point identifier 10.5.6.16 M V */
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ENH_NSAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ENH_NSAPI, " - Requested MBMS NSAPI");
/* Requested LLC SAPI LLC service access point identifier 10.5.6.9 M V 1 */
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI");
/* Supported MBMS bearer capabilities MBMS bearer capabilities 10.5.6.14 M LV 2 - 3 */
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_MBMS_BEARER_CAP , NULL );
/* 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);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_act_mbms_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_mbms_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_TMGI, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Negotiated LLC SAPI");
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_act_mbms_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_act_mbms_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: network to MS
*/
static void
-dtap_sm_req_mbms_act(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_req_mbms_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_SENT;
+ pinfo->p2p_dir = P2P_DIR_SENT;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_NET_SAPI );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_NET_SAPI, " - Linked NSAPI");
ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR , " - Offered multicast address" );
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
/*
* Direction: MS to network
*/
static void
-dtap_sm_req_mbms_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+dtap_sm_req_mbms_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
curr_offset = offset;
curr_len = len;
- gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+ pinfo->p2p_dir = P2P_DIR_RECV;
- ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE );
+ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL);
ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT , NULL);
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gsm_a_dtap_pinfo);
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
#define NUM_GSM_DTAP_MSG_GMM (sizeof(gsm_a_dtap_msg_gmm_strings)/sizeof(value_string))
static gint ett_gsm_dtap_msg_gmm[NUM_GSM_DTAP_MSG_GMM];
-static void (*dtap_msg_gmm_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) = {
+static void (*dtap_msg_gmm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) = {
dtap_gmm_attach_req, /* Attach Request */
dtap_gmm_attach_acc, /* Attach Accept */
dtap_gmm_attach_com, /* Attach Complete */
#define NUM_GSM_DTAP_MSG_SM (sizeof(gsm_a_dtap_msg_sm_strings)/sizeof(value_string))
static gint ett_gsm_dtap_msg_sm[NUM_GSM_DTAP_MSG_SM];
-static void (*dtap_msg_sm_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) = {
+static void (*dtap_msg_sm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) = {
dtap_sm_act_pdp_req, /* Activate PDP Context Request */
dtap_sm_act_pdp_acc, /* Activate PDP Context Accept */
dtap_sm_act_pdp_rej, /* Activate PDP Context Reject */
dtap_sm_act_mbms_rej, /* Activate MBMS Context Reject */
dtap_sm_req_mbms_act, /* Request MBMS Context Activation */
dtap_sm_req_mbms_rej, /* Request MBMS Context Activation Reject */
+ dtap_sm_req_sec_pdp_act, /* Request Secondary PDP Context Activation */
+ dtap_sm_req_sec_pdp_act_rej,/* Request Secondary PDP Context Activation Reject */
+ dtap_sm_notif, /* Notification */
NULL, /* NONE */
};
},
{ &hf_gsm_a_qos_del_order,
{ "Delivery order", "gsm_a.qos.del_order",
- FT_UINT8, BASE_DEC, VALS(gsm_a_qos_traffic_cls_vals), 0x18,
+ FT_UINT8, BASE_DEC, VALS(gsm_a_qos_del_order_vals), 0x18,
NULL, HFILL }
},
{ &hf_gsm_a_qos_del_of_err_sdu,
{ "Delivery of erroneous SDUs", "gsm_a.qos.del_of_err_sdu",
- FT_UINT8, BASE_DEC, VALS(gsm_a_qos_del_of_err_sdu_vals), 0x03,
+ FT_UINT8, BASE_DEC, VALS(gsm_a_qos_del_of_err_sdu_vals), 0x07,
NULL, HFILL }
},
{ &hf_gsm_a_qos_ber,
FT_UINT8, BASE_DEC, NULL, 0x1f,
NULL, HFILL }
},
+ { &hf_gsm_a_gm_nsapi_5_ul_stat,
+ { "NSAPI(5) uplink status", "gsm_a.gm.nsapi_5_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_6_ul_stat,
+ { "NSAPI(6) uplink status", "gsm_a.gm.nsapi_6_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_7_ul_stat,
+ { "NSAPI(7) uplink status", "gsm_a.gm.nsapi_7_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_8_ul_stat,
+ { "NSAPI(8) uplink status", "gsm_a.gm.nsapi_8_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_9_ul_stat,
+ { "NSAPI(9) uplink status", "gsm_a.gm.nsapi_9_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_10_ul_stat,
+ { "NSAPI(10) uplink status", "gsm_a.gm.nsapi_10_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_11_ul_stat,
+ { "NSAPI(11) uplink status", "gsm_a.gm.nsapi_11_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_12_ul_stat,
+ { "NSAPI(12) uplink status", "gsm_a.gm.nsapi_12_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_13_ul_stat,
+ { "NSAPI(13) uplink status", "gsm_a.gm.nsapi_13_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_14_ul_stat,
+ { "NSAPI(14) uplink status", "gsm_a.gm.nsapi_14_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_nsapi_15_ul_stat,
+ { "NSAPI(15) uplink status", "gsm_a.gm.nsapi_15_ul_stat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_gm_pco_pid,
{ "Protocol or Container ID", "gsm_a.gm.pco_pid",
FT_UINT16, BASE_DEC, NULL, 0x0,
FT_BOOLEAN, 8, TFS(&gsm_a_gm_gps_c_vals), 0x01,
NULL, HFILL }
},
+ { &hf_gsm_a_gm_req_ms_info_irat,
+ { "I-RAT","gsm_a.gm.req_ms_info_irat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_req_ms_info_irat_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_req_ms_info_irat2,
+ { "I-RAT2","gsm_a.gm.req_ms_info_irat2",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_req_ms_info_irat2_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_ue_usage_setting,
+ { "UE's usage setting","gsm_a.gm.ue_usage_setting",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_ue_usage_setting_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_voice_domain_pref_for_eutran,
+ { "Voice domain preference for E-UTRAN","gsm_a.gm.voice_domain_pref_for_eutran",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_voice_domain_pref_for_eutran_vals), 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,
FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_ps_irat_s1_vals), 0x40,
NULL, HFILL }
},
- { &hf_gsm_a_gmm_net_cap_csfb,
- { "CSFB Capability", "gsm_a.gmm.net_cap.csfb",
- FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_csfb_vals), 0x20,
+ { &hf_gsm_a_gmm_net_cap_comb_proc,
+ { "EMM Combined procedures capability", "gsm_a.gmm.net_cap.comb_proc",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_comb_proc_vals), 0x20,
NULL, HFILL }
},
{ &hf_gsm_a_gmm_net_cap_isr,
FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_epc_vals), 0x04,
NULL, HFILL }
},
+ { &hf_gsm_a_gmm_net_cap_nf,
+ { "NF Capability", "gsm_a.gmm.net_cap.nf",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_nf_vals), 0x02,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_sm_tmgi,
{ "Temporary Mobile Group Identity (TMGI)", "gsm_a.sm.tmgi",
FT_UINT24, BASE_HEX, NULL, 0x0,
FT_UINT8, BASE_DEC, VALS(gsm_a_sm_req_type_vals), 0x07,
NULL, HFILL }
},
+ { &hf_gsm_a_sm_notif_ind,
+ { "Notification indicator value", "gsm_a.sm.notif_ind",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_sm_notif_ind_vals), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_gm_rac_ctrled_early_cm_sending,
{ "Controlled early Classmark Sending", "gsm_a.gm.rac.comp_int_meas_cap",
FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented), 0x0,
NULL, HFILL }
},
+ { &hf_gsm_a_gm_rac_pseudo_sync,
+ { "Pseudo Synchronisation", "gsm_a.gm.rac.pseudo_sync",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_vgcs,
+ { "Voice Group Call Service", "gsm_a.gm.rac.vgcs",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_vgcs), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_vbs,
+ { "Voice Broadcast Service", "gsm_a.gm.rac.vbs",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_vbs), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_gm_rac_multislot_capability,
{ "Multislot capability struct", "gsm_a.gm.rac.multislot_capability",
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
NULL, HFILL }
},
-
+ { &hf_gsm_a_gm_rac_hscsd_multi_slot_class,
+ { "HSCSD multislot class", "gsm_a.gm.rac.hscsd_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_gprs_multi_slot_class,
+ { "GPRS multislot class", "gsm_a.gm.rac.gprs_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_gprs_ext_dyn_alloc_cap,
+ { "GPRS Extended Dynamic Allocation Capability", "gsm_a.gm.rac.gprs_ext_dyn_alloc_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_ecsd_multi_slot_class,
+ { "ECSD multislot class", "gsm_a.gm.rac.ecsd_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_egprs_multi_slot_class,
+ { "EGPRS multislot class", "gsm_a.gm.rac.egprs_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_egprs_ext_dyn_alloc_cap,
+ { "EGPRS Extended Dynamic Allocation Capability", "gsm_a.gm.rac.egprs_ext_dyn_alloc_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_dtm_gprs_multi_slot_class,
+ { "DTM GPRS Multi Slot Class", "gsm_a.gm.rac.dtm_gprs_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_multi_slot_class_vals), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_gm_rac_single_slt_dtm,
{ "Single Slot DTM", "gsm_a.gm.rac.single_slt_dtm",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
NULL, HFILL }
},
+ { &hf_gsm_a_gm_rac_dtm_egprs_multi_slot_class,
+ { "DTM EGPRS Multi Slot Class", "gsm_a.gm.rac.dtm_egprs_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_multi_slot_class_vals), 0x0,
+ NULL, HFILL }
+ },
{ &hf_gsm_a_gm_rac_8psk_pow_cap_pres,
{ "8PSK Power Capability Bits", "gsm_a.gm.rac.8psk_pow_cap_pres",
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
},
{ &hf_gsm_a_gm_rel_lev_ind,
{ "Revision Level Indicator", "gsm_a.gm.rel_lev_ind",
- FT_UINT8, BASE_HEX, VALS(gsm_a_gm_revision_level_indicator_vals), 0x0,
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_revision_level_indicator), 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_gm_rac_umts_fdd_cap,
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
NULL, HFILL }
},
- };
+ { &hf_gsm_a_gm_rac_mod_based_multi_slot_class_support,
+ { "Modulation based multislot class support", "gsm_a.gm.rac.mod_based_multi_slot_class_support",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_geran_iu_mode_cap,
+ { "GERAN Iu mode", "gsm_a.gm.rac.geran_iu_mode_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_flo_iu_cap,
+ { "FLO Iu Capability", "gsm_a.gm.rac.flo_iu_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_mult_tbf_cap,
+ { "Multiple TBF Capability", "gsm_a.gm.rac.mult_tbf_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_down_adv_rec_perf,
+ { "Downlink Advanced Receiver Performance", "gsm_a.gm.rac.down_adv_rec_perf",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_down_adv_rec_perf_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_ext_rlc_mac_ctrl_msg_seg_cap,
+ { "Extended RLC/MAC Control Message Segmentation Capability", "gsm_a.gm.rac.ext_rlc_mac_ctrl_msg_seg_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_dtm_enh_cap,
+ { "DTM Enhancements Capability", "gsm_a.gm.rac.dtm_enh_cap",
+ FT_BOOLEAN, 8, TFS(&gsm_a_gm_dtm_enh_cap), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_dtm_gprs_high_multi_slot_class,
+ { "DTM GPRS High Multi Slot Class", "gsm_a.gm.rac.dtm_gprs_high_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_high_multi_slot_class_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_dtm_egprs_high_multi_slot_class,
+ { "DTM EGPRS High Multi Slot Class", "gsm_a.gm.rac.dtm_egprs_high_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_high_multi_slot_class_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_ps_ho_cap,
+ { "PS Handover Capability", "gsm_a.gm.rac.ps_ho_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_dtm_ho_cap,
+ { "DTM Handover Capability", "gsm_a.gm.rac.dtm_ho_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_multi_slot_cap_red_down_dual_carrier,
+ { "Multislot Capability Reduction for Downlink Dual Carrier", "gsm_a.gm.rac.multi_slot_cap_red_down_dual_carrier",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_cap_red_down_dual_carrier_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_down_dual_carrier_dtm_cap,
+ { "Downlink Dual Carrier for DTM Capability", "gsm_a.gm.rac.down_dual_carrier_dtm_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_flex_ts_assign,
+ { "Flexible Timeslot Assignment", "gsm_a.gm.rac.flex_ts_assign",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_gan_ps_ho_cap,
+ { "GAN PS Handover Capability", "gsm_a.gm.rac.gan_ps_ho_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_rlc_non_pers_mode,
+ { "RLC Non-persistent Mode", "gsm_a.gm.rac.rlc_non_pers_mode",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_reduced_lat_cap,
+ { "Reduced Latency Capability", "gsm_a.gm.rac.reduced_lat_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_ul_egprs2,
+ { "Uplink EGPRS2", "gsm_a.gm.rac.ul_egprs2",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_ul_egprs2_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_dl_egprs2,
+ { "Downlink EGPRS2", "gsm_a.gm.rac.dl_egprs2",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dl_egprs2_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_eutra_fdd_support,
+ { "E-UTRA FDD support", "gsm_a.gm.rac.eutra_fdd_support",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_eutra_tdd_support,
+ { "E-UTRA TDD support", "gsm_a.gm.rac.eutra_tdd_support",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_geran_to_eutra_support_in_geran_ptm,
+ { "GERAN to E-UTRA support in GERAN packet transfer mode", "gsm_a.gm.rac.geran_to_eutra_support_in_geran_ptm",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_geran_to_eutra_support_in_geran_ptm_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_prio_based_resel_support,
+ { "Priority-based reselection support", "gsm_a.gm.rac.prio_based_resel_support",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_alt_efta_multi_slot_class,
+ { "Alternative EFTA Multislot Class", "gsm_a.gm.rac.alt_efta_multi_slot_class",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_alt_efta_multi_slot_class_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_efta_multi_slot_cap_red_down_dual_carrier,
+ { "EFTA Multislot Capability Reduction for Downlink Dual Carrier", "gsm_a.gm.rac.efta_multi_slot_cap_red_down_dual_carrier",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_cap_red_down_dual_carrier_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_ind_up_layer_pdu_start_cap_for_rlc_um,
+ { "Indication of Upper Layer PDU Start Capability for RLC UM", "gsm_a.gm.rac.ind_up_layer_pdu_start_cap_for_rlc_um",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_emst_cap,
+ { "Enhanced Multiplexing for Single TBF Capability", "gsm_a.gm.rac.emst_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_mtti_cap,
+ { "Multiple TTI Capability", "gsm_a.gm.rac.mtti_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_gm_rac_utra_csg_cell_report,
+ { "UTRA CSG Cells Reporting", "gsm_a.gm.rac.utra_csg_cell_report",
+ FT_BOOLEAN, 8, 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",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 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,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_sm_ext,
+ { "Extension", "gsm_a.sm.ext",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }
+ },
+};
/* Setup protocol subtree array */
#define NUM_INDIVIDUAL_ELEMS 18
{
data_handle = find_dissector("data");
rrc_irat_ho_info_handle = find_dissector("rrc.irat.irat_ho_info");
+ lte_rrc_ue_eutra_cap_handle = find_dissector("lte-rrc.ue_eutra_cap");
}