From 92ef3d0b55a37f042e1ce7e208e7f39cb49b9bce Mon Sep 17 00:00:00 2001 From: Anton Thomasson Date: Fri, 10 Jun 2016 16:12:24 +0200 Subject: [PATCH] GSM RLC/MAC: add dissection of EC-GSM-IoT control messages Change-Id: Ib7096039aa9761fda96ed8552899833597ba70a6 Reviewed-on: https://code.wireshark.org/review/15812 Reviewed-by: Pascal Quantin --- epan/dissectors/packet-gsm_rlcmac.c | 943 +++++++++++++++++++++++++++- epan/dissectors/packet-gsm_rlcmac.h | 399 +++++++++++- 2 files changed, 1306 insertions(+), 36 deletions(-) diff --git a/epan/dissectors/packet-gsm_rlcmac.c b/epan/dissectors/packet-gsm_rlcmac.c index 506d1b15a6..7bec7c6ad3 100644 --- a/epan/dissectors/packet-gsm_rlcmac.c +++ b/epan/dissectors/packet-gsm_rlcmac.c @@ -115,7 +115,9 @@ static int ett_gsm_rlcmac_container = -1; static int hf_usf = -1; static int hf_ul_payload_type = -1; static int hf_dl_payload_type = -1; +static int hf_dl_ec_payload_type = -1; static int hf_rrbp = -1; +static int hf_ec_rrbp = -1; static int hf_s_p = -1; static int hf_es_p = -1; static int hf_fbi = -1; @@ -159,6 +161,8 @@ static int hf_dl_ctrl_rti = -1; static int hf_dl_ctrl_fs = -1; static int hf_dl_ctrl_ac = -1; static int hf_dl_ctrl_pr = -1; +static int hf_dl_ec_ctrl_pr = -1; +static int hf_dl_ec_ctrl_pre = -1; static int hf_dl_ctrl_d = -1; static int hf_dl_ctrl_rbsn_e = -1; @@ -1214,6 +1218,59 @@ static int hf_psi3_additionr99 = -1; static int hf_psi5 = -1; static int hf_psi13 = -1; +/* Fields unique to EC messages (reuse legacy where possible) */ +/*TODO: split exists per message??!? */ +static int hf_ec_dl_message_type = -1; +static int hf_used_dl_coverage_class = -1; +static int hf_ec_frequency_parameters_exist = -1; +static int hf_ec_ma_number = -1; +static int hf_primary_tsc_set = -1; +static int hf_dl_coverage_class = -1; +static int hf_starting_dl_timeslot = -1; +static int hf_timeslot_multiplicator = -1; +static int hf_ul_coverage_class = -1; +static int hf_starting_ul_timeslot_offset = -1; +static int hf_ec_packet_timing_advance_exist = -1; +static int hf_ec_p0_and_pr_mode_exist = -1; +static int hf_ec_gamma_exist = -1; +static int hf_ec_alpha_enable = -1; + +static int hf_ec_acknack_description = -1; +static int hf_ec_delay_next_ul_rlc_data_block = -1; +static int hf_ec_delay_next_ul_rlc_data_block_exist = -1; + +static int hf_ec_bsn_offset_exist = -1; +static int hf_ec_bsn_offset = -1; +static int hf_ec_start_first_ul_rlc_data_block = -1; +static int hf_ec_egprs_channel_coding_command_exist = -1; +static int hf_ec_puan_cc_ts_exist = -1; +static int hf_starting_ul_timeslot = -1; +static int hf_starting_dl_timeslot_offset = -1; +static int hf_ec_puan_exist_contres_tlli = -1; +static int hf_ec_puan_monitor_ec_pacch = -1; +static int hf_t3238 = -1; +static int hf_ec_initial_waiting_time = -1; +static int hf_ec_pacch_monitoring_pattern = -1; +static int hf_ec_puan_fua_dealy_exist = -1; + +static int hf_ec_reject_wait_exist = -1; +static int hf_ec_packet_access_reject_count = -1; + +static int hf_ec_t_avg_t_exist = -1; + +static int hf_ec_uplink_tfi_exist = -1; +static int hf_ec_overlaid_cdma_code = -1; + +static int hf_ec_ul_message_type = -1; +static int hf_ec_dl_cc_est = -1; + +static int hf_ec_channel_request_description_exist = -1; +static int hf_ec_priority = -1; +static int hf_ec_number_of_ul_data_blocks = -1; + +static int hf_ec_channel_quality_report_exist = -1; +static int hf_ec_qual_gmsk_exist = -1; +static int hf_ec_qual_8psk_exist = -1; /* XXX - "exist" fields generated from perl script. If humans think changes are necessary, feel free */ static int hf_packet_downlink_ack_nack_channel_request_description_exist = -1; static int hf_egprs_pd_acknack_egprs_channelqualityreport_exist = -1; @@ -3341,6 +3398,20 @@ CSN_DESCR_BEGIN(Frequency_Parameters_t) M_TYPE (Frequency_Parameters_t, u.Direct_encoding_2, Direct_encoding_2_t), CSN_DESCR_END (Frequency_Parameters_t) +static const +CSN_DESCR_BEGIN(EC_Frequency_Parameters_t) + M_UINT (EC_Frequency_Parameters_t, EC_MA_NUMBER, 5, &hf_ec_ma_number), + M_UINT (EC_Frequency_Parameters_t, TSC, 3, &hf_tsc), + M_UINT (EC_Frequency_Parameters_t, Primary_TSC_Set, 1, &hf_primary_tsc_set), +CSN_DESCR_END (EC_Frequency_Parameters_t) + + +static const +CSN_DESCR_BEGIN(EC_Packet_Timing_Advance_t) + M_UINT (EC_Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6, &hf_timing_advance_value), +CSN_DESCR_END (EC_Packet_Timing_Advance_t) + + static const CSN_DESCR_BEGIN(Packet_Request_Reference_t) M_UINT (Packet_Request_Reference_t, RANDOM_ACCESS_INFORMATION, 11, &hf_packet_request_reference_random_access_information), @@ -3703,15 +3774,15 @@ CSN_DESCR_BEGIN (Packet_Downlink_Assignment_t) M_TYPE (Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t), M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3, &hf_packet_downlink_assignment_p0_and_bts_pwr_ctrl_mode_exist), - M_UINT (Packet_Downlink_Assignment_t, P0, 4, &hf_p0), - M_UINT (Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1, &hf_bts_pwr_ctrl_mode), - M_UINT (Packet_Downlink_Assignment_t, PR_MODE, 1, &hf_pr_mode), + M_UINT (Packet_Downlink_Assignment_t, P0, 4, &hf_p0), + M_UINT (Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1, &hf_bts_pwr_ctrl_mode), + M_UINT (Packet_Downlink_Assignment_t, PR_MODE, 1, &hf_pr_mode), M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Frequency_Parameters, 1, &hf_packet_downlink_assignment_frequency_parameters_exist), M_TYPE (Packet_Downlink_Assignment_t, Frequency_Parameters, Frequency_Parameters_t), M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1, &hf_packet_downlink_assignment_downlink_tfi_assignment_exist), - M_UINT (Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5, &hf_downlink_tfi), + M_UINT (Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5, &hf_downlink_tfi), M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1, &hf_packet_downlink_assignment_power_control_parameters_exist), M_TYPE (Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t), @@ -3730,6 +3801,331 @@ CSN_DESCR_END (Packet_Downlink_Assignment_t) typedef Packet_Downlink_Assignment_t pdlaCheck_t; +static const +CSN_DESCR_BEGIN (EC_Packet_Downlink_Assignment_t) + M_UINT (EC_Packet_Downlink_Assignment_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Downlink_Assignment_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_FIXED (EC_Packet_Downlink_Assignment_t, 1, 0x00, &hf_packet_downlink_id_choice), + M_TYPE (EC_Packet_Downlink_Assignment_t, Global_TFI, Global_TFI_t), + M_UINT (EC_Packet_Downlink_Assignment_t, CONTROL_ACK, 1, &hf_control_ack), + + M_NEXT_EXIST (EC_Packet_Downlink_Assignment_t, Exist_Frequency_Parameters, 1, &hf_ec_frequency_parameters_exist), + M_TYPE (EC_Packet_Downlink_Assignment_t, Frequency_Parameters, EC_Frequency_Parameters_t), + + M_UINT (EC_Packet_Downlink_Assignment_t, DL_COVERAGE_CLASS, 2, &hf_dl_coverage_class), + M_UINT (EC_Packet_Downlink_Assignment_t, STARTING_DL_TIMESLOT, 3, &hf_starting_dl_timeslot), + M_UINT (EC_Packet_Downlink_Assignment_t, TIMESLOT_MULTIPLICATOR, 3, &hf_timeslot_multiplicator), + + M_UINT (EC_Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5, &hf_downlink_tfi), + + M_UINT (EC_Packet_Downlink_Assignment_t, UL_COVERAGE_CLASS, 2, &hf_ul_coverage_class), + M_UINT (EC_Packet_Downlink_Assignment_t, STARTING_UL_TIMESLOT_OFFSET, 2, &hf_starting_ul_timeslot_offset), + + M_NEXT_EXIST (EC_Packet_Downlink_Assignment_t, Exist_EC_Packet_Timing_Advance, 1, &hf_ec_packet_timing_advance_exist), + M_TYPE (EC_Packet_Downlink_Assignment_t, EC_Packet_Timing_Advance, EC_Packet_Timing_Advance_t), + + M_NEXT_EXIST (EC_Packet_Downlink_Assignment_t, Exist_P0_and_PR_MODE, 2, &hf_ec_p0_and_pr_mode_exist), + M_UINT (EC_Packet_Downlink_Assignment_t, P0, 4, &hf_p0), + M_UINT (EC_Packet_Downlink_Assignment_t, PR_MODE, 1, &hf_pr_mode), + + M_NEXT_EXIST (EC_Packet_Downlink_Assignment_t, Exist_GAMMA, 2, &hf_ec_gamma_exist), + M_UINT (EC_Packet_Downlink_Assignment_t, GAMMA, 5, &hf_gamma), + M_UINT (EC_Packet_Downlink_Assignment_t, ALPHA_Enable, 1, &hf_ec_alpha_enable), + + M_PADDING_BITS (EC_Packet_Downlink_Assignment_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Downlink_Assignment_t) + +static const +CSN_DESCR_BEGIN (EC_AckNack_Description_t) + M_UINT (EC_AckNack_Description_t, STARTING_SEQUENCE_NUMBER, 5, &hf_starting_sequence_number), + M_UINT (EC_AckNack_Description_t, RECEIVED_BLOCK_BITMAP, 16, &hf_received_block_bitmap), +CSN_DESCR_END (EC_AckNack_Description_t) + +static const +CSN_DESCR_BEGIN (EC_Primary_AckNack_Description_t) + M_UINT (EC_Primary_AckNack_Description_t, STARTING_SEQUENCE_NUMBER, 5, &hf_starting_sequence_number), + M_UINT (EC_Primary_AckNack_Description_t, RECEIVED_BLOCK_BITMAP, 8, &hf_received_block_bitmap), +CSN_DESCR_END (EC_Primary_AckNack_Description_t) + +static const +CSN_DESCR_BEGIN (EC_Primary_AckNack_Description_TLLI_t) + M_UINT (EC_Primary_AckNack_Description_TLLI_t, CONTENTION_RESOLUTION_TLLI, 32, &hf_tlli), + M_TYPE (EC_Primary_AckNack_Description_TLLI_t, EC_AckNack_Description, EC_Primary_AckNack_Description_t), +CSN_DESCR_END (EC_Primary_AckNack_Description_TLLI_t) + +static const +CSN_DESCR_BEGIN (EC_Primary_AckNack_Description_rTLLI_t) + M_UINT (EC_Primary_AckNack_Description_rTLLI_t, CONTENTION_RESOLUTION_rTLLI, 4, &hf_tlli), + M_TYPE (EC_Primary_AckNack_Description_rTLLI_t, EC_AckNack_Description, EC_Primary_AckNack_Description_t), +CSN_DESCR_END (EC_Primary_AckNack_Description_rTLLI_t) + +static const +CSN_ChoiceElement_t EC_AckNack_Description_Type_Dependent_Contents[] = +{ + {2, 0x00, 0, M_TYPE(EC_Packet_Uplink_Ack_Nack_fai0_t, u.EC_AckNack_Description, EC_AckNack_Description_t)}, + {2, 0x01, 0, M_TYPE(EC_Packet_Uplink_Ack_Nack_fai0_t, u.EC_Primary_AckNack_Description_TLLI, EC_Primary_AckNack_Description_TLLI_t)}, + {2, 0x02, 0, M_TYPE(EC_Packet_Uplink_Ack_Nack_fai0_t, u.EC_Primary_AckNack_Description_rTLLI, EC_Primary_AckNack_Description_rTLLI_t)} +}; + +static const +CSN_DESCR_BEGIN (FUA_Delay_t) + M_NEXT_EXIST (FUA_Delay_t, Exist_DELAY_NEXT_UL_RLC_DATA_BLOCK, 1, &hf_ec_delay_next_ul_rlc_data_block_exist), + M_UINT (FUA_Delay_t, DELAY_NEXT_UL_RLC_DATA_BLOCK, 3, &hf_ec_delay_next_ul_rlc_data_block), +CSN_DESCR_END (FUA_Delay_t) + +static const +CSN_DESCR_BEGIN (PUAN_Fixed_Uplink_Allocation_t) + M_NEXT_EXIST (PUAN_Fixed_Uplink_Allocation_t, Exist_BSN_OFFSET, 1, &hf_ec_bsn_offset_exist), + M_UINT (PUAN_Fixed_Uplink_Allocation_t, BSN_OFFSET, 2, &hf_ec_bsn_offset), + M_UINT (PUAN_Fixed_Uplink_Allocation_t, START_FIRST_UL_RLC_DATA_BLOCK, 4, &hf_ec_start_first_ul_rlc_data_block), + M_REC_TARRAY (PUAN_Fixed_Uplink_Allocation_t, FUA_Delay, FUA_Delay_t, Count_FUA_Delay, &hf_ec_puan_fua_dealy_exist), +CSN_DESCR_END (PUAN_Fixed_Uplink_Allocation_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Uplink_Ack_Nack_fai0_t) + M_CHOICE_IL (EC_Packet_Uplink_Ack_Nack_fai0_t, EC_AckNack_Description_Type, EC_AckNack_Description_Type_Dependent_Contents, ElementsOf(EC_AckNack_Description_Type_Dependent_Contents), &hf_ec_acknack_description), + + M_TYPE (EC_Packet_Uplink_Ack_Nack_fai0_t, PUAN_Fixed_Uplink_Allocation, PUAN_Fixed_Uplink_Allocation_t), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai0_t, RESEGMENT, 1, &hf_resegment), + + M_NEXT_EXIST (EC_Packet_Uplink_Ack_Nack_fai0_t, Exist_EGPRS_Channel_Coding_Command, 1, &hf_ec_egprs_channel_coding_command_exist), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai0_t, EGPRS_Channel_Coding_Command, 4, &hf_egprs_channel_coding_command), + + M_NEXT_EXIST (EC_Packet_Uplink_Ack_Nack_fai0_t, Exist_CC_TS, 5, &hf_ec_puan_cc_ts_exist), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai0_t, UL_COVERAGE_CLASS, 2, &hf_ul_coverage_class), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai0_t, STARTING_UL_TIMESLOT, 3, &hf_starting_ul_timeslot), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai0_t, DL_COVERAGE_CLASS, 2, &hf_dl_coverage_class), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai0_t, STARTING_DL_TIMESLOT_OFFSET, 2, &hf_starting_dl_timeslot_offset), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai0_t, TIMESLOT_MULTIPLICATOR, 3, &hf_timeslot_multiplicator), + +CSN_DESCR_END (EC_Packet_Uplink_Ack_Nack_fai0_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Uplink_Ack_Nack_fai1_t) + M_NEXT_EXIST (EC_Packet_Uplink_Ack_Nack_fai1_t, Exist_CONTENTION_RESOLUTION_TLLI, 1, &hf_ec_puan_exist_contres_tlli), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai1_t, CONTENTION_RESOLUTION_TLLI, 32, &hf_tlli), + + M_NEXT_EXIST (EC_Packet_Uplink_Ack_Nack_fai1_t, Exist_MONITOR_EC_PACCH, 3, &hf_ec_puan_monitor_ec_pacch), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai1_t, T3238, 3, &hf_t3238), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai1_t, Initial_Waiting_Time, 2, &hf_ec_initial_waiting_time), + M_UINT (EC_Packet_Uplink_Ack_Nack_fai1_t, EC_PACCH_Monitoring_Pattern, 2, &hf_ec_pacch_monitoring_pattern), + +CSN_DESCR_END (EC_Packet_Uplink_Ack_Nack_fai1_t) + +static const +CSN_ChoiceElement_t PUAN_FAI_Value_Dependent_Contents[] = +{ + {1, 0x00, 0, M_TYPE(EC_Packet_Uplink_Ack_Nack_t, u.fai0, EC_Packet_Uplink_Ack_Nack_fai0_t)}, + {1, 0x01, 0, M_TYPE(EC_Packet_Uplink_Ack_Nack_t, u.fai1, EC_Packet_Uplink_Ack_Nack_fai1_t)} +}; + +static const +CSN_DESCR_BEGIN (EC_Packet_Uplink_Ack_Nack_t) + M_UINT (EC_Packet_Uplink_Ack_Nack_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Uplink_Ack_Nack_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_UINT (EC_Packet_Uplink_Ack_Nack_t, UPLINK_TFI, 5, &hf_uplink_tfi), + + M_CHOICE_IL (EC_Packet_Uplink_Ack_Nack_t, Final_Ack_Indicator, PUAN_FAI_Value_Dependent_Contents, ElementsOf(PUAN_FAI_Value_Dependent_Contents), &hf_final_ack_indication), + + M_NEXT_EXIST (EC_Packet_Uplink_Ack_Nack_t, Exist_EC_Packet_Timing_Advance, 1, &hf_ec_packet_timing_advance_exist), + M_TYPE (EC_Packet_Uplink_Ack_Nack_t, EC_Packet_Timing_Advance, EC_Packet_Timing_Advance_t), + + M_NEXT_EXIST (EC_Packet_Uplink_Ack_Nack_t, Exist_GAMMA, 2, &hf_ec_gamma_exist), + M_UINT (EC_Packet_Uplink_Ack_Nack_t, GAMMA, 5, &hf_gamma), + M_UINT (EC_Packet_Uplink_Ack_Nack_t, ALPHA_Enable, 1, &hf_ec_alpha_enable), + + + M_PADDING_BITS (EC_Packet_Uplink_Ack_Nack_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Uplink_Ack_Nack_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Polling_Req_t) + M_UINT (EC_Packet_Polling_Req_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Polling_Req_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_FIXED (EC_Packet_Polling_Req_t, 1, 0x00, &hf_packet_downlink_id_choice), + M_TYPE (EC_Packet_Polling_Req_t, Global_TFI, Global_TFI_t), + M_UINT (EC_Packet_Polling_Req_t, TYPE_OF_ACK, 1, &hf_ack_type), + M_PADDING_BITS (EC_Packet_Polling_Req_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Polling_Req_t) + + +static const +CSN_DESCR_BEGIN (EC_Reject_t) + M_UINT (EC_Reject_t, DOWNLINK_TFI, 5, &hf_downlink_tfi), + M_NEXT_EXIST (EC_Reject_t, Exist_Wait, 2, &hf_ec_reject_wait_exist), + M_UINT (EC_Reject_t, WAIT_INDICATION, 8, &hf_reject_wait_indication), + M_UINT (EC_Reject_t, WAIT_INDICATION_SIZE, 1, &hf_reject_wait_indication_size), +CSN_DESCR_END (EC_Reject_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Access_Reject_t) + M_UINT (EC_Packet_Access_Reject_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Access_Reject_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_REC_TARRAY_1 (EC_Packet_Access_Reject_t, Reject, EC_Reject_t, Reject_Count, &hf_ec_packet_access_reject_count), + M_PADDING_BITS (EC_Packet_Access_Reject_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Access_Reject_t) + + +static const +CSN_DESCR_BEGIN (EC_Packet_Downlink_Dummy_Control_Block_t) + M_UINT (EC_Packet_Downlink_Dummy_Control_Block_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Downlink_Dummy_Control_Block_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_PADDING_BITS (EC_Packet_Downlink_Dummy_Control_Block_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Downlink_Dummy_Control_Block_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Power_Control_Timing_Advance_t) + M_UINT (EC_Packet_Power_Control_Timing_Advance_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Power_Control_Timing_Advance_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_TYPE (EC_Packet_Power_Control_Timing_Advance_t, Global_TFI, Global_TFI_t), + + M_NEXT_EXIST (EC_Packet_Power_Control_Timing_Advance_t, Exist_T_AVG_T, 1, &hf_ec_t_avg_t_exist), + M_UINT (EC_Packet_Power_Control_Timing_Advance_t, T_AVG_T, 5, &hf_t_avg_t), + + M_NEXT_EXIST (EC_Packet_Power_Control_Timing_Advance_t, Exist_EC_Packet_Timing_Advance, 1, &hf_ec_packet_timing_advance_exist), + M_TYPE (EC_Packet_Power_Control_Timing_Advance_t, EC_Packet_Timing_Advance, EC_Packet_Timing_Advance_t), + + M_NEXT_EXIST (EC_Packet_Power_Control_Timing_Advance_t, Exist_GAMMA, 1, &hf_ec_gamma_exist), + M_UINT (EC_Packet_Power_Control_Timing_Advance_t, GAMMA, 5, &hf_gamma), + + M_PADDING_BITS (EC_Packet_Power_Control_Timing_Advance_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Power_Control_Timing_Advance_t) + + +static const +CSN_DESCR_BEGIN (EC_Packet_Tbf_Release_t) + M_UINT (EC_Packet_Tbf_Release_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Tbf_Release_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_FIXED (EC_Packet_Tbf_Release_t, 1, 0x00, &hf_packet_downlink_id_choice), + M_TYPE (EC_Packet_Tbf_Release_t, Global_TFI, Global_TFI_t), + + M_UINT (EC_Packet_Tbf_Release_t, TBF_RELEASE_CAUSE, 4, &hf_packetbf_release_tbf_release_cause), + + M_NEXT_EXIST (EC_Packet_Tbf_Release_t, Exist_Wait, 2, &hf_ec_reject_wait_exist), + M_UINT (EC_Packet_Tbf_Release_t, WAIT_INDICATION, 8, &hf_reject_wait_indication), + M_UINT (EC_Packet_Tbf_Release_t, WAIT_INDICATION_SIZE, 1, &hf_reject_wait_indication_size), + + M_PADDING_BITS (EC_Packet_Tbf_Release_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Tbf_Release_t) + + +static const +CSN_DESCR_BEGIN (Fixed_Uplink_Allocation_t) + M_UINT (Fixed_Uplink_Allocation_t, START_FIRST_UL_RLC_DATA_BLOCK, 4, &hf_ec_start_first_ul_rlc_data_block), + M_REC_TARRAY (Fixed_Uplink_Allocation_t, FUA_Delay, FUA_Delay_t, Count_FUA_Delay, &hf_ec_puan_fua_dealy_exist), +CSN_DESCR_END (Fixed_Uplink_Allocation_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Uplink_Assignment_t) + M_UINT (EC_Packet_Uplink_Assignment_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Uplink_Assignment_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + + M_FIXED (EC_Packet_Uplink_Assignment_t, 1, 0x00, &hf_packet_downlink_id_choice), + M_TYPE (EC_Packet_Uplink_Assignment_t, Global_TFI, Global_TFI_t), + + M_NEXT_EXIST (EC_Packet_Uplink_Assignment_t, Exist_UPLINK_TFI_ASSIGNMENT, 1, &hf_ec_uplink_tfi_exist), + M_UINT (EC_Packet_Uplink_Assignment_t, UPLINK_TFI_ASSIGNMENT, 5, &hf_uplink_tfi), + + M_NEXT_EXIST (EC_Packet_Uplink_Assignment_t, Exist_EGPRS_Channel_Coding_Command, 1, &hf_ec_egprs_channel_coding_command_exist), + M_UINT (EC_Packet_Uplink_Assignment_t, EGPRS_Channel_Coding_Command, 4, &hf_egprs_channel_coding_command), + + M_UINT (EC_Packet_Uplink_Assignment_t, Overlaid_CDMA_Code, 2, &hf_ec_overlaid_cdma_code), + + M_NEXT_EXIST (EC_Packet_Uplink_Assignment_t, Exist_EC_Packet_Timing_Advance, 1, &hf_ec_packet_timing_advance_exist), + M_TYPE (EC_Packet_Uplink_Assignment_t, EC_Packet_Timing_Advance, EC_Packet_Timing_Advance_t), + + M_NEXT_EXIST (EC_Packet_Uplink_Assignment_t, Exist_Frequency_Parameters, 1, &hf_ec_frequency_parameters_exist), + M_TYPE (EC_Packet_Uplink_Assignment_t, Frequency_Parameters, EC_Frequency_Parameters_t), + + M_UINT (EC_Packet_Uplink_Assignment_t, UL_COVERAGE_CLASS, 2, &hf_ul_coverage_class), + M_UINT (EC_Packet_Uplink_Assignment_t, STARTING_UL_TIMESLOT, 3, &hf_starting_ul_timeslot), + M_UINT (EC_Packet_Uplink_Assignment_t, TIMESLOT_MULTIPLICATOR, 3, &hf_timeslot_multiplicator), + + M_TYPE (EC_Packet_Uplink_Assignment_t, Fixed_Uplink_Allocation, Fixed_Uplink_Allocation_t), + + M_NEXT_EXIST (EC_Packet_Uplink_Assignment_t, Exist_P0_and_PR_MODE, 2, &hf_ec_p0_and_pr_mode_exist), + M_UINT (EC_Packet_Uplink_Assignment_t, P0, 4, &hf_p0), + M_UINT (EC_Packet_Uplink_Assignment_t, PR_MODE, 1, &hf_pr_mode), + + M_NEXT_EXIST (EC_Packet_Uplink_Assignment_t, Exist_GAMMA, 2, &hf_ec_gamma_exist), + M_UINT (EC_Packet_Uplink_Assignment_t, GAMMA, 5, &hf_gamma), + M_UINT (EC_Packet_Uplink_Assignment_t, ALPHA_Enable, 1, &hf_ec_alpha_enable), + + + M_UINT (EC_Packet_Uplink_Assignment_t, DL_COVERAGE_CLASS, 2, &hf_dl_coverage_class), + M_UINT (EC_Packet_Uplink_Assignment_t, STARTING_DL_TIMESLOT_OFFSET, 2, &hf_starting_dl_timeslot_offset), + + M_PADDING_BITS (EC_Packet_Uplink_Assignment_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Uplink_Assignment_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t) + M_UINT (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, MESSAGE_TYPE, 5, &hf_ec_dl_message_type), + M_UINT (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, USED_DL_COVERAGE_CLASS, 2, &hf_used_dl_coverage_class), + M_UINT (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, UPLINK_TFI, 5, &hf_uplink_tfi), + + M_UINT (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, CONTENTION_RESOLUTION_TLLI, 32, &hf_tlli), + M_TYPE (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, EC_AckNack_Description, EC_Primary_AckNack_Description_t), + M_TYPE (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, PUANCR_Fixed_Uplink_Allocation, Fixed_Uplink_Allocation_t), + M_UINT (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, RESEGMENT, 1, &hf_resegment), + + M_PADDING_BITS (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t) + +static const +CSN_DESCR_BEGIN (EC_Packet_Control_Acknowledgement_t) + M_UINT (EC_Packet_Control_Acknowledgement_t, MESSAGE_TYPE, 5, &hf_ec_ul_message_type), + M_UINT (EC_Packet_Control_Acknowledgement_t, TLLI, 32, &hf_tlli), + M_UINT (EC_Packet_Control_Acknowledgement_t, CTRL_ACK, 2, &hf_packet_control_acknowledgement_ctrl_ack), + M_UINT (EC_Packet_Control_Acknowledgement_t, DL_CC_EST, 4, &hf_ec_dl_cc_est), + M_PADDING_BITS (EC_Packet_Control_Acknowledgement_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Control_Acknowledgement_t) + +static const +CSN_DESCR_BEGIN (EC_Channel_Request_Description_t) + M_UINT (EC_Channel_Request_Description_t, PRIORITY, 1, &hf_ec_priority), + M_UINT (EC_Channel_Request_Description_t, NUMBER_OF_UL_DATA_BLOCKS, 4, &hf_ec_number_of_ul_data_blocks), +CSN_DESCR_END (EC_Channel_Request_Description_t) + +static const +CSN_ChoiceElement_t PDAN_FAI_Value_Dependent_Contents[] = +{ + {1, 0x00, 0, M_TYPE(EC_Packet_Downlink_Ack_Nack_t, EC_AckNack_Description, EC_AckNack_Description_t)}, + {1, 0x01, 1, M_FIXED(EC_Packet_Downlink_Ack_Nack_t,1,0x01,&hf_final_ack_indication)} +}; + +static const +CSN_DESCR_BEGIN (EC_Channel_Quality_Report_t) + M_NEXT_EXIST (EC_Channel_Quality_Report_t, Exist_GMSK, 2, &hf_ec_qual_gmsk_exist), + M_UINT (EC_Channel_Quality_Report_t, GMSK_MEAN_BEP, 5, &hf_egprs_bep_linkqualitymeasurements_mean_bep_gmsk), + M_UINT (EC_Channel_Quality_Report_t, GMSK_CV_BEP, 3, &hf_egprs_bep_linkqualitymeasurements_cv_bep_gmsk), + + M_NEXT_EXIST (EC_Channel_Quality_Report_t, Exist_8PSK, 2, &hf_ec_qual_8psk_exist), + M_UINT (EC_Channel_Quality_Report_t, PSK_MEAN_BEP, 5, &hf_egprs_bep_linkqualitymeasurements_mean_bep_8psk), + M_UINT (EC_Channel_Quality_Report_t, PSK_CV_BEP, 3, &hf_egprs_bep_linkqualitymeasurements_cv_bep_8psk), + + M_UINT (EC_Channel_Quality_Report_t, C_VALUE, 6, &hf_channel_quality_report_c_value), +CSN_DESCR_END (EC_Channel_Quality_Report_t) + + + +static const +CSN_DESCR_BEGIN (EC_Packet_Downlink_Ack_Nack_t) + M_UINT (EC_Packet_Downlink_Ack_Nack_t, MESSAGE_TYPE, 5, &hf_ec_ul_message_type), + M_UINT (EC_Packet_Downlink_Ack_Nack_t, DOWNLINK_TFI, 5, &hf_downlink_tfi), + M_UINT (EC_Packet_Downlink_Ack_Nack_t, MS_OUT_OF_MEMORY, 1, &hf_egprs_pd_acknack_ms_out_of_memory), + M_CHOICE_IL (EC_Packet_Downlink_Ack_Nack_t, Final_Ack_Indicator, PDAN_FAI_Value_Dependent_Contents, ElementsOf(PDAN_FAI_Value_Dependent_Contents), &hf_final_ack_indication), + + M_NEXT_EXIST (EC_Packet_Downlink_Ack_Nack_t, Exist_EC_Channel_Quality_Report, 2, &hf_ec_channel_quality_report_exist), + M_TYPE (EC_Packet_Downlink_Ack_Nack_t, EC_Channel_Quality_Report, EC_Channel_Quality_Report_t), + M_UINT (EC_Packet_Downlink_Ack_Nack_t, DL_CC_EST, 4, &hf_ec_dl_cc_est), + + M_NEXT_EXIST (EC_Packet_Downlink_Ack_Nack_t, Exist_EC_Channel_Request_Description, 1, &hf_ec_channel_request_description_exist), + M_TYPE (EC_Packet_Downlink_Ack_Nack_t, EC_Channel_Request_Description, EC_Channel_Request_Description_t), + + M_PADDING_BITS (EC_Packet_Downlink_Ack_Nack_t, &hf_padding), +CSN_DESCR_END (EC_Packet_Downlink_Ack_Nack_t) + #if 0 static const CSN_DESCR_BEGIN(pdlaCheck_t) @@ -7096,7 +7492,6 @@ CSN_DESCR_BEGIN (DL_Data_Block_EGPRS_Header_Type3_t) M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type3_t, BSN1, bits_spec_dl_type3_bsn, 0, &hf_bsn), CSN_DESCR_END (DL_Data_Block_EGPRS_Header_Type3_t) - static const value_string dl_rlc_message_type_vals[] = { /* {0x00, "Invalid Message Type"}, */ {0x01, "PACKET_CELL_CHANGE_ORDER"}, @@ -7243,6 +7638,11 @@ static const value_string dl_payload_type_vals[] = { {0, NULL } }; +static const value_string dl_ec_payload_type_vals[] = { + {0x00, "RLC/MAC control block, including the normal MAC header"}, + {0x01, "RLC/MAC control block, including the extended MAC header"}, + {0, NULL } +}; static const value_string rrbp_vals[] = { {0x00, "Reserved Block: (N+13) mod 2715648"}, @@ -7252,6 +7652,59 @@ static const value_string rrbp_vals[] = { {0, NULL } }; +static const value_string ec_cc_vals[] = { + {0x00, "Coverage Class 1"}, + {0x01, "Coverage Class 2"}, + {0x02, "Coverage Class 3"}, + {0x03, "Coverage Class 4"}, + {0, NULL } +}; + +static const value_string ec_cc_est_vals[] = { + {0x00, "DL CC 4"}, + {0x01, "DL CC 3"}, + {0x02, "DL CC 2"}, + {0x03, "DL CC 1, < 3dB Over Blind Transmission Threshold"}, + {0x04, "DL CC 1, 3dB - 6dB Over Blind Transmission Threshold"}, + {0x05, "DL CC 1, 6dB - 9dB Over Blind Transmission Threshold"}, + {0x06, "DL CC 1, 9dB - 12dB Over Blind Transmission Threshold"}, + {0x07, "DL CC 1, 12dB - 15dB Over Blind Transmission Threshold"}, + {0x08, "DL CC 1, 15dB - 18dB Over Blind Transmission Threshold"}, + {0x09, "DL CC 1, 18dB - 21dB Over Blind Transmission Threshold"}, + {0x0a, "DL CC 1, 21dB - 24dB Over Blind Transmission Threshold"}, + {0x0b, "DL CC 1, 24dB - 27dB Over Blind Transmission Threshold"}, + {0x0c, "DL CC 1, 27dB - 30dB Over Blind Transmission Threshold"}, + {0x0d, "DL CC 1, 30dB - 33dB Over Blind Transmission Threshold"}, + {0x0e, "DL CC 1, 33dB - 36dB Over Blind Transmission Threshold"}, + {0x0f, "DL CC 1, 36dB - 39dB Over Blind Transmission Threshold"}, + {0, NULL } +}; + +static const value_string ec_dl_rlc_message_type_vals[] = { + {0x01, "EC PACKET_DOWNLINK_ASSIGNMENT"}, + {0x02, "EC PACKET_POLLING_REQ"}, + {0x03, "EC PACKET_POWER_CONTROL_TIMING_ADVANCE"}, + {0x04, "EC PACKET_TBF_RELEASE"}, + {0x05, "EC PACKET_UPLINK_ACK_NACK"}, + {0x06, "EC UPLINK_ASSIGNMENT"}, + {0x07, "EC PACKET_UPLINK_ACK_NACK_AND_CONTENTION_RESOLUTION"}, + {0x11, "EC PACKET_ACCESS_REJECT"}, + {0x12, "EC PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK"}, + {0, NULL } + +}; + +static value_string_ext ec_dl_rlc_message_type_vals_ext = VALUE_STRING_EXT_INIT(ec_dl_rlc_message_type_vals); + +static const value_string ec_ul_rlc_message_type_vals[] = { + {0x01, "EC PACKET_CONTROL_ACKNOWLEDGEMENT"}, + {0x02, "EC PACKET_DOWNLINK_ACK_NACK"}, + {0, NULL } + +}; + +static value_string_ext ec_ul_rlc_message_type_vals_ext = VALUE_STRING_EXT_INIT(ec_ul_rlc_message_type_vals); + static const true_false_string s_p_vals = { "RRBP field is valid", "RRBP field is not valid" @@ -7357,6 +7810,20 @@ static const value_string power_reduction_vals[] = { {0, NULL } }; +static const value_string ec_power_reduction_vals[] = { + {0x00, "0 dB (included) to 3 dB (excluded) less than BCCH level - P0"}, + {0x01, "3 dB (included) to 7 dB (excluded) less than BCCH level - P0"}, + {0, NULL } +}; + +static const value_string ec_power_reduction_ext_vals[] = { + {0x00, "0 dB (included) to 3 dB (excluded) less than BCCH level - P0"}, + {0x01, "3 dB (included) to 7 dB (excluded) less than BCCH level - P0"}, + {0x02, "7 dB (included) to 10 dB (included) less than BCCH level - P0"}, + {0x03, "Reserved"}, + {0, NULL } +}; + static const true_false_string ctrl_d_vals = { "TFI field identifies a downlink TBF", "TFI field identifies an uplink TBF" @@ -8315,6 +8782,141 @@ dissect_egprs_dl_header_block(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre } } +static void +dissect_ul_rlc_ec_control_message(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, RlcMacUplink_t *data) +{ + csnStream_t ar; + proto_item *ti; + proto_tree *rlcmac_tree; + + csnStreamInit(&ar, 0, tvb_reported_length(tvb) << 3, pinfo); + data->u.MESSAGE_TYPE = tvb_get_bits8(tvb, 0, 5); + + col_append_sep_fstr(pinfo->cinfo, COL_INFO, ":", "GPRS UL:%s", val_to_str_ext(data->u.MESSAGE_TYPE, &ec_ul_rlc_message_type_vals_ext, "Unknown Message Type")); + ti = proto_tree_add_protocol_format(tree, proto_gsm_rlcmac, tvb, 0, -1, + "%s (%d) (uplink)", + val_to_str_ext(data->u.MESSAGE_TYPE, &ec_ul_rlc_message_type_vals_ext, "Unknown Message Type... "), + data->u.MESSAGE_TYPE); + rlcmac_tree = proto_item_add_subtree(ti, ett_gsm_rlcmac); + /* Initialize the contexts */ + + + switch (data->u.MESSAGE_TYPE) + { + + case MT_EC_PACKET_CONTROL_ACKNOWLEDGEMENT: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Control_Acknowledgement_t), tvb, &data->u.EC_Packet_Control_Acknowledgement, ett_gsm_rlcmac); + } + break; + case MT_EC_PACKET_DOWNLINK_ACK_NACK: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Downlink_Ack_Nack_t), tvb, &data->u.EC_Packet_Downlink_Ack_Nack, ett_gsm_rlcmac); + } + break; + + default: + /*ret = -1;*/ + break; + } +} + +static void +dissect_dl_rlc_ec_control_message(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, RlcMacDownlink_t *data) +{ + csnStream_t ar; + proto_item *ti; + proto_tree *rlcmac_tree; + guint16 header_bit_offset; + crumb_spec_t crumbs[3]; + + header_bit_offset = tvb_get_bits8(tvb, 1, 1) ? 13 : 5; + csnStreamInit(&ar, header_bit_offset, (tvb_reported_length(tvb) << 3) - header_bit_offset, pinfo); + data->u.MESSAGE_TYPE = tvb_get_bits8(tvb, header_bit_offset, 5); + + col_append_sep_fstr(pinfo->cinfo, COL_INFO, ":", "GPRS DL:%s", val_to_str_ext(data->u.MESSAGE_TYPE, &ec_dl_rlc_message_type_vals_ext, "Unknown Message Type")); + ti = proto_tree_add_protocol_format(tree, proto_gsm_rlcmac, tvb, 0, -1, + "%s (%d) (downlink)", + val_to_str_ext(data->u.MESSAGE_TYPE, &ec_dl_rlc_message_type_vals_ext, "Unknown Message Type... "), + data->u.MESSAGE_TYPE); + rlcmac_tree = proto_item_add_subtree(ti, ett_gsm_rlcmac); + /* Initialize the contexts */ + + if (header_bit_offset == 5) + { + proto_tree_add_bits_item(rlcmac_tree, hf_dl_ec_ctrl_pr, tvb, 0, 1, ENC_BIG_ENDIAN); + } + proto_tree_add_bits_item(rlcmac_tree, hf_dl_ec_payload_type, tvb, 1, 1, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(rlcmac_tree, hf_ec_rrbp, tvb, 2, 2, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(rlcmac_tree, hf_s_p, tvb, 4, 1, ENC_BIG_ENDIAN); + if (header_bit_offset == 13) + { + crumbs[0].crumb_bit_offset = 0; + crumbs[0].crumb_bit_length = 1; + crumbs[1].crumb_bit_offset = 5; + crumbs[1].crumb_bit_length = 1; + crumbs[2].crumb_bit_offset = 0; + crumbs[2].crumb_bit_length = 0; + proto_tree_add_split_bits_item_ret_val(rlcmac_tree, hf_dl_ec_ctrl_pre, tvb, 0, crumbs, NULL); + proto_tree_add_bits_item(rlcmac_tree, hf_dl_ctrl_rbsn, tvb, 6, 1, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(rlcmac_tree, hf_dl_ctrl_fs, tvb, 7, 1, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(rlcmac_tree, hf_downlink_tfi, tvb, 8, 5, ENC_BIG_ENDIAN); + } + + switch (data->u.MESSAGE_TYPE) + { + + case MT_EC_PACKET_ACCESS_REJECT: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Access_Reject_t), tvb, &data->u.EC_Packet_Access_Reject, ett_gsm_rlcmac); + } + break; + case MT_EC_PACKET_DOWNLINK_ASSIGNMENT: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Downlink_Assignment_t), tvb, &data->u.EC_Packet_Downlink_Assignment, ett_gsm_rlcmac); + break; + } + case MT_EC_PACKET_POLLING_REQ: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Polling_Req_t), tvb, &data->u.EC_Packet_Polling_Req, ett_gsm_rlcmac); + break; + } + case MT_EC_PACKET_POWER_CONTROL_TIMING_ADVANCE: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Power_Control_Timing_Advance_t), tvb, &data->u.EC_Packet_Power_Control_Timing_Advance, ett_gsm_rlcmac); + break; + } + case MT_EC_PACKET_TBF_RELEASE: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Tbf_Release_t), tvb, &data->u.EC_Packet_Tbf_Release, ett_gsm_rlcmac); + break; + } + case MT_EC_PACKET_UPLINK_ACK_NACK: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Uplink_Ack_Nack_t), tvb, &data->u.EC_Packet_Uplink_Ack_Nack, ett_gsm_rlcmac); + break; + } + case MT_EC_PACKET_UPLINK_ASSIGNMENT: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Uplink_Assignment_t), tvb, &data->u.EC_Packet_Uplink_Assignment, ett_gsm_rlcmac); + break; + } + case MT_EC_PACKET_UPLINK_ACK_NACK_AND_CONTENTION_RESOLUTION: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t), tvb, &data->u.EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution, ett_gsm_rlcmac); + break; + } + case MT_EC_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK: + { + csnStreamDissector(rlcmac_tree, &ar, CSNDESCR(EC_Packet_Downlink_Dummy_Control_Block_t), tvb, &data->u.EC_Packet_Downlink_Dummy_Control_Block, ett_gsm_rlcmac); + break; + } + default: + /*ret = -1;*/ + break; + } +} + static void dissect_ul_pacch_access_burst(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, RlcMacUplink_t * data) { @@ -8635,7 +9237,11 @@ dissect_gsm_rlcmac_downlink(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, dissect_egprs_dl_header_block(tvb, pinfo, tree, rlc_dl, rlc_mac); } break; - + case RLCMAC_EC_CS1: + { + dissect_dl_rlc_ec_control_message(tvb, pinfo, tree, rlc_dl); + } + break; default: proto_tree_add_expert_format(tree, pinfo, &ei_gsm_rlcmac_coding_scheme_unknown, tvb, 0, -1, "GSM RLCMAC unknown coding scheme (%d)", rlc_dl->block_format); break; @@ -8698,6 +9304,11 @@ dissect_gsm_rlcmac_uplink(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v dissect_egprs_ul_header_block(tvb, pinfo, tree, rlc_ul, rlc_mac); } break; + case RLCMAC_EC_CS1: + { + dissect_ul_rlc_ec_control_message(tvb, pinfo, tree, rlc_ul); + } + break; default: proto_tree_add_expert_format(tree, pinfo, &ei_gsm_rlcmac_coding_scheme_unknown, tvb, 0, -1, "GSM RLCMAC unknown coding scheme (%d)", rlc_ul->block_format); @@ -8835,6 +9446,13 @@ proto_register_gsm_rlcmac(void) NULL, HFILL } }, + { &hf_ec_rrbp, + { "RRBP", + "gsm_rlcmac.rrbp", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, { &hf_s_p, { "S/P", "gsm_rlcmac.s_p", @@ -8905,6 +9523,13 @@ proto_register_gsm_rlcmac(void) NULL, HFILL } }, + { &hf_dl_ec_payload_type, + { "Payload Type (DL)", + "gsm_rlcmac.dl_payload_type", + FT_UINT8, BASE_DEC, VALS(dl_ec_payload_type_vals), 0x0, + NULL, HFILL + } + }, { &hf_ul_payload_type, { "Payload Type (UL)", "gsm_rlcmac.ul_payload_type", @@ -8950,7 +9575,7 @@ proto_register_gsm_rlcmac(void) { &hf_dl_ctrl_rbsn, { "RBSN", "gsm_rlcmac.dl.rbsn", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, + FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, @@ -8982,6 +9607,20 @@ proto_register_gsm_rlcmac(void) NULL, HFILL } }, + { &hf_dl_ec_ctrl_pr, + { "PR", + "gsm_rlcmac.dl.pr", + FT_UINT8, BASE_DEC, VALS(ec_power_reduction_vals), 0x0, + NULL, HFILL + } + }, + { &hf_dl_ec_ctrl_pre, + { "PRe", + "gsm_rlcmac.dl.pre", + FT_UINT8, BASE_DEC, VALS(ec_power_reduction_ext_vals), 0x0, + NULL, HFILL + } + }, { &hf_dl_ctrl_d, { "D", "gsm_rlcmac.dl.d", @@ -16724,6 +17363,296 @@ proto_register_gsm_rlcmac(void) } }, + + { &hf_ec_dl_message_type, + { "MESSAGE_TYPE", "gsm_rlcmac.dl.ec_message_type", + FT_UINT8, BASE_DEC, VALS(ec_dl_rlc_message_type_vals), 0x0, + NULL, HFILL + } + }, + + { &hf_used_dl_coverage_class, + { "USED_DL_COVERAGE_CLASS", "gsm_rlcmac.dl.used_dl_coverage_class", + FT_UINT8, BASE_DEC, VALS(ec_cc_vals), 0x0, + NULL, HFILL + } + }, + { &hf_ec_frequency_parameters_exist, + { "EC_FREQUENCY_PARAMETERS_EXIST", "gsm_rlcmac.dl.ec_frequency_parameters_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_ec_ma_number, + { "EC_MOBILE_ALLOCATION_SET", "gsm_rlcmac.dl.ec_ma_number", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_primary_tsc_set, + { "PRIMARY_TSC_SET", "gsm_rlcmac.dl.primary_tsc_set", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_dl_coverage_class, + { "DL_COVERAGE_CLASS (Assignment)", "gsm_rlcmac.dl.dl_coverage_class", + FT_UINT8, BASE_DEC, VALS(ec_cc_vals), 0x0, + NULL, HFILL + } + }, + { &hf_starting_dl_timeslot, + { "STARTING_DL_TIMESLOT", "gsm_rlcmac.dl.starting_dl_timeslot", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_timeslot_multiplicator, + { "TIMESLOT_MULTIPLICATOR", "gsm_rlcmac.dl.ec_timeslot_multiplicator", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_ul_coverage_class, + { "UL_COVERAGE_CLASS (Assignment)", "gsm_rlcmac.dl.ul_coverage_class", + FT_UINT8, BASE_DEC, VALS(ec_cc_vals), 0x0, + NULL, HFILL + } + }, + { &hf_starting_ul_timeslot_offset, + { "STARTING_UL_TIMESLOT_OFFSET", "gsm_rlcmac.dl.starting_ul_timeslot_offset", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_ec_packet_timing_advance_exist, + { "EC_PACKET_TIMING_ADVANCE Exist", "gsm_rlcmac.dl.ec_packet_timing_advance_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_ec_p0_and_pr_mode_exist, + { "P0_AND_PR_MODE Exist", "gsm_rlcmac.dl.ec_p0_and_pr_mode_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_ec_gamma_exist, + { "GAMMA Exist", "gsm_rlcmac.dl.ec_gamma_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + { &hf_ec_alpha_enable, + { "ALPHA Enable", "gsm_rlcmac.dl.ec_alpha_enable", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_acknack_description, + { "EC_ACKNACK_DESCRIPTION", "gsm_rlcmac.dl.ec_acknack_description", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_delay_next_ul_rlc_data_block, + { "EC_DELAY_NEXT_UL_RLC_DATA_BLOCK", "gsm_rlcmac.dl.ec_delay_next_ul_rlc_data_block", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_delay_next_ul_rlc_data_block_exist, + { "EC_DELAY_NEXT_UL_RLC_DATA_BLOCK_EXIST", "gsm_rlcmac.dl.ec_delay_next_ul_rlc_data_block_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_bsn_offset_exist, + { "EC_BSN_OFFSET Exist", "gsm_rlcmac.dl.ec_bsn_offset_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_bsn_offset, + { "EC_BSN_OFFSET", "gsm_rlcmac.dl.ec_bsn_offset", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_start_first_ul_rlc_data_block, + { "EC_START_FIRST_UL_RLC_DATA_BLOCK", "gsm_rlcmac.dl.ec_start_first_ul_rlc_data_block", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_egprs_channel_coding_command_exist, + { "EC_EGPRS_CHANNEL_CODING_COMMAND_EXIST", "gsm_rlcmac.dl.ec_egprs_channel_coding_command_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_puan_cc_ts_exist, + { "EC_PUAN_CC_TS Exist", "gsm_rlcmac.dl.ec_puan_cc_ts_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_starting_ul_timeslot, + { "STARTING_UL_TIMESLOT", "gsm_rlcmac.dl.starting_ul_timeslot", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_starting_dl_timeslot_offset, + { "STARTING_DL_TIMESLOT_OFFSET", "gsm_rlcmac.dl.starting_dl_timeslot_offset", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_puan_exist_contres_tlli, + { "EC_PUAN_EXIST_CONTRES_TLLI", "gsm_rlcmac.dl.ec_puan_exist_contres_tlli", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_puan_monitor_ec_pacch, + { "EC_PUAN_MONITOR_EC_PACCH", "gsm_rlcmac.dl.ec_puan_monitor_ec_pacch", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_t3238, + { "T3238", "gsm_rlcmac.dl.t3238", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_initial_waiting_time, + { "EC_INITIAL_WAITING_TIME", "gsm_rlcmac.dl.ec_initial_waiting_time", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_pacch_monitoring_pattern, + { "EC_PACCH_MONITORING_PATTERN", "gsm_rlcmac.dl.ec_pacch_monitoring_pattern", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_puan_fua_dealy_exist, + { "EC_PUAN_FUA_DEALY Exist", "gsm_rlcmac.dl.ec_puan_fua_dealy_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_reject_wait_exist, + { "EC_WAIT Exist", "gsm_rlcmac.reject.ec_wait_exist", /* Check this */ + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_packet_access_reject_count, + { "Number of Rejects", "gsm_rlcmac.dl.ec_packet_access_reject_count", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_t_avg_t_exist, + { "EC_T_AVG_T Exist", "gsm_rlcmac.dl.ec_t_avg_t_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_uplink_tfi_exist, + { "EC_UPLINK_TFI Exist", "gsm_rlcmac.dl.ec_uplink_tfi_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_overlaid_cdma_code, + { "EC_OVERLAID_CDMA_CODE", "gsm_rlcmac.dl.ec_overlaid_cdma_code", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_ul_message_type, + { "MESSAGE_TYPE", "gsm_rlcmac.ul.ec_message_type", + FT_UINT8, BASE_DEC, VALS(ec_ul_rlc_message_type_vals), 0x0, + NULL, HFILL + } + }, + + { &hf_ec_dl_cc_est, + { "DL_CC_EST", "gsm_rlcmac.ul.dl_cc_est", + FT_UINT8, BASE_DEC, VALS(ec_cc_est_vals), 0x0, + NULL, HFILL + } + }, + + { &hf_ec_channel_request_description_exist, + { "EC_CHANNEL_REQUEST_DESCRIPTION_EXIST", "gsm_rlcmac.ul.ec_channel_request_description_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_priority, + { "EC_PRIORITY", "gsm_rlcmac.ul.ec_priority", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_number_of_ul_data_blocks, + { "EC_NUMBER_OF_UL_DATA_BLOCKS", "gsm_rlcmac.ul.ec_number_of_ul_data_blocks", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_channel_quality_report_exist, + { "EC_CHANNEL_QUALITY_REPORT Exist", "gsm_rlcmac.ul.ec_channel_quality_report_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_qual_gmsk_exist, + { "EC_QUAL_GMSK Exist", "gsm_rlcmac.ul.ec_qual_gmsk_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + + { &hf_ec_qual_8psk_exist, + { "EC_QUAL_8PSK Exist", "gsm_rlcmac.ul.ec_qual_8psk_exist", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL + } + }, + /* Generated from convert_proto_tree_add_text.pl */ #if 0 { &hf_gsm_rlcmac_scrambling_code, { "Scrambling Code", "gsm_rlcmac.scrambling_code", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, diff --git a/epan/dissectors/packet-gsm_rlcmac.h b/epan/dissectors/packet-gsm_rlcmac.h index feceb6f5bb..3055fa3cf0 100644 --- a/epan/dissectors/packet-gsm_rlcmac.h +++ b/epan/dissectors/packet-gsm_rlcmac.h @@ -4925,6 +4925,8 @@ typedef DL_Data_Block_EGPRS_Header_t DL_Data_Block_EGPRS_Header_Type1_t; typedef DL_Data_Block_EGPRS_Header_t DL_Data_Block_EGPRS_Header_Type2_t; typedef DL_Data_Block_EGPRS_Header_t DL_Data_Block_EGPRS_Header_Type3_t; +typedef DL_Data_Block_EGPRS_Header_t DL_Data_Block_EGPRS_Header_Type1_EC_t; + typedef struct { guint8 TFI; @@ -4946,6 +4948,315 @@ typedef UL_Data_Block_EGPRS_Header_t UL_Data_Block_EGPRS_Header_Type1_t; typedef UL_Data_Block_EGPRS_Header_t UL_Data_Block_EGPRS_Header_Type2_t; typedef UL_Data_Block_EGPRS_Header_t UL_Data_Block_EGPRS_Header_Type3_t; +typedef struct +{ + guint8 DOWNLINK_TFI; + guint8 Exist_Wait; + guint8 WAIT_INDICATION; + guint8 WAIT_INDICATION_SIZE; +} +EC_Reject_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + guint8 Reject_Count; + EC_Reject_t Reject[16]; +} +EC_Packet_Access_Reject_t; + +typedef struct +{ + guint8 EC_MA_NUMBER; + guint8 TSC; + guint8 Primary_TSC_Set; +} +EC_Frequency_Parameters_t; + +typedef struct { + guint8 TIMING_ADVANCE_VALUE; +} EC_Packet_Timing_Advance_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + Global_TFI_t Global_TFI; + guint8 CONTROL_ACK; + + gboolean Exist_Frequency_Parameters; + EC_Frequency_Parameters_t Frequency_Parameters; + + guint8 DL_COVERAGE_CLASS; + guint8 STARTING_DL_TIMESLOT; + guint8 TIMESLOT_MULTIPLICATOR; + guint8 DOWNLINK_TFI_ASSIGNMENT; + guint8 UL_COVERAGE_CLASS; + guint8 STARTING_UL_TIMESLOT_OFFSET; + + gboolean Exist_EC_Packet_Timing_Advance; + EC_Packet_Timing_Advance_t EC_Packet_Timing_Advance; + + gboolean Exist_P0_and_PR_MODE; + guint8 P0; + guint8 PR_MODE; + + gboolean Exist_GAMMA; + guint8 GAMMA; + + guint8 ALPHA_Enable; + +} +EC_Packet_Downlink_Assignment_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + Global_TFI_t Global_TFI; + guint8 TYPE_OF_ACK; +} +EC_Packet_Polling_Req_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + Global_TFI_t Global_TFI; + + gboolean Exist_T_AVG_T; + guint8 T_AVG_T; + + gboolean Exist_EC_Packet_Timing_Advance; + EC_Packet_Timing_Advance_t EC_Packet_Timing_Advance; + + gboolean Exist_GAMMA; + guint8 GAMMA; +} +EC_Packet_Power_Control_Timing_Advance_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + Global_TFI_t Global_TFI; + guint8 TBF_RELEASE_CAUSE; + + guint8 Exist_Wait; + guint8 WAIT_INDICATION; + guint8 WAIT_INDICATION_SIZE; +} +EC_Packet_Tbf_Release_t; + +typedef struct{ + gboolean Exist_DELAY_NEXT_UL_RLC_DATA_BLOCK; + guint8 DELAY_NEXT_UL_RLC_DATA_BLOCK; +} +FUA_Delay_t; + +typedef struct +{ + gboolean Exist_BSN_OFFSET; + guint8 BSN_OFFSET; + guint8 START_FIRST_UL_RLC_DATA_BLOCK; + guint8 Count_FUA_Delay; + FUA_Delay_t FUA_Delay[16]; /* Max RLC window size */ +} +PUAN_Fixed_Uplink_Allocation_t; + +typedef struct{ + guint8 STARTING_SEQUENCE_NUMBER; + guint16 RECEIVED_BLOCK_BITMAP; +} +EC_AckNack_Description_t; + +typedef struct{ + guint8 STARTING_SEQUENCE_NUMBER; + guint8 RECEIVED_BLOCK_BITMAP; +} +EC_Primary_AckNack_Description_t; + +typedef struct{ + guint32 CONTENTION_RESOLUTION_TLLI; + EC_Primary_AckNack_Description_t EC_AckNack_Description; +} +EC_Primary_AckNack_Description_TLLI_t; + +typedef struct{ + guint32 CONTENTION_RESOLUTION_rTLLI; + EC_Primary_AckNack_Description_t EC_AckNack_Description; +} +EC_Primary_AckNack_Description_rTLLI_t; + +typedef struct{ + guint8 EC_AckNack_Description_Type; + union + { + EC_AckNack_Description_t EC_AckNack_Description; + EC_Primary_AckNack_Description_TLLI_t EC_Primary_AckNack_Description_TLLI; + EC_Primary_AckNack_Description_rTLLI_t EC_Primary_AckNack_Description_rTLLI; + } u; + + PUAN_Fixed_Uplink_Allocation_t PUAN_Fixed_Uplink_Allocation; + guint8 RESEGMENT; + + gboolean Exist_EGPRS_Channel_Coding_Command; + guint8 EGPRS_Channel_Coding_Command; + + gboolean Exist_CC_TS; + guint8 UL_COVERAGE_CLASS; + guint8 STARTING_UL_TIMESLOT; + guint8 DL_COVERAGE_CLASS; + guint8 STARTING_DL_TIMESLOT_OFFSET; + guint8 TIMESLOT_MULTIPLICATOR; +} EC_Packet_Uplink_Ack_Nack_fai0_t; +typedef struct{ + gboolean Exist_CONTENTION_RESOLUTION_TLLI; + guint32 CONTENTION_RESOLUTION_TLLI; + + gboolean Exist_MONITOR_EC_PACCH; + guint8 T3238; + guint8 Initial_Waiting_Time; + guint8 EC_PACCH_Monitoring_Pattern; + +} EC_Packet_Uplink_Ack_Nack_fai1_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + guint8 UPLINK_TFI; + guint8 Final_Ack_Indicator; + union + { + EC_Packet_Uplink_Ack_Nack_fai0_t fai0; + EC_Packet_Uplink_Ack_Nack_fai1_t fai1; + } u; + + gboolean Exist_EC_Packet_Timing_Advance; + EC_Packet_Timing_Advance_t EC_Packet_Timing_Advance; + + gboolean Exist_GAMMA; + guint8 GAMMA; + guint8 ALPHA_Enable; +} +EC_Packet_Uplink_Ack_Nack_t; + +typedef struct +{ + guint8 START_FIRST_UL_RLC_DATA_BLOCK; + guint8 Count_FUA_Delay; + FUA_Delay_t FUA_Delay[16]; /* Max RLC window size */ +} +Fixed_Uplink_Allocation_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + Global_TFI_t Global_TFI; + + gboolean Exist_UPLINK_TFI_ASSIGNMENT; + guint8 UPLINK_TFI_ASSIGNMENT; + + gboolean Exist_EGPRS_Channel_Coding_Command; + guint8 EGPRS_Channel_Coding_Command; + + guint8 Overlaid_CDMA_Code; + + gboolean Exist_EC_Packet_Timing_Advance; + EC_Packet_Timing_Advance_t EC_Packet_Timing_Advance; + + gboolean Exist_Frequency_Parameters; + EC_Frequency_Parameters_t Frequency_Parameters; + + guint8 UL_COVERAGE_CLASS; + guint8 STARTING_UL_TIMESLOT; + guint8 TIMESLOT_MULTIPLICATOR; + + Fixed_Uplink_Allocation_t Fixed_Uplink_Allocation; + + gboolean Exist_P0_and_PR_MODE; + guint8 P0; + guint8 PR_MODE; + + gboolean Exist_GAMMA; + guint8 GAMMA; + guint8 ALPHA_Enable; + + guint8 DL_COVERAGE_CLASS; + guint8 STARTING_DL_TIMESLOT_OFFSET; + +} +EC_Packet_Uplink_Assignment_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; + guint8 UPLINK_TFI; + guint32 CONTENTION_RESOLUTION_TLLI; + EC_Primary_AckNack_Description_t EC_AckNack_Description; + + Fixed_Uplink_Allocation_t PUANCR_Fixed_Uplink_Allocation; + guint8 RESEGMENT; +} +EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 USED_DL_COVERAGE_CLASS; +} +EC_Packet_Downlink_Dummy_Control_Block_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint32 TLLI; + guint8 CTRL_ACK; + guint8 DL_CC_EST; +} +EC_Packet_Control_Acknowledgement_t; + +typedef struct +{ + guint8 PRIORITY; + guint8 NUMBER_OF_UL_DATA_BLOCKS; +} +EC_Channel_Request_Description_t; + +typedef struct +{ + gboolean Exist_GMSK; + guint8 GMSK_MEAN_BEP; + guint8 GMSK_CV_BEP; + gboolean Exist_8PSK; + guint8 PSK_MEAN_BEP; + guint8 PSK_CV_BEP; + guint8 C_VALUE; +} +EC_Channel_Quality_Report_t; + +typedef struct +{ + guint8 MESSAGE_TYPE; + guint8 DOWNLINK_TFI; + guint8 MS_OUT_OF_MEMORY; + guint8 Final_Ack_Indicator; + + EC_AckNack_Description_t EC_AckNack_Description; + + gboolean Exist_EC_Channel_Quality_Report; /* DL CC EST is also conditional on this */ + EC_Channel_Quality_Report_t EC_Channel_Quality_Report; + guint8 DL_CC_EST; + + gboolean Exist_EC_Channel_Request_Description; + EC_Channel_Request_Description_t EC_Channel_Request_Description; +} +EC_Packet_Downlink_Ack_Nack_t; + /* < NC Measurement Parameters struct > ::= < NETWORK_CONTROL_ORDER : bit (2) > @@ -5028,6 +5339,21 @@ Table 25 (concluded): PACKET CELL CHANGE ORDER message content #define MT_PACKET_SI_STATUS 0x0D #define MT_ENHANCED_MEASUREMENT_REPORT 0x04 +/* < Downlink EC-GSM-IoT RLC/MAC control messages > */ +#define MT_EC_PACKET_ACCESS_REJECT 0x11 +#define MT_EC_PACKET_DOWNLINK_ASSIGNMENT 0x01 +#define MT_EC_PACKET_POLLING_REQ 0x02 +#define MT_EC_PACKET_POWER_CONTROL_TIMING_ADVANCE 0x03 +#define MT_EC_PACKET_TBF_RELEASE 0x04 +#define MT_EC_PACKET_UPLINK_ACK_NACK 0x05 +#define MT_EC_PACKET_UPLINK_ASSIGNMENT 0x06 +#define MT_EC_PACKET_UPLINK_ACK_NACK_AND_CONTENTION_RESOLUTION 0x07 +#define MT_EC_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK 0x12 + +/* < Uplink EC-GSM-IoT RLC/MAC control messages > */ +#define MT_EC_PACKET_CONTROL_ACKNOWLEDGEMENT 0x01 +#define MT_EC_PACKET_DOWNLINK_ACK_NACK 0x02 + typedef enum { RLCMAC_PRACH = 0x20, @@ -5044,7 +5370,11 @@ typedef enum RLCMAC_HDR_TYPE_7 = 0x37, RLCMAC_HDR_TYPE_8 = 0x38, RLCMAC_HDR_TYPE_9 = 0x39, - RLCMAC_HDR_TYPE_10 = 0x3a + RLCMAC_HDR_TYPE_10 = 0x3a, + RLCMAC_EC_CS1 = 0x40, + RLCMAC_HDR_TYPE_1_EC = 0x41, + RLCMAC_HDR_TYPE_2_EC = 0x42, + RLCMAC_HDR_TYPE_3_EC = 0x43 }RLCMAC_block_format_t; /* < Downlink RLC/MAC control message > */ @@ -5052,34 +5382,43 @@ typedef struct { union { - guint8 MESSAGE_TYPE; - DL_Data_Block_GPRS_t DL_Data_Block_GPRS; - DL_Data_Block_EGPRS_Header_t DL_Data_Block_EGPRS_Header; - Packet_Access_Reject_t Packet_Access_Reject; - Packet_Cell_Change_Order_t Packet_Cell_Change_Order; - Packet_Cell_Change_Continue_t Packet_Cell_Change_Continue; - Packet_Downlink_Assignment_t Packet_Downlink_Assignment; - Packet_Measurement_Order_t Packet_Measurement_Order; - Packet_Neighbour_Cell_Data_t Packet_Neighbour_Cell_Data; - Packet_Serving_Cell_Data_t Packet_Serving_Cell_Data; - Packet_Paging_Request_t Packet_Paging_Request; - Packet_PDCH_Release_t Packet_PDCH_Release; - Packet_Polling_Request_t Packet_Polling_Request; - Packet_Power_Control_Timing_Advance_t Packet_Power_Control_Timing_Advance; - Packet_PRACH_Parameters_t Packet_PRACH_Parameters; - Packet_Queueing_Notification_t Packet_Queueing_Notification; - Packet_Timeslot_Reconfigure_t Packet_Timeslot_Reconfigure; - Packet_TBF_Release_t Packet_TBF_Release; - Packet_Uplink_Ack_Nack_t Packet_Uplink_Ack_Nack; - Packet_Uplink_Assignment_t Packet_Uplink_Assignment; - Packet_Handover_Command_t Packet_Handover_Command; - Packet_PhysicalInformation_t Packet_PhysicalInformation; - Packet_Downlink_Dummy_Control_Block_t Packet_Downlink_Dummy_Control_Block; - PSI1_t PSI1; - PSI2_t PSI2; - PSI3_t PSI3; - PSI5_t PSI5; - PSI13_t PSI13; + guint8 MESSAGE_TYPE; + DL_Data_Block_GPRS_t DL_Data_Block_GPRS; + DL_Data_Block_EGPRS_Header_t DL_Data_Block_EGPRS_Header; + Packet_Access_Reject_t Packet_Access_Reject; + Packet_Cell_Change_Order_t Packet_Cell_Change_Order; + Packet_Cell_Change_Continue_t Packet_Cell_Change_Continue; + Packet_Downlink_Assignment_t Packet_Downlink_Assignment; + Packet_Measurement_Order_t Packet_Measurement_Order; + Packet_Neighbour_Cell_Data_t Packet_Neighbour_Cell_Data; + Packet_Serving_Cell_Data_t Packet_Serving_Cell_Data; + Packet_Paging_Request_t Packet_Paging_Request; + Packet_PDCH_Release_t Packet_PDCH_Release; + Packet_Polling_Request_t Packet_Polling_Request; + Packet_Power_Control_Timing_Advance_t Packet_Power_Control_Timing_Advance; + Packet_PRACH_Parameters_t Packet_PRACH_Parameters; + Packet_Queueing_Notification_t Packet_Queueing_Notification; + Packet_Timeslot_Reconfigure_t Packet_Timeslot_Reconfigure; + Packet_TBF_Release_t Packet_TBF_Release; + Packet_Uplink_Ack_Nack_t Packet_Uplink_Ack_Nack; + Packet_Uplink_Assignment_t Packet_Uplink_Assignment; + Packet_Handover_Command_t Packet_Handover_Command; + Packet_PhysicalInformation_t Packet_PhysicalInformation; + Packet_Downlink_Dummy_Control_Block_t Packet_Downlink_Dummy_Control_Block; + PSI1_t PSI1; + PSI2_t PSI2; + PSI3_t PSI3; + PSI5_t PSI5; + PSI13_t PSI13; + EC_Packet_Access_Reject_t EC_Packet_Access_Reject; + EC_Packet_Downlink_Assignment_t EC_Packet_Downlink_Assignment; + EC_Packet_Polling_Req_t EC_Packet_Polling_Req; + EC_Packet_Power_Control_Timing_Advance_t EC_Packet_Power_Control_Timing_Advance; + EC_Packet_Tbf_Release_t EC_Packet_Tbf_Release; + EC_Packet_Uplink_Ack_Nack_t EC_Packet_Uplink_Ack_Nack; + EC_Packet_Uplink_Assignment_t EC_Packet_Uplink_Assignment; + EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution_t EC_Packet_Uplink_Ack_Nack_And_Contention_Resolution; + EC_Packet_Downlink_Dummy_Control_Block_t EC_Packet_Downlink_Dummy_Control_Block; } u; RLCMAC_block_format_t block_format; @@ -5113,6 +5452,8 @@ typedef struct UL_Packet_Control_Ack_TN_RRBP_11_t UL_Packet_Control_Ack_TN_RRBP_11; UL_Packet_Control_Ack_8_t UL_Packet_Control_Ack_8; UL_Packet_Control_Ack_TN_RRBP_8_t UL_Packet_Control_Ack_TN_RRBP_8; + EC_Packet_Control_Acknowledgement_t EC_Packet_Control_Acknowledgement; + EC_Packet_Downlink_Ack_Nack_t EC_Packet_Downlink_Ack_Nack; } u; RLCMAC_block_format_t block_format; guint flags;