diff options
author | Anders Broman <anders.broman@ericsson.com> | 2011-04-27 22:18:00 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2011-04-27 22:18:00 +0000 |
commit | 7dce5861cc948636c3cfd4718bd90b0724da9bf2 (patch) | |
tree | d5eb6b9b0a21dec56220cf68e3096204c553497b /epan/dissectors | |
parent | b798f159bf5ed9642964000973ff08d0a67a352a (diff) |
From Pascal Quantin:
Enhance the dissection of MM, GMM, SM, EPS EMM and EPS ESM
protocols according to 3GPP 24.008 V9.6.0 and 24.301 V9.6.0.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5866
svn path=/trunk/; revision=36918
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-gsm_a_common.c | 506 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_common.h | 59 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_dtap.c | 35 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_gm.c | 470 | ||||
-rw-r--r-- | epan/dissectors/packet-nas_eps.c | 275 |
5 files changed, 970 insertions, 375 deletions
diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c index 9da0029fb5..e84e03d4e4 100644 --- a/epan/dissectors/packet-gsm_a_common.c +++ b/epan/dissectors/packet-gsm_a_common.c @@ -81,16 +81,14 @@ static const value_string gsm_a_msc_rev_vals[] = { }; /* ES IND (octet 3, bit 5) "Controlled Early Classmark Sending" option implementation */ -static const value_string ES_IND_vals[] = { - { 0, "Controlled Early Classmark Sending option is not implemented in the MS"}, - { 1, "Controlled Early Classmark Sending option is implemented in the MS"}, - { 0, NULL } +static const true_false_string ES_IND_vals = { + "Controlled Early Classmark Sending option is implemented in the MS", + "Controlled Early Classmark Sending option is not implemented in the MS" }; -/* A5/1 algorithm supported (octet 3, bit 4 */ -static const value_string A5_1_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/1 available"}, - { 1, "encryption algorithm A5/1 not available"}, - { 0, NULL } +/* A5/1 algorithm supported (octet 3, bit 4) */ +static const true_false_string A5_1_algorithm_sup_vals = { + "encryption algorithm A5/1 not available", + "encryption algorithm A5/1 available" }; /* RF Power Capability (Octet 3) */ static const value_string RF_power_capability_vals[] = { @@ -103,10 +101,9 @@ static const value_string RF_power_capability_vals[] = { { 0, NULL } }; /* PS capability (pseudo-synchronization capability) (octet 4) */ -static const value_string ps_sup_cap_vals[] = { - { 0, "PS capability not present"}, - { 1, "PS capability present"}, - { 0, NULL } +static const true_false_string ps_sup_cap_vals = { + "PS capability present", + "PS capability not present" }; /* SS Screening Indicator (octet 4)defined in 3GPP TS 24.080 */ static const value_string SS_screening_indicator_vals[] = { @@ -117,96 +114,79 @@ static const value_string SS_screening_indicator_vals[] = { { 0, NULL } }; /* SM capability (MT SMS pt to pt capability) (octet 4)*/ -static const value_string SM_capability_vals[] = { - { 0, "Mobile station does not support mobile terminated point to point SMS"}, - { 1, "Mobile station supports mobile terminated point to point SMS"}, - { 0, NULL } +static const true_false_string SM_capability_vals = { + "Mobile station supports mobile terminated point to point SMS", + "Mobile station does not support mobile terminated point to point SMS" }; /* VBS notification reception (octet 4) */ -static const value_string VBS_notification_rec_vals[] = { - { 0, "no VBS capability or no notifications wanted"}, - { 1, "VBS capability and notifications wanted"}, - { 0, NULL } +static const true_false_string VBS_notification_rec_vals = { + "VBS capability and notifications wanted", + "no VBS capability or no notifications wanted" }; /* VGCS notification reception (octet 4) */ -static const value_string VGCS_notification_rec_vals[] = { - { 0, "no VGCS capability or no notifications wanted"}, - { 1, "VGCS capability and notifications wanted"}, - { 0, NULL } +static const true_false_string VGCS_notification_rec_vals = { + "VGCS capability and notifications wanted", + "no VGCS capability or no notifications wanted" }; /* FC Frequency Capability (octet 4 ) */ -static const value_string FC_frequency_cap_vals[] = { - { 0, "The MS does not support the E-GSM or R-GSM band"}, - { 1, "The MS does support the E-GSM or R-GSM "}, - { 0, NULL } +static const true_false_string FC_frequency_cap_vals = { + "The MS does support the E-GSM or R-GSM", + "The MS does not support the E-GSM or R-GSM band" }; /* CM3 (octet 5, bit 8) */ -static const value_string CM3_vals[] = { - { 0, "The MS does not support any options that are indicated in CM3"}, - { 1, "The MS supports options that are indicated in classmark 3 IE"}, - { 0, NULL } +static const true_false_string CM3_vals = { + "The MS supports options that are indicated in classmark 3 IE", + "The MS does not support any options that are indicated in CM3" }; /* LCS VA capability (LCS value added location request notification capability) (octet 5,bit 6) */ -static const value_string LCS_VA_cap_vals[] = { - { 0, "LCS value added location request notification capability not supported"}, - { 1, "LCS value added location request notification capability supported"}, - { 0, NULL } +static const true_false_string LCS_VA_cap_vals = { + "LCS value added location request notification capability supported", + "LCS value added location request notification capability not supported" }; /* UCS2 treatment (octet 5, bit 5) */ -static const value_string UCS2_treatment_vals[] = { - { 0, "the ME has a preference for the default alphabet"}, - { 1, "the ME has no preference between the use of the default alphabet and the use of UCS2"}, - { 0, NULL } +static const true_false_string UCS2_treatment_vals = { + "the ME has no preference between the use of the default alphabet and the use of UCS2", + "the ME has a preference for the default alphabet" }; /* SoLSA (octet 5, bit 4) */ -static const value_string SoLSA_vals[] = { - { 0, "The ME does not support SoLSA"}, - { 1, "The ME supports SoLSA"}, - { 0, NULL } +static const true_false_string SoLSA_vals = { + "The ME supports SoLSA", + "The ME does not support SoLSA" }; /* CMSP: CM Service Prompt (octet 5, bit 3) */ -static const value_string CMSP_vals[] = { - { 0, "Network initiated MO CM connection request not supported"}, - { 1, "Network initiated MO CM connection request supported for at least one CM protocol"}, - { 0, NULL } +static const true_false_string CMSP_vals = { + "Network initiated MO CM connection request supported for at least one CM protocol", + "Network initiated MO CM connection request not supported" }; -/* A5/4 algorithm supported */ -static const value_string A5_7_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/7 not available"}, - { 1, "encryption algorithm A5/7 available"}, - { 0, NULL } +/* A5/7 algorithm supported */ +static const true_false_string A5_7_algorithm_sup_vals = { + "encryption algorithm A5/7 available", + "encryption algorithm A5/7 not available" }; -/* A5/4 algorithm supported */ -static const value_string A5_6_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/6 not available"}, - { 1, "encryption algorithm A5/6 available"}, - { 0, NULL } +/* A5/6 algorithm supported */ +static const true_false_string A5_6_algorithm_sup_vals = { + "encryption algorithm A5/6 available", + "encryption algorithm A5/6 not available" }; /* A5/5 algorithm supported */ -static const value_string A5_5_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/5 not available"}, - { 1, "encryption algorithm A5/5 available"}, - { 0, NULL } +static const true_false_string A5_5_algorithm_sup_vals = { + "encryption algorithm A5/5 available", + "encryption algorithm A5/5 not available" }; /* A5/4 algorithm supported */ -static const value_string A5_4_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/4 not available"}, - { 1, "encryption algorithm A5/4 available"}, - { 0, NULL } +static const true_false_string A5_4_algorithm_sup_vals = { + "encryption algorithm A5/4 available", + "encryption algorithm A5/4 not available" }; - /* A5/3 algorithm supported (octet 5, bit 2) */ -static const value_string A5_3_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/3 not available"}, - { 1, "encryption algorithm A5/3 available"}, - { 0, NULL } +static const true_false_string A5_3_algorithm_sup_vals = { + "encryption algorithm A5/3 available", + "encryption algorithm A5/3 not available" }; - /* A5/2 algorithm supported (octet 5, bit 1) */ -static const value_string A5_2_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/2 not available"}, - { 1, "encryption algorithm A5/2 available"}, - { 0, NULL } +static const true_false_string A5_2_algorithm_sup_vals = { + "encryption algorithm A5/2 available", + "encryption algorithm A5/2 not available" }; static const value_string mobile_identity_type_vals[] = { @@ -219,16 +199,14 @@ static const value_string mobile_identity_type_vals[] = { { 0, NULL } }; -static const value_string oddevenind_vals[] = { - { 0, "Even number of identity digits"}, - { 1, "Odd number of identity digits"}, - { 0, NULL } +static const true_false_string oddevenind_vals = { + "Odd number of identity digits", + "Even number of identity digits" }; -static const value_string true_false_vals[] = { - { 0, "false" }, - { 1, "true" }, - { 0, NULL} +static const true_false_string true_false_vals = { + "true", + "false" }; const value_string gsm_a_sms_vals[] = { @@ -251,40 +229,34 @@ const value_string gsm_a_sms_vals[] = { { 0, NULL} }; -static const value_string ms_assisted_e_otd_vals[] = { - { 0, "MS assisted E-OTD not supported" }, - { 1, "MS assisted E-OTD supported" }, - { 0, NULL} +static const true_false_string ms_assisted_e_otd_vals = { + "MS assisted E-OTD supported", + "MS assisted E-OTD not supported" }; -static const value_string ms_based_e_otd_vals[] = { - { 0, "MS based E-OTD not supported" }, - { 1, "MS based E-OTD supported" }, - { 0, NULL} +static const true_false_string ms_based_e_otd_vals = { + "MS based E-OTD supported", + "MS based E-OTD not supported" }; -static const value_string ms_assisted_gps_vals[] = { - { 0, "MS assisted GPS not supported" }, - { 1, "MS assisted GPS supported" }, - { 0, NULL} +static const true_false_string ms_assisted_gps_vals = { + "MS assisted GPS supported", + "MS assisted GPS not supported" }; -static const value_string ms_based_gps_vals[] = { - { 0, "MS based GPS not supported" }, - { 1, "MS based GPS supported" }, - { 0, NULL} +static const true_false_string ms_based_gps_vals = { + "MS based GPS supported", + "MS based GPS not supported" }; -static const value_string ms_conventional_gps_vals[] = { - { 0, "Conventional GPS not supported" }, - { 1, "Conventional GPS supported" }, - { 0, NULL} +static const true_false_string ms_conventional_gps_vals = { + "Conventional GPS supported", + "Conventional GPS not supported" }; -static const value_string modulation_capability_vals[] = { - { 0, "8-PSK supported for downlink reception only" }, - { 1, "8-PSK supported for uplink transmission and downlink reception" }, - { 0, NULL} +static const true_false_string modulation_capability_vals = { + "8-PSK supported for uplink transmission and downlink reception", + "8-PSK supported for downlink reception only" }; static const value_string eight_psk_rf_power_capability_vals[] = { @@ -302,22 +274,19 @@ static const value_string gsm_400_bands_supported_vals[] = { { 0, NULL} }; -static const value_string umts_fdd_rat_cap_vals[] = { - { 0, "UMTS FDD not supported" }, - { 1, "UMTS FDD supported" }, - { 0, NULL} +static const true_false_string umts_fdd_rat_cap_vals = { + "UMTS FDD supported", + "UMTS FDD not supported" }; -static const value_string umts_384_mcps_tdd_rat_cap_vals[] = { - { 0, "UMTS 3.84 Mcps TDD not supported" }, - { 1, "UMTS 3.84 Mcps TDD supported" }, - { 0, NULL} +static const true_false_string umts_384_mcps_tdd_rat_cap_vals = { + "UMTS 3.84 Mcps TDD supported", + "UMTS 3.84 Mcps TDD not supported" }; -static const value_string cdma_2000_rat_cap_vals[] = { - { 0, "CDMA 2000 not supported" }, - { 1, "CDMA 2000 supported" }, - { 0, NULL} +static const true_false_string cdma_2000_rat_cap_vals = { + "CDMA 2000 supported", + "CDMA 2000 not supported" }; static const value_string dtm_gprs_multi_slot_class_vals[] = { @@ -328,10 +297,9 @@ static const value_string dtm_gprs_multi_slot_class_vals[] = { { 0, NULL} }; -static const value_string single_slot_dtm_vals[] = { - { 0, "Single Slot DTM not supported" }, - { 1, "Single Slot DTM supported" }, - { 0, NULL} +static const true_false_string single_slot_dtm_vals = { + "Single Slot DTM supported", + "Single Slot DTM not supported" }; static const value_string gsm_band_vals[] = { @@ -348,28 +316,24 @@ static const value_string gsm_band_vals[] = { { 0, NULL} }; -static const value_string umts_128_mcps_tdd_rat_cap_vals[] = { - { 0, "UMTS 1.28 Mcps TDD not supported" }, - { 1, "UMTS 1.28 Mcps TDD supported" }, - { 0, NULL} +static const true_false_string umts_128_mcps_tdd_rat_cap_vals = { + "UMTS 1.28 Mcps TDD supported", + "UMTS 1.28 Mcps TDD not supported" }; -static const value_string geran_feature_package_1_vals[] = { - { 0, "GERAN feature package 1 not supported" }, - { 1, "GERAN feature package 1 supported" }, - { 0, NULL} +static const true_false_string geran_feature_package_1_vals = { + "GERAN feature package 1 supported", + "GERAN feature package 1 not supported" }; -static const value_string flo_iu_cap_vals[] = { - { 0, "FLO in GERAN Iu Mode not supported" }, - { 1, "FLO in GERAN Iu Mode supported" }, - { 0, NULL} +static const true_false_string flo_iu_cap_vals = { + "FLO in GERAN Iu Mode supported", + "FLO in GERAN Iu Mode not supported" }; -static const value_string geran_feature_package_2_vals[] = { - { 0, "GERAN feature package 2 not supported" }, - { 1, "GERAN feature package 2 supported" }, - { 0, NULL} +static const true_false_string geran_feature_package_2_vals = { + "GERAN feature package 2 supported", + "GERAN feature package 2 not supported" }; static const value_string gmsk_multislot_power_prof_vals[] = { @@ -402,16 +366,14 @@ static const value_string downlink_adv_receiver_perf_vals[] = { { 0, NULL} }; -static const value_string dtm_enhancements_cap_vals[] = { - { 0, "The mobile station does not support enhanced DTM CS establishment and release procedures" }, - { 1, "The mobile station supports enhanced DTM CS establishment and release procedures" }, - { 0, NULL} +static const true_false_string dtm_enhancements_cap_vals = { + "The mobile station supports enhanced DTM CS establishment and release procedures", + "The mobile station does not support enhanced DTM CS establishment and release procedures" }; -static const value_string offset_required_vals[] = { - { 0, "The mobile station does not require the offset" }, - { 1, "The mobile station requires the offset" }, - { 0, NULL} +static const true_false_string offset_required_vals = { + "The mobile station requires the offset", + "The mobile station does not require the offset" }; static const value_string dtm_gprs_high_multi_slot_class_vals[] = { @@ -426,39 +388,51 @@ static const value_string dtm_gprs_high_multi_slot_class_vals[] = { { 0, NULL} }; -static const value_string repeated_acch_cap_vals[] = { - { 0, "The mobile station does not support Repeated SACCH" }, - { 1, "The mobile station supports Repeated SACCH and Repeated Downlink FACCH" }, - { 0, NULL} +static const true_false_string repeated_acch_cap_vals = { + "The mobile station supports Repeated SACCH and Repeated Downlink FACCH", + "The mobile station does not support Repeated SACCH" }; -static const value_string ciphering_mode_setting_cap_vals[] = { - { 0, "The mobile station does not support the Ciphering Mode Setting IE in the DTM ASSIGNMENT COMMAND message" }, - { 1, "The mobile station supports the Ciphering Mode Setting IE in the DTM ASSIGNMENT COMMAND message" }, - { 0, NULL} +static const true_false_string ciphering_mode_setting_cap_vals = { + "The mobile station supports the Ciphering Mode Setting IE in the DTM ASSIGNMENT COMMAND message", + "The mobile station does not support the Ciphering Mode Setting IE in the DTM ASSIGNMENT COMMAND message" }; -static const value_string additional_positioning_caps_vals[] = { - { 0, "The mobile station does not support additional positioning capabilities which can be retrieved using RRLP" }, - { 1, "The mobile station supports additional positioning capabilities which can be retrieved using RRLP" }, - { 0, NULL} +static const true_false_string additional_positioning_caps_vals = { + "The mobile station supports additional positioning capabilities which can be retrieved using RRLP", + "The mobile station does not support additional positioning capabilities which can be retrieved using RRLP" }; -static const value_string e_utra_fdd_support_vals[] = { - { 0, "E-UTRA FDD not supported" }, - { 1, "E-UTRA FDD supported" }, - { 0, NULL} +static const true_false_string e_utra_fdd_support_vals = { + "E-UTRA FDD supported", + "E-UTRA FDD not supported" }; -static const value_string e_utra_tdd_support_vals[] = { - { 0, "E-UTRA TDD not supported" }, - { 1, "E-UTRA TDD supported" }, - { 0, NULL} +static const true_false_string e_utra_tdd_support_vals = { + "E-UTRA TDD supported", + "E-UTRA TDD not supported" +}; + +static const true_false_string e_utra_meas_and_report_support_vals = { + "E-UTRAN Neighbour Cell measurements and measurement reporting while having an RR connection supported", + "E-UTRAN Neighbour Cell measurements and measurement reporting while having an RR connection not supported" +}; + +static const true_false_string prio_based_resel_support_vals = { + "Priority-based cell reselection supported", + "Priority-based cell reselection not supported" +}; + +static const true_false_string utra_csg_cells_reporting_vals = { + "Reporting of UTRAN CSG cells supported", + "Reporting of UTRAN CSG cells not supported" }; -static const value_string e_utra_meas_and_report_support_vals[] = { - { 0, "E-UTRAN Neighbour Cell measurements and measurement reporting while having an RR connection not supported" }, - { 1, "E-UTRAN Neighbour Cell measurements and measurement reporting while having an RR connection supported" }, +static const value_string vamos_level_vals[] = { + { 0, "VAMOS not supported" }, + { 1, "VAMOS I supported" }, + { 2, "VAMOS II supported" }, + { 3, "Unused. If received, the network shall interpret this as VAMOS II supported" }, { 0, NULL} }; @@ -668,6 +642,9 @@ static int hf_gsm_a_additional_positioning_caps = -1; static int hf_gsm_a_e_utra_fdd_support = -1; static int hf_gsm_a_e_utra_tdd_support = -1; static int hf_gsm_a_e_utra_meas_and_report_support = -1; +static int hf_gsm_a_prio_based_resel_support = -1; +static int hf_gsm_a_utra_csg_cells_reporting = -1; +static int hg_gsm_a_vamos_level = -1; static int hf_gsm_a_geo_loc_type_of_shape = -1; static int hf_gsm_a_geo_loc_sign_of_lat = -1; @@ -2388,7 +2365,7 @@ de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, /* * [3] 10.5.1.7 Mobile Station Classmark 3 - * 3GPP TS 24.008 version 8.6.0 Release 8 + * 3GPP TS 24.008 version 9.6.0 Release 9 */ #define AVAILABLE_BITS_CHECK(n) \ bits_left = ((len + offset) << 3) - bit_offset; \ @@ -2988,7 +2965,7 @@ de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, /* * Release 8 starts here * - * { 0 | 1 <E-UTRA FDD support : bit > } -- Release 8 starts here. + * <E-UTRA FDD support : bit > -- Release 8 starts here. * Extract E-UTRA FDD support */ AVAILABLE_BITS_CHECK(1); @@ -2996,7 +2973,7 @@ de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, bit_offset = bit_offset + 1; /* - * { 0 | 1 <E-UTRA TDD support : bit > } + * <E-UTRA TDD support : bit > * Extract E-UTRA TDD support */ AVAILABLE_BITS_CHECK(1); @@ -3004,7 +2981,7 @@ de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, bit_offset = bit_offset + 1; /* - * { 0 | 1 <E-UTRA Measurement and Reporting support : bit > } + * <E-UTRA Measurement and Reporting support : bit > * Extract E-UTRA Measurement and Reporting support */ AVAILABLE_BITS_CHECK(1); @@ -3012,6 +2989,32 @@ de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, bit_offset = bit_offset + 1; /* + * <Priority-based reselection support : bit > + * Extract Priority-based reselection support + */ + AVAILABLE_BITS_CHECK(1); + proto_tree_add_bits_item(tree, hf_gsm_a_prio_based_resel_support, tvb, bit_offset, 1, FALSE); + bit_offset = bit_offset + 1; + + /* + * Release 9 starts here + * + * <UTRA CSG Cells Reporting : bit > -- Release 9 starts here. + * Extract UTRA CSG Cells Reporting + */ + AVAILABLE_BITS_CHECK(1); + proto_tree_add_bits_item(tree, hf_gsm_a_utra_csg_cells_reporting, tvb, bit_offset, 1, FALSE); + bit_offset = bit_offset + 1; + + /* + * <VAMOS Level : bit(2) > + * Extract VAMOS Level + */ + AVAILABLE_BITS_CHECK(2); + proto_tree_add_bits_item(tree, hg_gsm_a_vamos_level, tvb, bit_offset, 2, FALSE); + bit_offset = bit_offset + 2; + + /* * Add spare bits until we reach an octet boundary */ bits_left = (((len + offset) << 3) - bit_offset) & 0x07; @@ -3348,12 +3351,12 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_ES_IND, { "ES IND","gsm_a.MSC2_rev", - FT_UINT8,BASE_DEC, VALS(ES_IND_vals), 0x10, + FT_BOOLEAN,8, TFS(&ES_IND_vals), 0x10, NULL, HFILL } }, { &hf_gsm_a_A5_1_algorithm_sup, { "A5/1 algorithm supported","gsm_a.MSC2_rev", - FT_UINT8,BASE_DEC, VALS(A5_1_algorithm_sup_vals), 0x08, + FT_BOOLEAN,8, TFS(&A5_1_algorithm_sup_vals), 0x08, NULL, HFILL } }, { &hf_gsm_a_RF_power_capability, @@ -3363,7 +3366,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_ps_sup_cap, { "PS capability (pseudo-synchronization capability)","gsm_a.ps_sup_cap", - FT_UINT8,BASE_DEC, VALS(ps_sup_cap_vals), 0x40, + FT_BOOLEAN,8, TFS(&ps_sup_cap_vals), 0x40, NULL, HFILL } }, { &hf_gsm_a_SS_screening_indicator, @@ -3373,77 +3376,77 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_SM_capability, { "SM capability (MT SMS pt to pt capability)","gsm_a.SM_cap", - FT_UINT8,BASE_DEC, VALS(SM_capability_vals), 0x08, + FT_BOOLEAN,8, TFS(&SM_capability_vals), 0x08, NULL, HFILL } }, { &hf_gsm_a_VBS_notification_rec, { "VBS notification reception","gsm_a.VBS_notification_rec", - FT_UINT8,BASE_DEC, VALS(VBS_notification_rec_vals), 0x04, + FT_BOOLEAN,8, TFS(&VBS_notification_rec_vals), 0x04, NULL, HFILL } }, { &hf_gsm_a_VGCS_notification_rec, { "VGCS notification reception","gsm_a.VGCS_notification_rec", - FT_UINT8,BASE_DEC, VALS(VGCS_notification_rec_vals), 0x02, + FT_BOOLEAN,8, TFS(&VGCS_notification_rec_vals), 0x02, NULL, HFILL } }, { &hf_gsm_a_FC_frequency_cap, { "FC Frequency Capability","gsm_a.FC_frequency_cap", - FT_UINT8,BASE_DEC, VALS(FC_frequency_cap_vals), 0x01, + FT_BOOLEAN,8, TFS(&FC_frequency_cap_vals), 0x01, NULL, HFILL } }, { &hf_gsm_a_CM3, { "CM3","gsm_a.CM3", - FT_UINT8,BASE_DEC, VALS(CM3_vals), 0x80, + FT_BOOLEAN,8, TFS(&CM3_vals), 0x80, NULL, HFILL } }, { &hf_gsm_a_LCS_VA_cap, { "LCS VA capability (LCS value added location request notification capability)","gsm_a.LCS_VA_cap", - FT_UINT8,BASE_DEC, VALS(LCS_VA_cap_vals), 0x20, + FT_BOOLEAN,8, TFS(&LCS_VA_cap_vals), 0x20, NULL, HFILL } }, { &hf_gsm_a_UCS2_treatment, { "UCS2 treatment","gsm_a.UCS2_treatment", - FT_UINT8,BASE_DEC, VALS(UCS2_treatment_vals), 0x10, + FT_BOOLEAN,8, TFS(&UCS2_treatment_vals), 0x10, NULL, HFILL } }, { &hf_gsm_a_SoLSA, { "SoLSA","gsm_a.SoLSA", - FT_UINT8,BASE_DEC, VALS(SoLSA_vals), 0x08, + FT_BOOLEAN,8, TFS(&SoLSA_vals), 0x08, NULL, HFILL } }, { &hf_gsm_a_CMSP, { "CMSP: CM Service Prompt","gsm_a.CMSP", - FT_UINT8,BASE_DEC, VALS(CMSP_vals), 0x04, + FT_BOOLEAN,8, TFS(&CMSP_vals), 0x04, NULL, HFILL } }, { &hf_gsm_a_A5_7_algorithm_sup, { "A5/7 algorithm supported","gsm_a.A5_7_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_7_algorithm_sup_vals), 0x0, + FT_BOOLEAN,8, TFS(&A5_7_algorithm_sup_vals), 0x0, NULL, HFILL } }, { &hf_gsm_a_A5_6_algorithm_sup, { "A5/6 algorithm supported","gsm_a.A5_6_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_6_algorithm_sup_vals), 0x0, + FT_BOOLEAN,8, TFS(&A5_6_algorithm_sup_vals), 0x0, NULL, HFILL } }, { &hf_gsm_a_A5_5_algorithm_sup, { "A5/5 algorithm supported","gsm_a.A5_5_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_5_algorithm_sup_vals), 0x0, + FT_BOOLEAN,8, TFS(&A5_5_algorithm_sup_vals), 0x0, NULL, HFILL } }, { &hf_gsm_a_A5_4_algorithm_sup, { "A5/4 algorithm supported","gsm_a.A5_4_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_4_algorithm_sup_vals), 0x0, + FT_BOOLEAN,8, TFS(&A5_4_algorithm_sup_vals), 0x0, NULL, HFILL } }, { &hf_gsm_a_A5_3_algorithm_sup, { "A5/3 algorithm supported","gsm_a.A5_3_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_3_algorithm_sup_vals), 0x02, + FT_BOOLEAN,8, TFS(&A5_3_algorithm_sup_vals), 0x02, NULL, HFILL } }, { &hf_gsm_a_A5_2_algorithm_sup, { "A5/2 algorithm supported","gsm_a.A5_2_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_2_algorithm_sup_vals), 0x01, + FT_BOOLEAN,8, TFS(&A5_2_algorithm_sup_vals), 0x01, NULL, HFILL } }, { &hf_gsm_a_mobile_identity_type, @@ -3453,7 +3456,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_odd_even_ind, { "Odd/even indication","gsm_a.oddevenind", - FT_UINT8, BASE_DEC, oddevenind_vals, 0x08, + FT_BOOLEAN, 8, TFS(&oddevenind_vals), 0x08, NULL, HFILL } }, { &hf_gsm_a_tmgi_mcc_mnc_ind, @@ -3528,17 +3531,17 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_pgsm_supported, { "P-GSM Supported", "gsm_a.classmark3.pgsmSupported", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_egsm_supported, { "E-GSM or R-GSM Supported", "gsm_a.classmark3.egsmSupported", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_gsm1800_supported, { "GSM 1800 Supported", "gsm_a.classmark3.gsm1800Supported", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_ass_radio_cap1, @@ -3558,7 +3561,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_rsupport, { "R Support", "gsm_a.classmark3.rsupport", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_r_capabilities, @@ -3568,7 +3571,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_multislot_capabilities, { "HSCSD Multi Slot Capability", "gsm_a.classmark3.multislot_capabilities", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_multislot_class, @@ -3578,17 +3581,17 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_ucs2_treatment, { "UCS2 treatment","gsm_a.UCS2_treatment", - FT_UINT8,BASE_DEC, VALS(UCS2_treatment_vals), 0x0, + FT_BOOLEAN,8, TFS(&UCS2_treatment_vals), 0x0, NULL, HFILL } }, { &hf_gsm_a_extended_measurement_cap, { "Extended Measurement Capability", "gsm_a.classmark3.ext_meas_cap", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_ms_measurement_capability, { "MS measurement capability", "gsm_a.classmark3.ms_measurement_capability", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_sms_value, @@ -3603,7 +3606,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_ms_pos_method_cap_present, { "MS Positioning Method Capability present", "gsm_a.classmark3.ms_pos_method_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_ms_pos_method, @@ -3613,32 +3616,32 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_ms_assisted_e_otd, { "MS assisted E-OTD", "gsm_a.classmark3.ms_assisted_e_otd", - FT_UINT8, BASE_DEC, VALS(ms_assisted_e_otd_vals), 0x0, + FT_BOOLEAN, 8, TFS(&ms_assisted_e_otd_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_ms_based_e_otd, { "MS based E-OTD", "gsm_a.classmark3.ms_based_e_otd", - FT_UINT8, BASE_DEC, VALS(ms_based_e_otd_vals), 0x0, + FT_BOOLEAN, 8, TFS(&ms_based_e_otd_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_ms_assisted_gps, { "MS assisted GPS", "gsm_a.classmark3.ms_assisted_gps", - FT_UINT8, BASE_DEC, VALS(ms_assisted_gps_vals), 0x0, + FT_BOOLEAN, 8, TFS(&ms_assisted_gps_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_ms_based_gps, { "MS based GPS", "gsm_a.classmark3.ms_based_gps", - FT_UINT8, BASE_DEC, VALS(ms_based_gps_vals), 0x0, + FT_BOOLEAN, 8, TFS(&ms_based_gps_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_ms_conventional_gps, { "MS Conventional GPS", "gsm_a.classmark3.ms_conventional_gps", - FT_UINT8, BASE_DEC, VALS(ms_conventional_gps_vals), 0x0, + FT_BOOLEAN, 8, TFS(&ms_conventional_gps_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_ecsd_multi_slot_capability, { "ECSD Multi Slot Capability present", "gsm_a.classmark3.ecsd_multi_slot_capability", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_ecsd_multi_slot_class, @@ -3648,7 +3651,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_8_psk_struct_present, { "8-PSK Struct present", "gsm_a.classmark3.8_psk_struct_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_8_psk_struct, @@ -3658,7 +3661,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_modulation_capability, { "Modulation Capability", "gsm_a.classmark3.modulation_capability", - FT_UINT8, BASE_DEC, VALS(modulation_capability_vals), 0x00, + FT_BOOLEAN, 8, TFS(&modulation_capability_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_8_psk_rf_power_capability_1, @@ -3673,7 +3676,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_gsm_400_band_info_present, { "GSM 400 Band Information present", "gsm_a.classmark3.gsm_400_band_info_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gsm_400_bands_supported, @@ -3688,7 +3691,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_gsm_850_assoc_radio_cap_present, { "GSM 850 Associated Radio Capability present", "gsm_a.classmark3.gsm_850_assoc_radio_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gsm_850_assoc_radio_cap, @@ -3698,7 +3701,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_gsm_1900_assoc_radio_cap_present, { "GSM 1900 Associated Radio Capability present", "gsm_a.classmark3.gsm_1900_assoc_radio_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gsm_1900_assoc_radio_cap, @@ -3708,22 +3711,22 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_umts_fdd_rat_cap, { "UMTS FDD Radio Access Technology Capability", "gsm_a.classmark3.umts_fdd_rat_cap", - FT_UINT8, BASE_DEC, VALS(umts_fdd_rat_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&umts_fdd_rat_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_umts_384_mcps_tdd_rat_cap, { "UMTS 3.84 Mcps TDD Radio Access Technology Capability", "gsm_a.classmark3.umts_384_mcps_tdd_rat_cap", - FT_UINT8, BASE_DEC, VALS(umts_384_mcps_tdd_rat_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&umts_384_mcps_tdd_rat_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_cdma_2000_rat_cap, { "CDMA 2000 Radio Access Technology Capability", "gsm_a.classmark3.cdma_2000_rat_cap", - FT_UINT8, BASE_DEC, VALS(cdma_2000_rat_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&cdma_2000_rat_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_dtm_e_gprs_multi_slot_info_present, { "DTM E/GPRS Multi Slot Information present", "gsm_a.classmark3.dtm_e_gprs_multi_slot_info_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_dtm_gprs_multi_slot_class, @@ -3733,12 +3736,12 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_single_slot_dtm, { "Single Slot DTM", "gsm_a.classmark3.single_slot_dtm_supported", - FT_UINT8, BASE_DEC, VALS(single_slot_dtm_vals), 0x0, + FT_BOOLEAN, 8, TFS(&single_slot_dtm_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_dtm_egprs_multi_slot_class_present, { "DTM EGPRS Multi Slot Class present", "gsm_a.classmark3.dtm_egprs_multi_slot_class_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_dtm_egprs_multi_slot_class, @@ -3748,7 +3751,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_single_band_support, { "Single Band Support", "gsm_a.classmark3.single_band_support", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gsm_band, @@ -3758,7 +3761,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_gsm_750_assoc_radio_cap_present, { "GSM 750 Associated Radio Capability present", "gsm_a.classmark3.gsm_750_assoc_radio_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gsm_750_assoc_radio_cap, @@ -3768,17 +3771,17 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_umts_128_mcps_tdd_rat_cap, { "UMTS 1.28 Mcps TDD Radio Access Technology Capability", "gsm_a.classmark3.umts_128_mcps_tdd_rat_cap", - FT_UINT8, BASE_DEC, VALS(umts_128_mcps_tdd_rat_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&umts_128_mcps_tdd_rat_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_geran_feature_package_1, { "GERAN Feature Package 1", "gsm_a.classmark3.geran_feature_package_1", - FT_UINT8, BASE_DEC, VALS(geran_feature_package_1_vals), 0x00, + FT_BOOLEAN, 8, TFS(&geran_feature_package_1_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_ext_dtm_e_gprs_multi_slot_info_present, { "Extended DTM E/GPRS Multi Slot Information present", "gsm_a.classmark3.ext_dtm_e_gprs_info_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_ext_dtm_gprs_multi_slot_class, @@ -3793,7 +3796,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_high_multislot_cap_present, { "High Multislot Capability present", "gsm_a.classmark3.high_multislot_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_high_multislot_cap, @@ -3803,7 +3806,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_geran_iu_mode_support, { "GERAN Iu Mode Support", "gsm_a.classmark3.geran_iu_mode_support", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_geran_iu_mode_cap, @@ -3818,12 +3821,12 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_flo_iu_cap, { "FLO Iu Capability", "gsm_a.classmark3.geran_iu_mode_cap.flo_iu_cap", - FT_UINT8, BASE_DEC, VALS(flo_iu_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&flo_iu_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_geran_feature_package_2, { "GERAN Feature Package 2", "gsm_a.classmark3.geran_feature_package_2", - FT_UINT8, BASE_DEC, VALS(geran_feature_package_2_vals), 0x00, + FT_BOOLEAN, 8, TFS(&geran_feature_package_2_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gmsk_multislot_power_prof, @@ -3838,7 +3841,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_t_gsm_400_band_info_present, { "T-GSM 400 Band Information present", "gsm_a.classmark3.gsm_400_band_info_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_t_gsm_400_bands_supported, @@ -3853,7 +3856,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_t_gsm_900_assoc_radio_cap_present, { "T-GSM 900 Associated Radio Capability present", "gsm_a.classmark3.t_gsm_900_assoc_radio_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_t_gsm_900_assoc_radio_cap, @@ -3868,12 +3871,12 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_dtm_enhancements_cap, { "DTM Enhancements Capability", "gsm_a.classmark3.dtm_enhancements_capability", - FT_UINT8, BASE_DEC, VALS(dtm_enhancements_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&dtm_enhancements_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_dtm_e_gprs_high_multi_slot_info_present, { "DTM E/GPRS High Multi Slot Information present", "gsm_a.classmark3.dtm_e_gprs_high_mutli_slot_info_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_dtm_gprs_high_multi_slot_class, @@ -3883,12 +3886,12 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_offset_required, { "Offset required", "gsm_a.classmark3.offset_required", - FT_UINT8, BASE_DEC, VALS(offset_required_vals), 0x0, + FT_BOOLEAN, 8, TFS(&offset_required_vals), 0x0, NULL, HFILL} }, { &hf_gsm_a_dtm_egprs_high_multi_slot_class_present, { "DTM EGPRS High Multi Slot Class present", "gsm_a.classmark3.dtm_egprs_high_multi_slot_class_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_dtm_egprs_high_multi_slot_class, @@ -3898,12 +3901,12 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_repeated_acch_cap, { "Repeated ACCH Capability", "gsm_a.classmark3.repeated_acch_cap", - FT_UINT8, BASE_DEC, VALS(repeated_acch_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&repeated_acch_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gsm_710_assoc_radio_cap_present, { "GSM 710 Associated Radio Capability present", "gsm_a.classmark3.gsm_710_assoc_radio_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_gsm_710_assoc_radio_cap, @@ -3913,7 +3916,7 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_t_gsm_810_assoc_radio_cap_present, { "T-GSM 810 Associated Radio Capability present", "gsm_a.classmark3.t_gsm_810_assoc_radio_cap_present", - FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x00, + FT_BOOLEAN, 8, TFS(&true_false_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_t_gsm_810_assoc_radio_cap, @@ -3923,27 +3926,42 @@ proto_register_gsm_a_common(void) }, { &hf_gsm_a_ciphering_mode_setting_cap, { "Ciphering Mode Setting Capability", "gsm_a.classmark3.ciphering_mode_setting_cap", - FT_UINT8, BASE_DEC, VALS(ciphering_mode_setting_cap_vals), 0x00, + FT_BOOLEAN, 8, TFS(&ciphering_mode_setting_cap_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_additional_positioning_caps, { "Additional Positioning Capabilities", "gsm_a.classmark3.additional_positioning_caps", - FT_UINT8, BASE_DEC, VALS(additional_positioning_caps_vals), 0x00, + FT_BOOLEAN, 8, TFS(&additional_positioning_caps_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_e_utra_fdd_support, { "E-UTRA FDD support", "gsm_a.classmark3.e_utra_fdd_support", - FT_UINT8, BASE_DEC, VALS(e_utra_fdd_support_vals), 0x00, + FT_BOOLEAN, 8, TFS(&e_utra_fdd_support_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_e_utra_tdd_support, { "E-UTRA TDD support", "gsm_a.classmark3.e_utra_tdd_support", - FT_UINT8, BASE_DEC, VALS(e_utra_tdd_support_vals), 0x00, + FT_BOOLEAN, 8, TFS(&e_utra_tdd_support_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_e_utra_meas_and_report_support, { "E-UTRA Measurement and Reporting support", "gsm_a.classmark3.e_utra_meas_and_report_support", - FT_UINT8, BASE_DEC, VALS(e_utra_meas_and_report_support_vals), 0x00, + FT_BOOLEAN, 8, TFS(&e_utra_meas_and_report_support_vals), 0x00, + NULL, HFILL} + }, + { &hf_gsm_a_prio_based_resel_support, + { "Priority-based reselection support", "gsm_a.classmark3.prio_based_resel_support", + FT_BOOLEAN, 8, TFS(&prio_based_resel_support_vals), 0x00, + NULL, HFILL} + }, + { &hf_gsm_a_utra_csg_cells_reporting, + { "UTRA CSG Cells Reporting", "gsm_a.classmark3.utra_csg_cells_reporting", + FT_BOOLEAN, 8, TFS(&utra_csg_cells_reporting_vals), 0x00, + NULL, HFILL} + }, + { &hg_gsm_a_vamos_level, + { "VAMOS Level", "gsm_a.classmark3.vamos_level", + FT_UINT8, BASE_DEC, VALS(vamos_level_vals), 0x00, NULL, HFILL} }, { &hf_gsm_a_geo_loc_type_of_shape, diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h index cd3b33760d..a0627be9ab 100644 --- a/epan/dissectors/packet-gsm_a_common.h +++ b/epan/dissectors/packet-gsm_a_common.h @@ -968,6 +968,7 @@ typedef enum DE_LSA_ID, /* LSA Identifier */ DE_DAY_SAVING_TIME, /* Daylight Saving Time */ DE_EMERGENCY_NUM_LIST, /* Emergency Number List */ + DE_ADD_UPD_PARAMS, /* Additional update parameters */ /* Call Control Information Elements 10.5.4 */ DE_AUX_STATES, /* Auxiliary States */ DE_BEARER_CAP, /* Bearer Capability */ @@ -1033,33 +1034,37 @@ dtap_elem_idx_t; typedef enum { /* GPRS Mobility Management Information Elements [3] 10.5.5 */ - DE_ATTACH_RES, /* [7] 10.5.1 Attach Result*/ - DE_ATTACH_TYPE, /* [7] 10.5.2 Attach Type */ - DE_CIPH_ALG, /* [7] 10.5.3 Cipher Algorithm */ - DE_TMSI_STAT, /* [7] 10.5.4 TMSI Status */ - DE_DETACH_TYPE, /* [7] 10.5.5 Detach Type */ - DE_DRX_PARAM, /* [7] 10.5.6 DRX Parameter */ - DE_FORCE_TO_STAND, /* [7] 10.5.7 Force to Standby */ - DE_FORCE_TO_STAND_H, /* [7] 10.5.8 Force to Standby - Info is in the high nibble */ - DE_P_TMSI_SIG, /* [7] 10.5.9 P-TMSI Signature */ - DE_P_TMSI_SIG_2, /* [7] 10.5.10 P-TMSI Signature 2 */ - DE_ID_TYPE_2, /* [7] 10.5.11 Identity Type 2 */ - DE_IMEISV_REQ, /* [7] 10.5.12 IMEISV Request */ - DE_REC_N_PDU_NUM_LIST, /* [7] 10.5.13 Receive N-PDU Numbers List */ - DE_MS_NET_CAP, /* [7] 10.5.14 MS Network Capability */ - DE_MS_RAD_ACC_CAP, /* [7] 10.5.15 MS Radio Access Capability */ - DE_GMM_CAUSE, /* [7] 10.5.16 GMM Cause */ - DE_RAI, /* [7] 10.5.17 Routing Area Identification */ - DE_UPD_RES, /* [7] 10.5.18 Update Result */ - DE_UPD_TYPE, /* [7] 10.5.19 Update Type */ - DE_AC_REF_NUM, /* [7] 10.5.20 A&C Reference Number */ + DE_ATTACH_RES, /* [7] 10.5.5.1 Attach Result*/ + DE_ATTACH_TYPE, /* [7] 10.5.5.2 Attach Type */ + DE_CIPH_ALG, /* [7] 10.5.5.3 Cipher Algorithm */ + DE_TMSI_STAT, /* [7] 10.5.5.4 TMSI Status */ + DE_DETACH_TYPE, /* [7] 10.5.5.5 Detach Type */ + DE_DRX_PARAM, /* [7] 10.5.5.6 DRX Parameter */ + DE_FORCE_TO_STAND, /* [7] 10.5.5.7 Force to Standby */ + DE_FORCE_TO_STAND_H, /* [7] 10.5.5.7 Force to Standby - Info is in the high nibble */ + DE_P_TMSI_SIG, /* [7] 10.5.5.8 P-TMSI Signature */ + DE_P_TMSI_SIG_2, /* [7] 10.5.5.8a P-TMSI Signature 2 */ + DE_ID_TYPE_2, /* [7] 10.5.5.9 Identity Type 2 */ + DE_IMEISV_REQ, /* [7] 10.5.5.10 IMEISV Request */ + DE_REC_N_PDU_NUM_LIST, /* [7] 10.5.5.11 Receive N-PDU Numbers List */ + DE_MS_NET_CAP, /* [7] 10.5.5.12 MS Network Capability */ + DE_MS_RAD_ACC_CAP, /* [7] 10.5.5.12a MS Radio Access Capability */ + DE_GMM_CAUSE, /* [7] 10.5.5.14 GMM Cause */ + DE_RAI, /* [7] 10.5.5.15 Routing Area Identification */ + DE_RAI_2, /* [7] 10.5.5.15a Routing Area Identification 2 */ + DE_UPD_RES, /* [7] 10.5.5.17 Update Result */ + DE_UPD_TYPE, /* [7] 10.5.5.18 Update Type */ + DE_AC_REF_NUM, /* [7] 10.5.5.19 A&C Reference Number */ DE_AC_REF_NUM_H, /* A&C Reference Number - Info is in the high nibble */ - DE_SRVC_TYPE, /* [7] 10.5.20 Service Type */ - DE_CELL_NOT, /* [7] 10.5.21 Cell Notification */ - DE_PS_LCS_CAP, /* [7] 10.5.22 PS LCS Capability */ - DE_NET_FEAT_SUP, /* [7] 10.5.23 Network Feature Support */ - DE_RAT_INFO_CONTAINER, /* [7] 10.5.24 Inter RAT information container */ - /* [7] 10.5.25 Requested MS information */ + DE_SRVC_TYPE, /* [7] 10.5.5.20 Service Type */ + DE_CELL_NOT, /* [7] 10.5.5.21 Cell Notification */ + DE_PS_LCS_CAP, /* [7] 10.5.5.22 PS LCS Capability */ + DE_NET_FEAT_SUP, /* [7] 10.5.5.23 Network Feature Support */ + DE_RAT_INFO_CONTAINER, /* [7] 10.5.5.24 Inter RAT information container */ + DE_REQ_MS_INFO, /* [7] 10.5.5.25 Requested MS information */ + DE_UE_NETWORK_CAP, /* [7] 10.5.5.26 UE network capability */ + DE_EUTRAN_IRAT_INFO_CONTAINER, /* [7] 10.5.5.27 E-UTRAN inter RAT information container */ + DE_VOICE_DOMAIN_PREF, /* [7] 10.5.5.28 Voice domain preference and UE's usage setting */ /* Session Management Information Elements [3] 10.5.6 */ DE_ACC_POINT_NAME, /* Access Point Name */ DE_NET_SAPI, /* Network Service Access Point Identifier */ @@ -1078,6 +1083,7 @@ typedef enum DE_MBMS_PROT_CONF_OPT, /* MBMS protocol configuration options */ DE_ENH_NSAPI, /* Enhanced network service access point identifier */ DE_REQ_TYPE, /* Request type */ + DE_SM_NOTIF_IND, /* Notification indicator */ /* GPRS Common Information Elements [8] 10.5.7 */ DE_PDP_CONTEXT_STAT, /* [8] 10.5.7.1 PDP Context Status */ DE_RAD_PRIO, /* [8] 10.5.7.2 Radio Priority */ @@ -1085,6 +1091,7 @@ typedef enum DE_GPRS_TIMER_2, /* [8] 10.5.7.4 GPRS Timer 2 */ DE_RAD_PRIO_2, /* [8] 10.5.7.5 Radio Priority 2 */ DE_MBMS_CTX_STATUS, /* [8] 10.5.7.6 MBMS context status */ + DE_UPLINK_DATA_STATUS, /* [8] 10.5.7.7 Uplink data status */ DE_GM_NONE /* NONE */ } gm_elem_idx_t; diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c index 6d4becebc5..d565ae7422 100644 --- a/epan/dissectors/packet-gsm_a_dtap.c +++ b/epan/dissectors/packet-gsm_a_dtap.c @@ -64,7 +64,7 @@ * 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$ * @@ -247,6 +247,7 @@ const value_string gsm_dtap_elem_strings[] = { { 0x00, "LSA Identifier" }, { 0x00, "Daylight Saving Time" }, { 0x00, "Emergency Number List" }, + { 0x00, "Additional update parameters" }, /* Call Control Information Elements 10.5.4 */ { 0x00, "Auxiliary States" }, /* 10.5.4.4 Auxiliary states */ { 0x00, "Bearer Capability" }, /* 10.5.4.4a Backup bearer capability */ @@ -422,6 +423,7 @@ static int hf_gsm_a_dtap_serv_cat_b4 = -1; static int hf_gsm_a_dtap_serv_cat_b3 = -1; static int hf_gsm_a_dtap_serv_cat_b2 = -1; static int hf_gsm_a_dtap_serv_cat_b1 = -1; +static int hf_gsm_a_dtap_csmt = -1; static int hf_gsm_a_dtap_alerting_pattern = -1; static int hf_gsm_a_dtap_ccbs_activation = -1; static int hf_gsm_a_dtap_stream_identifier = -1; @@ -976,6 +978,7 @@ de_day_saving_time(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin return(curr_offset - offset); } + /* * 10.5.3.13 Emergency Number List */ @@ -1052,6 +1055,26 @@ de_emerg_num_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o count++; } + return(len); +} + +/* + * 10.5.3.14 Additional update parameters + */ +static const true_false_string gsm_a_dtap_csmt_vals = { + "CS fallback mobile terminating call", + "No additional information" +}; + +static guint16 +de_add_upd_params(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_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 3, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_dtap_csmt, tvb, (curr_offset<<3)+7, 1, FALSE); return(len); } @@ -4072,6 +4095,7 @@ guint16 (*dtap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _ de_lsa_id, /* LSA Identifier */ de_day_saving_time, /* Daylight Saving Time */ de_emerg_num_list, /* Emergency Number List */ + de_add_upd_params, /* Additional update parameters */ /* Call Control Information Elements 10.5.4 */ de_aux_states, /* Auxiliary States */ de_bearer_cap, /* Bearer Capability */ @@ -4720,7 +4744,9 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL); - ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL); + ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, " - Mobile station classmark for UMTS"); + + ELEM_OPT_TV_SHORT(0xc0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL); EXTRANEOUS_DATA_CHECK(curr_len, 0); } @@ -6449,6 +6475,11 @@ proto_register_gsm_a_dtap(void) FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } }, + { &hf_gsm_a_dtap_csmt, + { "CSMT", "gsm_a.dtap.csmt", + FT_BOOLEAN, 8, TFS(&gsm_a_dtap_csmt_vals), 0x0, + NULL, HFILL } + }, { &hf_gsm_a_dtap_alerting_pattern, { "Alerting Pattern", "gsm_a.dtap.alerting_pattern", FT_UINT8, BASE_DEC, VALS(gsm_a_alerting_pattern_vals), 0x0f, diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c index 2130d3b0e1..4f01017296 100644 --- a/epan/dissectors/packet-gsm_a_gm.c +++ b/epan/dissectors/packet-gsm_a_gm.c @@ -33,7 +33,7 @@ * 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$ * @@ -132,6 +132,9 @@ const value_string gsm_a_dtap_msg_sm_strings[] = { { 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 } }; @@ -154,6 +157,7 @@ const value_string gsm_gm_elem_strings[] = { { 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" }, @@ -163,6 +167,10 @@ const value_string gsm_gm_elem_strings[] = { { 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" }, @@ -181,6 +189,7 @@ const value_string gsm_gm_elem_strings[] = { { 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" }, @@ -188,6 +197,7 @@ const value_string gsm_gm_elem_strings[] = { { 0x00, "GPRS Timer 2" }, { 0x00, "Radio Priority 2"}, { 0x00, "MBMS context status"}, + { 0x00, "Uplink data status"}, { 0x00, "Spare Nibble"}, { 0, NULL } }; @@ -256,6 +266,17 @@ static int hf_gsm_a_gm_tmsi_flag = -1; 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; @@ -265,6 +286,10 @@ static int hf_gsm_a_gm_otd_b = -1; static int hf_gsm_a_gm_gps_a = -1; static int hf_gsm_a_gm_gps_b = -1; static int hf_gsm_a_gm_gps_c = -1; +static int hf_gsm_a_gm_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; @@ -289,6 +314,7 @@ static int hf_gsm_a_sm_packet_flow_id = -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_multislot_capability = -1; static int hf_gsm_a_gm_rac_single_slt_dtm = -1; @@ -320,10 +346,11 @@ static int hf_gsm_a_gmm_net_cap_gea7 = -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; @@ -349,6 +376,7 @@ static gint ett_sm_tft = -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 */ @@ -876,9 +904,9 @@ static const true_false_string gsm_a_gmm_net_cap_ps_irat_s1_vals = { "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 = { @@ -896,6 +924,11 @@ static const true_false_string gsm_a_gmm_net_cap_epc_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, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { @@ -954,8 +987,8 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o /* 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); - /* 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, FALSE); /* bit 5: ISR support */ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_isr, tvb, curr_offset, 1, FALSE); @@ -966,8 +999,11 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o /* bit 3: EPC capability */ proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_epc, tvb, curr_offset, 1, FALSE); - /* 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, FALSE); + + /* bits 1: Spare bit */ + proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+7, 1, FALSE); curr_offset++; EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); @@ -2472,6 +2508,16 @@ de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, } /* + * [7] 10.5.5.15a Routing area identification 2 + */ +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 @@ -2709,6 +2755,93 @@ defined in 3GPP TS 25.331 [23c]. If this field includes padding bits, they are d } +/* [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 */ @@ -2924,7 +3057,7 @@ static guint16 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; @@ -2957,6 +3090,54 @@ de_gc_mbms_context_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, 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 */ @@ -4377,6 +4558,28 @@ de_sm_req_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 return(1); } +/* + * [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 */ @@ -4396,6 +4599,7 @@ guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ 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 */ @@ -4405,6 +4609,10 @@ guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ 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 */ @@ -4423,6 +4631,7 @@ guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ 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 */ @@ -4430,6 +4639,7 @@ guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ 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 */ }; @@ -4476,6 +4686,20 @@ dtap_gmm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM, DE_TMSI_STAT , NULL); ELEM_OPT_TLV( 0x33 , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP , NULL); + + 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); } @@ -4530,6 +4754,12 @@ dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TV_SHORT( 0xB0 , GSM_A_PDU_TYPE_GM, DE_NET_FEAT_SUP , NULL); ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST , 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); } @@ -4542,7 +4772,7 @@ dtap_gmm_attach_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 { guint32 curr_offset; -/* guint32 consumed; */ + guint32 consumed; guint curr_len; curr_offset = offset; @@ -4550,6 +4780,10 @@ dtap_gmm_attach_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 pinfo->p2p_dir = P2P_DIR_RECV; + ELEM_OPT_TLV(0x27, GSM_A_PDU_TYPE_GM, DE_RAT_INFO_CONTAINER, " - Inter RAT handover information"); + + 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); } @@ -4601,7 +4835,7 @@ dtap_gmm_detach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 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, pinfo); } @@ -4658,7 +4892,7 @@ dtap_gmm_ptmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, 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, pinfo); } @@ -4905,6 +5139,22 @@ dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of ELEM_OPT_TLV( 0x33 , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP , NULL); + 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); } @@ -4937,7 +5187,7 @@ dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of 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); @@ -4957,6 +5207,14 @@ dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST , NULL); + 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); } @@ -4977,8 +5235,9 @@ dtap_gmm_rau_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of /* [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"); + + 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); } @@ -5092,6 +5351,8 @@ dtap_gmm_service_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* MBMS context status 10.5.7.6 TLV 2 - 18 */ ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS , NULL); + ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_GM, DE_UPLINK_DATA_STATUS, NULL); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } @@ -5204,13 +5465,13 @@ dtap_sm_act_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 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, pinfo); } @@ -5419,12 +5680,14 @@ dtap_sm_mod_pdp_req_net(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui 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); + ELEM_OPT_TLV(0x36 , GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , NULL); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } @@ -5592,6 +5855,80 @@ dtap_sm_deact_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint } /* + * [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; + + ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_QOS , " - Required QoS"); + + ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_LINKED_TI , NULL); + + ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE, NULL); + + 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; + + 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, 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); +} + +/* * [8] 9.5.21 SM Status * Direction: both */ @@ -5806,6 +6143,9 @@ static void (*dtap_msg_sm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *p 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 */ }; @@ -6114,6 +6454,61 @@ proto_register_gsm_a_gm(void) 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, @@ -6159,6 +6554,26 @@ proto_register_gsm_a_gm(void) 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, @@ -6354,9 +6769,9 @@ proto_register_gsm_a_gm(void) 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, @@ -6374,6 +6789,11 @@ proto_register_gsm_a_gm(void) 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, @@ -6389,6 +6809,11 @@ proto_register_gsm_a_gm(void) 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, @@ -6514,4 +6939,5 @@ proto_reg_handoff_gsm_a_gm(void) { 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"); } diff --git a/epan/dissectors/packet-nas_eps.c b/epan/dissectors/packet-nas_eps.c index efe0b22c64..10b183861d 100644 --- a/epan/dissectors/packet-nas_eps.c +++ b/epan/dissectors/packet-nas_eps.c @@ -23,7 +23,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * References: 3GPP TS 24.301 V9.0.0 (2009-09) + * References: 3GPP TS 24.301 V9.6.0 (2011-03) */ #ifdef HAVE_CONFIG_H @@ -77,7 +77,9 @@ static int hf_nas_eps_emm_ebi13 = -1; static int hf_nas_eps_emm_ebi14 = -1; static int hf_nas_eps_emm_ebi15 = -1; static int hf_nas_eps_emm_dl_nas_cnt = -1; -static int hf_nas_eps_emm_nounce_mme = -1; +static int hf_nas_eps_emm_nonce_mme = -1; +static int hf_nas_eps_emm_nonce = -1; +static int hf_nas_eps_emm_paging_id = -1; static int hf_nas_eps_emm_eps_att_type = -1; static int hf_nas_eps_emm_cs_lcs_type = -1; static int hf_nas_eps_emm_epc_lcs_type = -1; @@ -133,7 +135,6 @@ static int hf_nas_eps_emm_uea5 = -1; static int hf_nas_eps_emm_uea6 = -1; static int hf_nas_eps_emm_uea7 = -1; static int hf_nas_eps_emm_ucs2_supp = -1; -static int hf_nas_eps_emm_uia0 = -1; static int hf_nas_eps_emm_uia1 = -1; static int hf_nas_eps_emm_uia2 = -1; static int hf_nas_eps_emm_uia3 = -1; @@ -148,10 +149,14 @@ static int hf_nas_eps_emm_gea4 = -1; static int hf_nas_eps_emm_gea5 = -1; static int hf_nas_eps_emm_gea6 = -1; static int hf_nas_eps_emm_gea7 = -1; +static int hf_nas_eps_emm_lpp_cap = -1; +static int hf_nas_eps_emm_lcs_cap = -1; static int hf_nas_eps_emm_1xsrvcc_cap = -1; +static int hf_nas_eps_emm_nf_cap = -1; static int hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg; static int hf_nas_eps_emm_ss_code = -1; static int hf_nas_eps_emm_lcs_ind = -1; +static int hf_nas_eps_emm_gen_msg_cont_type = -1; static int hf_nas_eps_emm_apn_ambr_ul = -1; static int hf_nas_eps_emm_apn_ambr_dl = -1; static int hf_nas_eps_emm_apn_ambr_ul_ext = -1; @@ -176,6 +181,7 @@ static int hf_nas_eps_egbr_dl = -1; static int hf_nas_eps_esm_cause = -1; static int hf_nas_eps_esm_eit = -1; static int hf_nas_eps_esm_lnkd_eps_bearer_id = -1; +static int hf_nas_eps_esm_notif_ind = -1; static int hf_nas_eps_esm_pdn_type = -1; static int hf_nas_eps_esm_pdn_ipv4 = -1; static int hf_nas_eps_esm_pdn_ipv6_if_id = -1; @@ -291,6 +297,7 @@ static const value_string security_header_type_vals[] = { static value_string_ext security_header_type_vals_ext = VALUE_STRING_EXT_INIT(security_header_type_vals); const value_string nas_eps_common_elem_strings[] = { + { 0x00, "Additional information" }, /* 9.9.2.0 Additional information */ { 0x00, "EPS bearer context status" }, /* 9.9.2.1 EPS bearer context status */ { 0x00, "Location area identification" }, /* 9.9.2.2 Location area identification */ { 0x00, "Mobile identity" }, /* 9.9.2.3 Mobile identity */ @@ -344,6 +351,7 @@ gint ett_nas_eps_common_elem[NUM_NAS_EPS_COMMON_ELEM]; typedef enum { + DE_EPS_CMN_ADD_INFO, /* 9.9.2.0 Additional information */ DE_EPS_CMN_EPS_BE_CTX_STATUS, /* 9.9.2.1 EPS bearer context status */ DE_EPS_CMN_LOC_AREA_ID, /* 9.9.2.2 Location area identification */ DE_EPS_CMN_MOB_ID, /* 9.9.2.3 Mobile identity */ @@ -361,6 +369,15 @@ nas_eps_common_elem_idx_t; * 9.9.2 Common information elements */ +/* 9.9.2.0 Additional information */ +static guint16 +de_eps_cmn_add_info(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_text(tree, tvb, offset, len, "Not dissected yet"); + + return(len); +} + /* * 9.9.2.1 EPS bearer context status */ @@ -417,17 +434,6 @@ de_eps_cmn_eps_be_ctx_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo * 9.9.2.5 Mobile station classmark 3 * See subclause 10.5.1.7 in 3GPP TS 24.008 [13]. */ -/* - * 9.9.2.8 PLMN list - * See subclause 10.5.1.13 in 3GPP TS 24.008 [6]. - */ -/* - * 9.9.2.7 Spare half octet - * This element is used in the description of EMM and ESM messages when an odd number of - * half octet type 1 information elements are used. This element is filled with spare bits - * set to zero and is placed in bits 5 to 8 of the octet unless otherwise specified. - * Coded Inline - */ /* * 9.9.2.6 NAS security parameters from E-UTRA @@ -461,7 +467,7 @@ de_sec_par_to_eutra(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui /* NonceMME value (octet 1 to 5) * This field is coded as the nonce value in the Nonce information element (see subclause 9.9.3.25). */ - proto_tree_add_item(tree, hf_nas_eps_emm_nounce_mme, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_emm_nonce_mme, tvb, curr_offset, 4, ENC_BIG_ENDIAN); curr_offset+=4; /* type of ciphering algorithm (octet 6, bit 5 to 7) * These fields are coded as the type of integrity protection algorithm and type of ciphering algorithm @@ -491,13 +497,26 @@ de_sec_par_to_eutra(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui } /* + * 9.9.2.8 PLMN list + * See subclause 10.5.1.13 in 3GPP TS 24.008 [6]. + */ +/* + * 9.9.2.9 Spare half octet + * This element is used in the description of EMM and ESM messages when an odd number of + * half octet type 1 information elements are used. This element is filled with spare bits + * set to zero and is placed in bits 5 to 8 of the octet unless otherwise specified. + * Coded Inline + */ + +/* * 9.9.2.10 Supported codec list * See subclause 10.5.4.32 in 3GPP TS 24.008 [13]. - * Dissectecd in packet-gsm_a_dtap.c + * Dissected in packet-gsm_a_dtap.c */ guint16 (*nas_eps_common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = { /* 9.9.2 Common information elements */ + de_eps_cmn_add_info, /* 9.9.2.0 Additional information */ de_eps_cmn_eps_be_ctx_status, /* 9.9.2.1 EPS bearer context status */ de_lai, /* 9.9.2.2 Location area identification */ de_mid, /* 9.9.2.3 Mobile identity See subclause 10.5.1.4 in 3GPP TS 24.008*/ @@ -566,7 +585,7 @@ gint ett_nas_eps_emm_elem[NUM_NAS_EMM_ELEM]; #if 0 This enum has been moved to packet-gsm_a_common to -make it possible to use element dissecton from this dissector +make it possible to use element dissection from this dissector in other dissectors. It is left here as a comment for easier reference. @@ -753,6 +772,12 @@ de_emm_csfb_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3 static const value_string nas_eps_emm_switch_off_vals[] = { { 0x0, "Normal detach"}, { 0x1, "Switch off"}, + { 0x2, "Reserved"}, + { 0x3, "Reserved"}, + { 0x4, "Reserved"}, + { 0x5, "Reserved"}, + { 0x6, "Reserved"}, + { 0x7, "Reserved"}, { 0, NULL } }; /* Type of detach (octet 1) @@ -777,8 +802,8 @@ static const value_string nas_eps_emm_type_of_dtatch_DL_vals[] = { { 0x1, "Re-attach required"}, { 0x2, "Re-attach not required"}, { 0x3, "IMSI detach"}, - { 0x4, "IMSI detach"}, /* All other values are interpreted as "re-attach not required" in this version of the protocol.*/ - { 0x5, "IMSI detach"}, /* -"- */ + { 0x4, "Re-attach not required"}, /* All other values are interpreted as "re-attach not required" in this version of the protocol.*/ + { 0x5, "Re-attach not required"}, /* -"- */ { 0x6, "Reserved"}, { 0x7, "Reserved"}, { 0, NULL } @@ -792,7 +817,7 @@ static const value_string nas_eps_emm_type_of_dtatch_DL_vals[] = { * 9.9.3.9 EMM cause */ static const value_string nas_eps_emm_cause_values[] = { - { 0x2, "IMSI unknown in HLR"}, + { 0x2, "IMSI unknown in HSS"}, { 0x3, "Illegal UE"}, { 0x5, "IMEI not accepted"}, { 0x6, "Illegal ME"}, @@ -816,8 +841,7 @@ static const value_string nas_eps_emm_cause_values[] = { { 0x18, "Security mode rejected, unspecified"}, { 0x19, "Not authorized for this CSG"}, { 0x1a, "Non-EPS authentication unacceptable"}, - { 0x26, "CS fallback call establishment not allowed"}, - { 0x27, "CS service temporarily not available"}, + { 0x27, "CS domain temporarily not available"}, { 0x28, "No EPS bearer context activated"}, { 0x5f, "Semantically incorrect message"}, { 0x60, "Invalid mandatory information"}, @@ -1029,8 +1053,12 @@ de_emm_eps_net_feature_sup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _ static const value_string nas_eps_emm_eps_update_result_vals[] = { { 0, "TA updated"}, { 1, "Combined TA/LA updated"}, - { 2, "TA updated and ISR activated"}, - { 3, "Combined TA/LA updated and ISR activated"}, + { 2, "Reserved"}, + { 3, "Reserved"}, + { 4, "TA updated and ISR activated"}, + { 5, "Combined TA/LA updated and ISR activated"}, + { 6, "Reserved"}, + { 7, "Reserved"}, { 0, NULL } }; @@ -1047,8 +1075,10 @@ static const value_string nas_eps_emm_eps_update_type_vals[] = { { 1, "Combined TA/LA updating"}, { 2, "Combined TA/LA updating with IMSI attach"}, { 3, "Periodic updating"}, - { 4, "unused; shall be interpreted as 'TA updating', if received by the network"}, - { 5, "unused; shall be interpreted as 'TA updating', if received by the network"}, + { 4, "Unused; shall be interpreted as 'TA updating', if received by the network"}, + { 5, "Unused; shall be interpreted as 'TA updating', if received by the network"}, + { 6, "Reserved"}, + { 7, "Reserved"}, { 0, NULL } }; @@ -1156,8 +1186,8 @@ de_emm_nas_ksi_and_seq_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U * Type of security context flag (TSC) (octet 1) */ static const value_string nas_eps_tsc_vals[] = { - { 0, "Native security context"}, - { 1, "Mapped security context"}, + { 0, "Native security context (for KSIasme)"}, + { 1, "Mapped security context (for KSIsgsn)"}, { 0, NULL } }; @@ -1297,7 +1327,6 @@ de_emm_nas_sec_alsgs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu */ /* * 9.9.3.25 Nonce - * Editor's note: The coding of this information element is FFS. */ static guint16 de_emm_nonce(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) @@ -1306,15 +1335,19 @@ de_emm_nonce(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 of curr_offset = offset; - - proto_tree_add_text(tree, tvb, curr_offset, 4 , "Nounce"); - curr_offset+=5; + proto_tree_add_item(tree, hf_nas_eps_emm_nonce, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset+=4; return(len); } /* * 9.9.3.25A Paging identity */ + static const true_false_string nas_eps_emm_paging_id_vals = { + "TMSI", + "IMSI" +}; + static guint16 de_emm_paging_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { @@ -1322,8 +1355,8 @@ de_emm_paging_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3 curr_offset = offset; - - proto_tree_add_text(tree, tvb, curr_offset, len , "Paging identity value (Not dissected yet)"); + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, curr_offset<<3, 7, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(tree, hf_nas_eps_emm_paging_id, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN); curr_offset+=len; return(len); @@ -1497,11 +1530,26 @@ static const true_false_string nas_eps_emm_ucs2_supp_flg_value = { "The UE has no preference between the use of the default alphabet and the use of UCS2", "The UE has a preference for the default alphabet" }; +/* LPP capability (octet 7, bit 4) */ +static const true_false_string nas_eps_emm_lpp_cap_flg = { + "LTE Positioning Protocol supported", + "LTE Positioning Protocol not supported" +}; +/* LCS capability (octet 7, bit 3) */ +static const true_false_string nas_eps_emm_lcs_cap_flg = { + "Location services notification mechanisms supported", + "Location services notification mechanisms not supported" +}; /* 1xSRVCC capability (octet 7, bit 2) */ static const true_false_string nas_eps_emm_1xsrvcc_cap_flg = { - "SRVCC from E-UTRAN to cdma2000 1xCS supported", + "SRVCC from E-UTRAN to cdma2000 1xCS supported", "SRVCC from E-UTRAN to cdma2000 1x CS not supported" }; +/* NF capability (octet 7, bit 1) */ +static const true_false_string nas_eps_emm_nf_cap_flg = { + "Notification procedure supported", + "Notification procedure not supported" +}; guint16 de_emm_ue_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) @@ -1604,11 +1652,17 @@ de_emm_ue_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint if ((curr_offset - offset) >= len) return (len); - /* Bits 8 to 3 and bit 1 of octet 7 are spare and shall be coded as zero. */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 6, ENC_BIG_ENDIAN); + /* Bits 8 to 5 of octet 7 are spare and shall be coded as zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN); + /* LPP capability (octet 7, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_lpp_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* LCS capability (octet 7, bit 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_lcs_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); /* 1xSRVCC capability (octet 7, bit 2) */ proto_tree_add_item(tree, hf_nas_eps_emm_1xsrvcc_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN); + /* NF capability (octet 7, bit 1) */ + proto_tree_add_item(tree, hf_nas_eps_emm_nf_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; return(len); } @@ -1644,6 +1698,7 @@ de_emm_ue_sec_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint curr_offset = offset; + /* EPS encryption algorithms supported (octet 3) */ /* EPS encryption algorithm EEA0 supported (octet 3, bit 8) */ proto_tree_add_item(tree, hf_nas_eps_emm_eea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); /* EPS encryption algorithm 128-EEA1 supported (octet 3, bit 7) */ @@ -1689,9 +1744,7 @@ de_emm_ue_sec_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint if(len==2) return(len); - /* UMTS encryption algorithms supported (octet 5) - * UMTS encryption algorithm UEA0 supported (octet 5, bit 8) - */ + /* UMTS encryption algorithms supported (octet 5) */ /* UMTS encryption algorithm UEA0 supported (octet 5, bit 8) */ proto_tree_add_item(tree, hf_nas_eps_emm_uea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); /* UMTS encryption algorithm UEA1 supported (octet 5, bit 7) */ @@ -1710,8 +1763,9 @@ de_emm_ue_sec_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint proto_tree_add_item(tree, hf_nas_eps_emm_uea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); curr_offset++; - /* UMTS integrity algorithm UIA0 supported (octet 6, bit ) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithms supported (octet 6) */ + /* Bit 8 of octet 6 is spare and shall be coded as zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 1, ENC_BIG_ENDIAN); /* UMTS integrity algorithm UIA1 supported (octet 6, bit 7) */ proto_tree_add_item(tree, hf_nas_eps_emm_uia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); /* UMTS integrity algorithm UIA2 supported (octet 6, bit 6) */ @@ -1730,6 +1784,7 @@ de_emm_ue_sec_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint if(len==4) return(len); + /* Bit 8 of octet 7 is spare and shall be coded as zero. */ proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 1, ENC_BIG_ENDIAN); /* GPRS encryption algorithm GEA1 supported (octet 7, bit 7) */ @@ -1833,6 +1888,12 @@ de_emm_lcs_client_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu /* * 9.9.3.42 Generic message container type */ +static const value_string nas_eps_emm_gen_msg_cont_type_vals[] = { + { 0, "Reserved"}, + { 1, "LTE Positioning Protocol (LPP) message container"}, + { 2, "Location services message container "}, + { 0, NULL } +}; static guint16 de_emm_gen_msg_cont_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) @@ -1841,7 +1902,8 @@ de_emm_gen_msg_cont_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ curr_offset = offset; - proto_tree_add_text(tree, tvb, offset, len, "Not dissected yet"); + proto_tree_add_item(tree, hf_nas_eps_emm_gen_msg_cont_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; return(len); } @@ -1851,29 +1913,17 @@ de_emm_gen_msg_cont_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ static guint16 de_emm_gen_msg_cont(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_text(tree, tvb, offset, len, "Not dissected yet"); return(len); } /* * 9.9.3.44 Voice domain preference and UE's usage setting + * See subclause 10.5.5.28 in 3GPP TS 24.008 [13]. + * packet-gsm_a_dtap.c */ -static guint16 -de_emm_gen_voice_dmn_pref(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_text(tree, tvb, offset, len, "Not dissected yet"); - - return(len); -} -/* + /* * 9.9.4 EPS Session Management (ESM) information elements */ @@ -2159,7 +2209,7 @@ static const value_string nas_eps_esm_cause_vals[] = { { 0x24, "Regular deactivation"}, { 0x25, "EPS QoS not accepted"}, { 0x26, "Network failure"}, - { 0x28, "Feature not supported"}, + { 0x27, "Reactivation requested"}, { 0x29, "Semantic error in the TFT operation"}, { 0x2a, "Syntactical error in the TFT operation"}, { 0x2b, "Invalid EPS bearer identity"}, @@ -2262,10 +2312,33 @@ de_esm_lnkd_eps_bearer_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U return(len); } + /* * 9.9.4.7 LLC service access point identifier * See subclause 10.5.6.9 in 3GPP TS 24.008 */ + +/* + * 9.9.4.7a Notification indicator + */ +static const value_string nas_eps_esm_notif_ind_vals[] = { + { 0x0, "Reserved"}, + { 0x1, "SRVCC handover cancelled, IMS session re-establishment required"}, + { 0, NULL } +}; + +static guint16 +de_esm_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_nas_eps_esm_notif_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + + return(len); +} + /* * 9.9.4.8 Packet flow identifier * See subclause 10.5.6.11 in 3GPP TS 24.008 @@ -2330,6 +2403,7 @@ static const value_string nas_eps_esm_pdn_type_values[] = { { 0x1, "IPv4" }, { 0x2, "IPv6" }, { 0x3, "IPv4v6" }, + { 0x4, "Unused; shall be interpreted as IPv6 if received by the network" }, { 0, NULL } }; @@ -2416,7 +2490,7 @@ guint16 (*emm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U de_emm_lcs_client_id, /* 9.9.3.41 LCS client identity */ de_emm_gen_msg_cont_type, /* 9.9.3.42 Generic message container type */ de_emm_gen_msg_cont, /* 9.9.3.43 Generic message container */ - de_emm_gen_voice_dmn_pref, /* 9.9.3.44 Voice domain preference and UE's usage setting */ + NULL, /* 9.9.3.44 Voice domain preference and UE's usage setting */ NULL, /* NONE */ }; @@ -2429,6 +2503,7 @@ const value_string nas_esm_elem_strings[] = { { 0x00, "ESM information transfer flag" }, /* 9.9.4.5 ESM information transfer flag */ { 0x00, "Linked EPS bearer identity" }, /* 9.9.4.6 Linked EPS bearer identity */ { 0x00, "LLC service access point identifier" }, /* 9.9.4.7 LLC service access point identifier */ + { 0x00, "Notification indicator" }, /* 9.9.4.7a Notification indicator */ { 0x00, "Packet flow identifier" }, /* 9.9.4.8 Packet flow identifier */ { 0x00, "PDN address" }, /* 9.9.4.9 PDN address */ { 0x00, "PDN type" }, /* 9.9.4.10 PDN type */ @@ -2455,6 +2530,7 @@ typedef enum DE_ESM_INF_TRF_FLG, /* 9.9.4.5 ESM information transfer flag */ DE_ESM_LNKED_EPS_B_ID, /* 9.9.4.6 Linked EPS bearer identity */ DE_ESM_LLC_SAPI, /* 9.9.4.7 LLC service access point identifier */ + DE_ESM_NOTIF_IND, /* 9.9.4.7a Notification indicator */ DE_ESM_P_FLW_ID, /* 9.9.4.8 Packet flow identifier */ DE_ESM_PDN_ADDR, /* 9.9.4.9 PDN address */ DE_ESM_PDN_TYPE, /* 9.9.4.10 PDN type */ @@ -2478,6 +2554,7 @@ guint16 (*esm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U de_esm_inf_trf_flg, /* 9.9.4.5 ESM information transfer flag */ de_esm_lnkd_eps_bearer_id, /* 9.9.4.6 Linked EPS bearer identity */ NULL, /* 9.9.4.7 LLC service access point identifier */ + de_esm_notif_ind, /* 9.9.4.7a Notification indicator */ NULL, /* 9.9.4.8 Packet flow identifier */ de_esm_pdn_addr, /* 9.9.4.9 PDN address */ NULL, /* 9.9.4.10 PDN type */ @@ -2648,8 +2725,7 @@ nas_emm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin /* F- Additional update type Additional update type 9.9.3.0B O TV 1 */ ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_TYPE, NULL ); /* 5D Voice domain preference and UE's usage setting Voice domain preference and UE's usage setting 9.9.3.44 O TLV 3 */ - /* ELEM_OPT_TLV(0x5D, xxxxxx, xxxxxx, NULL); */ - + ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL); EXTRANEOUS_DATA_CHECK(curr_len, 0); } @@ -3377,7 +3453,7 @@ nas_emm_trac_area_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U /* F- Additional update type Additional update type 9.9.3.0B O TV 1 */ ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_TYPE, NULL ); /* 5D Voice domain preference and UE's usage setting Voice domain preference and UE's usage setting 9.9.3.44 O TLV 3 */ - /* ELEM_OPT_TLV(0x5D, xxxxxx, xxxxxx, NULL); */ + ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL); EXTRANEOUS_DATA_CHECK(curr_len, 0); } @@ -3405,7 +3481,7 @@ nas_emm_ul_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu * 8.2.31 Downlink generic NAS transport */ static void -nas_emm_ul_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) +nas_emm_dl_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { guint32 curr_offset; guint32 consumed; @@ -3415,17 +3491,20 @@ nas_emm_ul_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ curr_len = len; /* Generic message container type Generic message container type 9.9.3.42 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); /* Generic message container Generic message container 9.9.3.43 M LV-E 3-n */ - ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) + ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) /* 65 Additional information Additional information 9.9.2.0 O TLV 3-n */ + ELEM_OPT_TLV(0x65, NAS_PDU_TYPE_EMM, DE_EPS_CMN_ADD_INFO, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.2.32 Uplink generic NAS transport */ static void -nas_emm_dl_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) +nas_emm_ul_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { guint32 curr_offset; guint32 consumed; @@ -3435,11 +3514,13 @@ nas_emm_dl_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ curr_len = len; /* Generic message container type Generic message container type 9.9.3.42 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); /* Generic message container Generic message container 9.9.3.43 M LV-E 3-n */ - ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) + ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) /* 65 Additional information Additional information 9.9.2.0 O TLV 3-n */ + ELEM_OPT_TLV(0x65, NAS_PDU_TYPE_EMM, DE_EPS_CMN_ADD_INFO, NULL); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -3952,13 +4033,16 @@ static void nas_esm_notification(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { guint32 curr_offset; + guint32 consumed; guint curr_len; curr_offset = offset; curr_len = len; /* Notification indicator Notification indicator 9.9.4.7A M LV 2 */ - proto_tree_add_text(tree, tvb, offset, len, "Not dissected yet"); + ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_NOTIF_IND, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4159,8 +4243,8 @@ static void (*nas_msg_emm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *p nas_emm_dl_nas_trans, /* Downlink NAS transport */ nas_emm_ul_nas_trans, /* Uplink NAS transport */ nas_emm_cs_serv_not, /* 8.2.9 CS service notification */ - nas_emm_ul_gen_nas_trans, /* Downlink generic NAS transport */ - nas_emm_dl_gen_nas_trans, /* Uplink generic NAS transport */ + nas_emm_dl_gen_nas_trans, /* Downlink generic NAS transport */ + nas_emm_ul_gen_nas_trans, /* Uplink generic NAS transport */ NULL, /* NONE */ }; @@ -4639,11 +4723,21 @@ void proto_register_nas_eps(void) { FT_UINT8,BASE_DEC, NULL, 0x0f, NULL, HFILL } }, - {&hf_nas_eps_emm_nounce_mme, - { "NonceMME","nas_eps.emm.nounce_mme", + {&hf_nas_eps_emm_nonce_mme, + { "NonceMME","nas_eps.emm.nonce_mme", + FT_UINT32,BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + {&hf_nas_eps_emm_nonce, + { "Nonce","nas_eps.emm.nonce", FT_UINT32,BASE_HEX, NULL, 0x0, NULL, HFILL } }, + { &hf_nas_eps_emm_paging_id, + { "Paging identity value","nas_eps.emm.paging_id", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_paging_id_vals), 0x0, + NULL, HFILL } + }, { &hf_nas_eps_emm_eps_att_type, { "EPS attach type","nas_eps.emm.eps_att_type", FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_att_type_vals), 0x0, @@ -4921,11 +5015,6 @@ void proto_register_nas_eps(void) { FT_BOOLEAN, 8, TFS(&nas_eps_emm_ucs2_supp_flg_value), 0x80, NULL, HFILL } }, - { &hf_nas_eps_emm_uia0, - { "UMTS integrity algorithm UIA0","nas_eps.emm.uia0", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x80, - NULL, HFILL } - }, { &hf_nas_eps_emm_uia1, { "UMTS integrity algorithm UIA1","nas_eps.emm.uia1", FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, @@ -4996,12 +5085,26 @@ void proto_register_nas_eps(void) { FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, NULL, HFILL } }, - + { &hf_nas_eps_emm_lpp_cap, + { "LPP capability","nas_eps.emm.lpp_cap", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_lpp_cap_flg), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_lcs_cap, + { "LCS capability","nas_eps.emm.lcs_cap", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_lcs_cap_flg), 0x04, + NULL, HFILL } + }, { &hf_nas_eps_emm_1xsrvcc_cap, { "1xSRVCC capability","nas_eps.emm.1xsrvcc_cap", FT_BOOLEAN, 8, TFS(&nas_eps_emm_1xsrvcc_cap_flg), 0x02, NULL, HFILL } }, + { &hf_nas_eps_emm_nf_cap, + { "NF capability","nas_eps.emm.nf_cap", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_nf_cap_flg), 0x01, + NULL, HFILL } + }, { &hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg, { "1xSRVCC capability","nas_eps.emm.ue_ra_cap_inf_upd_need_flg", FT_BOOLEAN, 8, TFS(&nas_eps_emm_ue_ra_cap_inf_upd_need_flg), 0x01, @@ -5017,6 +5120,11 @@ void proto_register_nas_eps(void) { FT_UINT8,BASE_DEC, VALS(nas_eps_emm_lcs_ind_vals), 0x0, NULL, HFILL } }, + { &hf_nas_eps_emm_gen_msg_cont_type, + { "Container type","nas_eps.emm.gen_msg_cont_type", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_gen_msg_cont_type_vals), 0x0, + NULL, HFILL } + }, { &hf_nas_eps_emm_apn_ambr_ul, { "APN-AMBR for uplink","nas_eps.emm.apn_ambr_ul", FT_UINT8,BASE_DEC, NULL, 0x0, @@ -5122,6 +5230,11 @@ void proto_register_nas_eps(void) { FT_UINT8,BASE_DEC, VALS(nas_eps_esm_linked_bearer_id_vals), 0x0f, NULL, HFILL } }, + { &hf_nas_eps_esm_notif_ind, + { "Notification indicator value","nas_eps.esm.notif_ind", + FT_UINT8,BASE_DEC, VALS(nas_eps_esm_notif_ind_vals), 0x0, + NULL, HFILL } + }, { &hf_nas_eps_esm_pdn_ipv4, {"PDN IPv4", "nas_eps.esm.pdn_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, |