MAC LTE: upgrade dissector to v14.3.0
authorPascal Quantin <pascal.quantin@gmail.com>
Wed, 2 Aug 2017 16:17:19 +0000 (18:17 +0200)
committerPascal Quantin <pascal.quantin@gmail.com>
Wed, 2 Aug 2017 17:34:19 +0000 (17:34 +0000)
Change-Id: Icd3b12b7d89df2050b9365b9b173949a7cdc455a
Reviewed-on: https://code.wireshark.org/review/22928
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
epan/dissectors/packet-gsm_a_rr.c
epan/dissectors/packet-mac-lte.c
epan/tfs.c
epan/tfs.h

index bc8efe5e5520e13750448c3518c4e5cf0b197f66..bb067d3a44625f96e4365d27800ae2377555bf6c 100644 (file)
@@ -1328,7 +1328,7 @@ static const true_false_string tfs_early_r97_version_later_than_r97_version = {"
 static const true_false_string tfs_later_than_r97_version_early_r97_version = {"Later than R97 version", "Early R97 version"};
 static const true_false_string tfs_earlier_version_current_version = {"Earlier version", "Current version"};
 static const true_false_string tfs_downlink_uplink_discriminator_bit = {"Reserved for future use", "EGPRS Packet Uplink Assignment or Multiple blocks Packet Downlink Assignment"};
-static const true_false_string tfs_downlink_uplink = {"Multiple blocks Packet Downlink Assignment", "EGPRS Packet Uplink Assignment"};
+static const true_false_string tfs_downlink_uplink_assign = {"Multiple blocks Packet Downlink Assignment", "EGPRS Packet Uplink Assignment"};
 static const true_false_string tfs_second_part_packet_assignment = {"Second Part Packet Assignment", "Packet Assignment"};
 static const true_false_string tfs_packet_downlink_uplink_assignment = {"Packet Downlink Assignment", "Packet Uplink Assignment"};
 static const true_false_string tfs_shall_be_shall_not_be_used = {"Shall be used", "Shall not be used"};
@@ -14409,7 +14409,7 @@ proto_register_gsm_a_rr(void)
             { &hf_gsm_a_rr_tfi_assignment_present, { "TFI Assignment (etc)", "gsm_a.rr.tfi_assignment.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
             { &hf_gsm_a_rr_pr_mode_present, { "BTS Power Control Mode", "gsm_a.rr.pr_mode.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_fixed_dynamic_allocation), 0x00, NULL, HFILL }},
             { &hf_gsm_a_rr_downlink_uplink_discriminator_bit, { "Discriminator bit", "gsm_a.rr.downlink_uplink_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_downlink_uplink_discriminator_bit), 0x00, NULL, HFILL }},
-            { &hf_gsm_a_rr_downlink_uplink, { "Downlink/Uplink", "gsm_a.rr.downlink_uplink", FT_BOOLEAN, BASE_NONE, TFS(&tfs_downlink_uplink), 0x00, NULL, HFILL }},
+            { &hf_gsm_a_rr_downlink_uplink, { "Downlink/Uplink", "gsm_a.rr.downlink_uplink", FT_BOOLEAN, BASE_NONE, TFS(&tfs_downlink_uplink_assign), 0x00, NULL, HFILL }},
             { &hf_gsm_a_rr_second_packet_assignment_discriminator_bit, { "Discriminator Bit", "gsm_a.rr.second_packet_assignment_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_second_part_packet_assignment), 0x00, NULL, HFILL }},
             { &hf_gsm_a_rr_packet_discriminator_bit, { "Discriminator Bit", "gsm_a.rr.packet_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_packet_downlink_uplink_assignment), 0x00, NULL, HFILL }},
             { &hf_gsm_a_rr_compressed_inter_rat_handover_info, { "A compressed version of the INTER RAT HANDOVER INFO message", "gsm_a.rr.compressed_inter_rat_handover_info", FT_BOOLEAN, BASE_NONE, TFS(&tfs_shall_be_shall_not_be_used), 0x00, NULL, HFILL }},
index f6339e302ef1a49ccb97f548219de0a8243b7e38..857c5d967eb3b5ce105aa7e3bde615ae59fab1b9 100644 (file)
@@ -35,7 +35,7 @@ void proto_reg_handoff_mac_lte(void);
 
 /* Described in:
  * 3GPP TS 36.321 Evolved Universal Terrestrial Radio Access (E-UTRA)
- *                Medium Access Control (MAC) protocol specification v13.5.0
+ *                Medium Access Control (MAC) protocol specification v14.3.0
  */
 
 
@@ -143,6 +143,7 @@ static int hf_mac_lte_slsch_version = -1;
 static int hf_mac_lte_slsch_reserved = -1;
 static int hf_mac_lte_slsch_src_l2_id = -1;
 static int hf_mac_lte_slsch_dst_l2_id = -1;
+static int hf_mac_lte_slsch_dst_l2_id2 = -1;
 static int hf_mac_lte_slsch_reserved2 = -1;
 static int hf_mac_lte_slsch_extended = -1;
 static int hf_mac_lte_slsch_lcid = -1;
@@ -308,9 +309,28 @@ static int hf_mac_lte_control_sidelink_bsr_lcg_id_even = -1;
 static int hf_mac_lte_control_sidelink_bsr_buffer_size_even = -1;
 static int hf_mac_lte_control_sidelink_reserved = -1;
 static int hf_mac_lte_control_data_vol_power_headroom = -1;
-static int hf_mac_lte_data_vol_power_headroom_reserved = -1;
-static int hf_mac_lte_data_vol_power_headroom_level = -1;
-static int hf_mac_lte_data_vol_power_headroom_data_vol = -1;
+static int hf_mac_lte_control_data_vol_power_headroom_reserved = -1;
+static int hf_mac_lte_control_data_vol_power_headroom_level = -1;
+static int hf_mac_lte_control_data_vol_power_headroom_data_vol = -1;
+static int hf_mac_lte_control_recommended_bit_rate = -1;
+static int hf_mac_lte_control_recommended_bit_rate_lcid = -1;
+static int hf_mac_lte_control_recommended_bit_rate_dir = -1;
+static int hf_mac_lte_control_recommended_bit_rate_bit_rate = -1;
+static int hf_mac_lte_control_recommended_bit_rate_reserved = -1;
+static int hf_mac_lte_control_recommended_bit_rate_query = -1;
+static int hf_mac_lte_control_recommended_bit_rate_query_lcid = -1;
+static int hf_mac_lte_control_recommended_bit_rate_query_dir = -1;
+static int hf_mac_lte_control_recommended_bit_rate_query_bit_rate = -1;
+static int hf_mac_lte_control_recommended_bit_rate_query_reserved = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a8 = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a7 = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a6 = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a5 = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a4 = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a3 = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a2 = -1;
+static int hf_mac_lte_control_activation_deactivation_csi_rs_a1 = -1;
 
 static int hf_mac_lte_dl_harq_resend_original_frame = -1;
 static int hf_mac_lte_dl_harq_resend_time_since_previous_frame = -1;
@@ -383,6 +403,9 @@ static int ett_mac_lte_drx_config = -1;
 static int ett_mac_lte_drx_state = -1;
 static int ett_mac_lte_sidelink_bsr = -1;
 static int ett_mac_lte_data_vol_power_headroom = -1;
+static int ett_mac_lte_recommended_bit_rate = -1;
+static int ett_mac_lte_recommended_bit_rate_query = -1;
+static int ett_mac_lte_activation_deactivation_csi_rs = -1;
 
 static expert_field ei_mac_lte_context_rnti_type = EI_INIT;
 static expert_field ei_mac_lte_lcid_unexpected = EI_INIT;
@@ -551,6 +574,9 @@ static const true_false_string mac_lte_scell_status_vals = {
     "Deactivated"
 };
 
+#define ACTIVATION_DEACTIVATION_CSI_RS_LCID    0x15
+#define RECOMMENDED_BIT_RATE_LCID              0x16
+#define SC_PTM_STOP_INDICATION_LCID            0x17
 #define ACTIVATION_DEACTIVATION_4_BYTES_LCID   0x18
 #define SC_MCCH_SC_MTCH_LCID                   0x19
 #define LONG_DRX_COMMAND_LCID                  0x1a
@@ -562,30 +588,35 @@ static const true_false_string mac_lte_scell_status_vals = {
 
 static const value_string dlsch_lcid_vals[] =
 {
-    { 0,                                        "CCCH"},
-    { 1,                                        "1"},
-    { 2,                                        "2"},
-    { 3,                                        "3"},
-    { 4,                                        "4"},
-    { 5,                                        "5"},
-    { 6,                                        "6"},
-    { 7,                                        "7"},
-    { 8,                                        "8"},
-    { 9,                                        "9"},
-    { 10,                                       "10"},
-    { ACTIVATION_DEACTIVATION_4_BYTES_LCID  ,   "Activation/Deactivation"},
-    { SC_MCCH_SC_MTCH_LCID                  ,   "SC-MCCH/SC-MTCH"},
-    { LONG_DRX_COMMAND_LCID                 ,   "Long DRX Command"},
-    { ACTIVATION_DEACTIVATION_LCID          ,   "Activation/Deactivation"},
-    { UE_CONTENTION_RESOLUTION_IDENTITY_LCID,   "UE Contention Resolution Identity"},
-    { TIMING_ADVANCE_LCID                   ,   "Timing Advance"},
-    { DRX_COMMAND_LCID                      ,   "DRX Command"},
-    { PADDING_LCID                          ,   "Padding" },
+    { 0,                                      "CCCH"},
+    { 1,                                      "1"},
+    { 2,                                      "2"},
+    { 3,                                      "3"},
+    { 4,                                      "4"},
+    { 5,                                      "5"},
+    { 6,                                      "6"},
+    { 7,                                      "7"},
+    { 8,                                      "8"},
+    { 9,                                      "9"},
+    { 10,                                     "10"},
+    { ACTIVATION_DEACTIVATION_CSI_RS_LCID,    "Activation/Deactivation of CSI-RS"},
+    { RECOMMENDED_BIT_RATE_LCID,              "Recommended Bit Rate"},
+    { SC_PTM_STOP_INDICATION_LCID,            "SC-PTM Stop Indication"},
+    { ACTIVATION_DEACTIVATION_4_BYTES_LCID,   "Activation/Deactivation"},
+    { SC_MCCH_SC_MTCH_LCID,                   "SC-MCCH/SC-MTCH"},
+    { LONG_DRX_COMMAND_LCID,                  "Long DRX Command"},
+    { ACTIVATION_DEACTIVATION_LCID,           "Activation/Deactivation"},
+    { UE_CONTENTION_RESOLUTION_IDENTITY_LCID, "UE Contention Resolution Identity"},
+    { TIMING_ADVANCE_LCID,                    "Timing Advance"},
+    { DRX_COMMAND_LCID,                       "DRX Command"},
+    { PADDING_LCID,                           "Padding" },
     { 0, NULL }
 };
 
-#define TRUNCATED_SIDELINK_BSR               0x16
-#define SIDELINK_BSR                         0x17
+#define RECOMMENDED_BIT_RATE_QUERY_LCID      0x14
+#define SPS_CONFIRMATION_LCID                0x15
+#define TRUNCATED_SIDELINK_BSR_LCID          0x16
+#define SIDELINK_BSR_LCID                    0x17
 #define DUAL_CONN_POWER_HEADROOM_REPORT_LCID 0x18
 #define EXTENDED_POWER_HEADROOM_REPORT_LCID  0x19
 #define POWER_HEADROOM_REPORT_LCID           0x1a
@@ -609,8 +640,10 @@ static const value_string ulsch_lcid_vals[] =
     { 10,                                   "10"},
     { 11,                                   "CCCH (Category 0)"},
     { 12,                                   "CCCH (frequency hopping for unicast)"},
-    { TRUNCATED_SIDELINK_BSR,               "Truncated Sidelink BSR"},
-    { SIDELINK_BSR,                         "Sidelink BSR"},
+    { RECOMMENDED_BIT_RATE_QUERY_LCID,      "Recommended Bit Rate Query"},
+    { SPS_CONFIRMATION_LCID,                "SPS Confirmation"},
+    { TRUNCATED_SIDELINK_BSR_LCID,          "Truncated Sidelink BSR"},
+    { SIDELINK_BSR_LCID,                    "Sidelink BSR"},
     { DUAL_CONN_POWER_HEADROOM_REPORT_LCID, "Dual Connectivity Power Headroom Report"},
     { EXTENDED_POWER_HEADROOM_REPORT_LCID,  "Extended Power Headroom Report"},
     { POWER_HEADROOM_REPORT_LCID,           "Power Headroom Report"},
@@ -1271,6 +1304,75 @@ static const value_string data_vol_power_headroom_data_vol_vals[] =
     { 0, NULL }
 };
 
+static const value_string bit_rate_vals[] =
+{
+    { 0, "no bit rate recommendation"},
+    { 1, "0 kbit/s"},
+    { 2, "8 kbit/s"},
+    { 3, "10 kbit/s"},
+    { 4, "12 kbit/s"},
+    { 5, "16 kbit/s"},
+    { 6, "20 kbit/s"},
+    { 7, "24 kbit/s"},
+    { 8, "28 kbit/s"},
+    { 9, "32 kbit/s"},
+    { 10, "36 kbit/s"},
+    { 11, "40 kbit/s"},
+    { 12, "48 kbit/s"},
+    { 13, "56 kbit/s"},
+    { 14, "72 kbit/s"},
+    { 15, "88 kbit/s"},
+    { 16, "104 kbit/s"},
+    { 17, "120 kbit/s"},
+    { 18, "140 kbit/s"},
+    { 19, "160 kbit/s"},
+    { 20, "180 kbit/s"},
+    { 21, "200 kbit/s"},
+    { 22, "220 kbit/s"},
+    { 23, "240 kbit/s"},
+    { 24, "260 kbit/s"},
+    { 25, "280 kbit/s"},
+    { 26, "300 kbit/s"},
+    { 27, "350 kbit/s"},
+    { 28, "400 kbit/s"},
+    { 29, "450 kbit/s"},
+    { 30, "500 kbit/s"},
+    { 31, "600 kbit/s"},
+    { 32, "700 kbit/s"},
+    { 33, "800 kbit/s"},
+    { 34, "900 kbit/s"},
+    { 35, "1000 kbit/s"},
+    { 36, "1100 kbit/s"},
+    { 37, "1200 kbit/s"},
+    { 38, "1300 kbit/s"},
+    { 39, "1400 kbit/s"},
+    { 40, "1500 kbit/s"},
+    { 41, "1750 kbit/s"},
+    { 42, "2000 kbit/s"},
+    { 43, "2250 kbit/s"},
+    { 44, "2500 kbit/s"},
+    { 45, "2750 kbit/s"},
+    { 46, "3000 kbit/s"},
+    { 47, "3500 kbit/s"},
+    { 48, "4000 kbit/s"},
+    { 49, "4500 kbit/s"},
+    { 50, "5000 kbit/s"},
+    { 51, "5500 kbit/s"},
+    { 52, "6000 kbit/s"},
+    { 53, "6500 kbit/s"},
+    { 54, "7000 kbit/s"},
+    { 55, "7500 kbit/s"},
+    { 56, "8000 kbit/s"},
+    { 0, NULL }
+};
+static value_string_ext bit_rate_vals_ext = VALUE_STRING_EXT_INIT(bit_rate_vals);
+
+static const true_false_string activated_deactivated_vals =
+{
+    "Activated",
+    "Deactivated"
+};
+
 static const value_string header_only_vals[] =
 {
     { 0,      "MAC PDU Headers and body present"},
@@ -3326,6 +3428,8 @@ static int is_fixed_sized_control_element(guint8 lcid, guint8 direction)
     if (direction == DIRECTION_UPLINK) {
         /* Uplink */
         switch (lcid) {
+            case RECOMMENDED_BIT_RATE_QUERY_LCID:
+            case SPS_CONFIRMATION_LCID:
             case POWER_HEADROOM_REPORT_LCID:
             case CRNTI_LCID:
             case TRUNCATED_BSR_LCID:
@@ -3340,12 +3444,14 @@ static int is_fixed_sized_control_element(guint8 lcid, guint8 direction)
     else {
         /* Assume Downlink */
         switch (lcid) {
+            case RECOMMENDED_BIT_RATE_LCID:
+            case SC_PTM_STOP_INDICATION_LCID:
             case ACTIVATION_DEACTIVATION_4_BYTES_LCID:
+            case LONG_DRX_COMMAND_LCID:
             case ACTIVATION_DEACTIVATION_LCID:
             case UE_CONTENTION_RESOLUTION_IDENTITY_LCID:
             case TIMING_ADVANCE_LCID:
             case DRX_COMMAND_LCID:
-            case LONG_DRX_COMMAND_LCID:
                 return TRUE;
 
             default:
@@ -4628,6 +4734,76 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
             /****************************/
             /* DL-SCH Control PDUs      */
             switch (lcids[n]) {
+                case ACTIVATION_DEACTIVATION_CSI_RS_LCID:
+                    {
+                        proto_item *ad_csi_rs_ti;
+                        proto_tree *ad_csi_rs_tree;
+                        gint32 i;
+
+                        if (pdu_lengths[n] == -1) {
+                            /* Control Element size is the remaining PDU */
+                            pdu_lengths[n] = (gint32)tvb_reported_length_remaining(tvb, offset);
+                        }
+                        /* Create AD CSR-RS root */
+                        ad_csi_rs_ti = proto_tree_add_string_format(tree,
+                                                                    hf_mac_lte_control_activation_deactivation_csi_rs,
+                                                                    tvb, offset, pdu_lengths[n],
+                                                                    "",
+                                                                    "Activation/Deactivation of CSI-RS");
+                        ad_csi_rs_tree = proto_item_add_subtree(ad_csi_rs_ti, ett_mac_lte_activation_deactivation_csi_rs);
+
+                        for (i = 0; i < pdu_lengths[n]; i++) {
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a8,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a7,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a6,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a5,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a4,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a3,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a2,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            proto_tree_add_item(ad_csi_rs_tree, hf_mac_lte_control_activation_deactivation_csi_rs_a1,
+                                                tvb, offset, 1, ENC_BIG_ENDIAN);
+                            offset += 1;
+                        }
+                    }
+                    break;
+                case RECOMMENDED_BIT_RATE_LCID:
+                    {
+                        proto_item *br_ti;
+                        proto_tree *br_tree;
+                        proto_item *ti;
+                        guint32 reserved;
+
+                        /* Create BR root */
+                        br_ti = proto_tree_add_string_format(tree,
+                                                             hf_mac_lte_control_recommended_bit_rate,
+                                                             tvb, offset, 2,
+                                                             "",
+                                                             "Recommended Bit Rate");
+                        br_tree = proto_item_add_subtree(br_ti, ett_mac_lte_recommended_bit_rate);
+
+                        proto_tree_add_item(br_tree, hf_mac_lte_control_recommended_bit_rate_lcid,
+                                            tvb, offset, 1, ENC_BIG_ENDIAN);
+                        proto_tree_add_item(br_tree, hf_mac_lte_control_recommended_bit_rate_dir,
+                                            tvb, offset, 1, ENC_BIG_ENDIAN);
+                        proto_tree_add_item(br_tree, hf_mac_lte_control_recommended_bit_rate_bit_rate,
+                                            tvb, offset, 2, ENC_BIG_ENDIAN);
+                        offset += 1;
+                        ti = proto_tree_add_item_ret_uint(br_tree, hf_mac_lte_control_recommended_bit_rate_reserved,
+                                                          tvb, offset, 1, ENC_BIG_ENDIAN, &reserved);
+                        if (reserved != 0) {
+                            expert_add_info_format(pinfo, ti, &ei_mac_lte_reserved_not_zero,
+                                                   "Recommended Bit Rate Reserved bits not zero");
+                        }
+                        offset += 1;
+                    }
+                    break;
                 case ACTIVATION_DEACTIVATION_LCID:
                 case ACTIVATION_DEACTIVATION_4_BYTES_LCID:
                     {
@@ -4639,7 +4815,8 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
                         /* Create AD root */
                         ad_ti = proto_tree_add_string_format(tree,
                                                              hf_mac_lte_control_activation_deactivation,
-                                                             tvb, offset, 1,
+                                                             tvb, offset,
+                                                             (lcids[n] == ACTIVATION_DEACTIVATION_4_BYTES_LCID) ? 4 : 1,
                                                              "",
                                                              "Activation/Deactivation");
                         ad_tree = proto_item_add_subtree(ad_ti, ett_mac_lte_activation_deactivation);
@@ -4878,8 +5055,39 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
             /**********************************/
             /* UL-SCH Control PDUs            */
             switch (lcids[n]) {
-                case TRUNCATED_SIDELINK_BSR:
-                case SIDELINK_BSR:
+                case RECOMMENDED_BIT_RATE_QUERY_LCID:
+                    {
+                        proto_item *br_ti;
+                        proto_tree *br_tree;
+                        proto_item *ti;
+                        guint32 reserved;
+
+                        /* Create BR root */
+                        br_ti = proto_tree_add_string_format(tree,
+                                                             hf_mac_lte_control_recommended_bit_rate_query,
+                                                             tvb, offset, 2,
+                                                             "",
+                                                             "Recommended Bit Rate Query");
+                        br_tree = proto_item_add_subtree(br_ti, ett_mac_lte_recommended_bit_rate_query);
+
+                        proto_tree_add_item(br_tree, hf_mac_lte_control_recommended_bit_rate_query_lcid,
+                                            tvb, offset, 1, ENC_BIG_ENDIAN);
+                        proto_tree_add_item(br_tree, hf_mac_lte_control_recommended_bit_rate_query_dir,
+                                            tvb, offset, 1, ENC_BIG_ENDIAN);
+                        proto_tree_add_item(br_tree, hf_mac_lte_control_recommended_bit_rate_query_bit_rate,
+                                            tvb, offset, 2, ENC_BIG_ENDIAN);
+                        offset += 1;
+                        ti = proto_tree_add_item_ret_uint(br_tree, hf_mac_lte_control_recommended_bit_rate_query_reserved,
+                                                          tvb, offset, 1, ENC_BIG_ENDIAN, &reserved);
+                        if (reserved != 0) {
+                            expert_add_info_format(pinfo, ti, &ei_mac_lte_reserved_not_zero,
+                                                   "Recommended Bit Rate Reserved bits not zero");
+                        }
+                        offset += 1;
+                    }
+                    break;
+                case TRUNCATED_SIDELINK_BSR_LCID:
+                case SIDELINK_BSR_LCID:
                     {
                         proto_item *slbsr_ti;
                         proto_tree *slbsr_tree;
@@ -4890,7 +5098,7 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
                             pdu_lengths[n] = (gint32)tvb_reported_length_remaining(tvb, curr_offset);
                         }
                         /* Create SLBSR root */
-                        if (lcids[n] == SIDELINK_BSR) {
+                        if (lcids[n] == SIDELINK_BSR_LCID) {
                             slbsr_ti = proto_tree_add_string_format(tree,
                                                                     hf_mac_lte_control_sidelink_bsr,
                                                                     tvb, curr_offset, pdu_lengths[n],
@@ -4930,7 +5138,7 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
                                 it = proto_tree_add_item_ret_uint(slbsr_tree, hf_mac_lte_control_sidelink_reserved,
                                                                   tvb, curr_offset, 1, ENC_BIG_ENDIAN, &reserved);
                                 if (reserved) {
-                                    if (lcids[n] == SIDELINK_BSR) {
+                                    if (lcids[n] == SIDELINK_BSR_LCID) {
                                         expert_add_info_format(pinfo, it, &ei_mac_lte_reserved_not_zero,
                                                                "Sidelink BSR Reserved bits not zero");
                                     } else {
@@ -5621,14 +5829,14 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
                                       "",
                                       "Data Volume and Power Headroom Report");
             dpr_tree = proto_item_add_subtree(dpr_ti, ett_mac_lte_data_vol_power_headroom);
-            dpr_ti = proto_tree_add_item_ret_uint(dpr_tree, hf_mac_lte_data_vol_power_headroom_reserved,
+            dpr_ti = proto_tree_add_item_ret_uint(dpr_tree, hf_mac_lte_control_data_vol_power_headroom_reserved,
                                                   tvb, offset, 1, ENC_BIG_ENDIAN, &reserved);
             if (reserved) {
                 expert_add_info_format(pinfo, dpr_ti, &ei_mac_lte_reserved_not_zero,
                                        "Data Volume and Power Headroom Report Reserved bits not zero");
             }
-            proto_tree_add_item(dpr_tree, hf_mac_lte_data_vol_power_headroom_level, tvb, offset, 1, ENC_BIG_ENDIAN);
-            proto_tree_add_item(dpr_tree, hf_mac_lte_data_vol_power_headroom_data_vol, tvb, offset, 1, ENC_BIG_ENDIAN);
+            proto_tree_add_item(dpr_tree, hf_mac_lte_control_data_vol_power_headroom_level, tvb, offset, 1, ENC_BIG_ENDIAN);
+            proto_tree_add_item(dpr_tree, hf_mac_lte_control_data_vol_power_headroom_data_vol, tvb, offset, 1, ENC_BIG_ENDIAN);
             offset++;
             data_length--;
             if (pdu_lengths[n] != -1) {
@@ -6334,7 +6542,7 @@ static void dissect_slsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
     guint8   number_of_padding_subheaders = 0;
     gboolean expecting_body_data = FALSE;
     gboolean is_truncated;
-    guint32  reserved;
+    guint32  reserved, version;
 
     write_pdu_label_and_info(pdu_ti, NULL, pinfo,
                              "%s: (SFN=%-4u, SF=%u) UEId=%-3u ",
@@ -6358,8 +6566,8 @@ static void dissect_slsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
                                                     "Sub-header (SL-SCH)");
     pdu_subheader_tree = proto_item_add_subtree(pdu_subheader_ti,
                                                 ett_mac_lte_slsch_subheader);
-    proto_tree_add_item(pdu_subheader_tree, hf_mac_lte_slsch_version,
-                        tvb, offset, 1, ENC_BIG_ENDIAN);
+    proto_tree_add_item_ret_uint(pdu_subheader_tree, hf_mac_lte_slsch_version,
+                                 tvb, offset, 1, ENC_BIG_ENDIAN, &version);
     ti = proto_tree_add_item_ret_uint(pdu_subheader_tree, hf_mac_lte_slsch_reserved,
                                       tvb, offset, 1, ENC_BIG_ENDIAN, &reserved);
     offset++;
@@ -6370,9 +6578,15 @@ static void dissect_slsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
     proto_tree_add_item(pdu_subheader_tree, hf_mac_lte_slsch_src_l2_id,
                         tvb, offset, 3, ENC_BIG_ENDIAN);
     offset += 3;
-    proto_tree_add_item(pdu_subheader_tree, hf_mac_lte_slsch_dst_l2_id,
-                        tvb, offset, 2, ENC_BIG_ENDIAN);
-    offset += 2;
+    if (version == 3) {
+        proto_tree_add_item(pdu_subheader_tree, hf_mac_lte_slsch_dst_l2_id2,
+                            tvb, offset, 3, ENC_BIG_ENDIAN);
+        offset += 3;
+    } else {
+        proto_tree_add_item(pdu_subheader_tree, hf_mac_lte_slsch_dst_l2_id,
+                            tvb, offset, 2, ENC_BIG_ENDIAN);
+        offset += 2;
+    }
 
     /* Dissect each sub-header */
     do {
@@ -7895,6 +8109,12 @@ void proto_register_mac_lte(void)
               NULL, HFILL
             }
         },
+        { &hf_mac_lte_slsch_dst_l2_id2,
+            { "Destination Layer-2 ID",
+              "mac-lte.slsch.dst-l2-id", FT_UINT24, BASE_HEX, NULL, 0x0,
+              NULL, HFILL
+            }
+        },
         { &hf_mac_lte_slsch_reserved2,
             { "Reserved bits",
               "mac-lte.slsch.reserved", FT_UINT8, BASE_HEX, NULL, 0xc0,
@@ -8856,25 +9076,142 @@ void proto_register_mac_lte(void)
               NULL, HFILL
             }
         },
-        { &hf_mac_lte_data_vol_power_headroom_reserved,
+        { &hf_mac_lte_control_data_vol_power_headroom_reserved,
             { "Reserved",
               "mac-lte.control.data-vol-power-headroom.reserved", FT_UINT8, BASE_DEC,
               NULL, 0xc0, "Reserved bits, should be 0", HFILL
             }
         },
-        { &hf_mac_lte_data_vol_power_headroom_level,
+        { &hf_mac_lte_control_data_vol_power_headroom_level,
             { "Power Headroom Level",
               "mac-lte.control.data-vol-power-headroom.level", FT_UINT8, BASE_DEC,
               VALS(data_vol_power_headroom_level_vals), 0x30, NULL, HFILL
             }
         },
-        { &hf_mac_lte_data_vol_power_headroom_data_vol,
+        { &hf_mac_lte_control_data_vol_power_headroom_data_vol,
             { "Data Volume",
               "mac-lte.control.data-vol-power-headroom.data-vol", FT_UINT8, BASE_DEC,
               VALS(data_vol_power_headroom_data_vol_vals), 0x0f, NULL, HFILL
             }
         },
 
+        { &hf_mac_lte_control_recommended_bit_rate,
+            { "Recommended Bit Rate",
+              "mac-lte.control.recommended-bit-rate", FT_STRING, BASE_NONE,
+              NULL, 0x0, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_lcid,
+            { "LCID",
+              "mac-lte.control.recommended-bit-rate.lcid", FT_UINT8, BASE_DEC,
+              NULL, 0xf0, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_dir,
+            { "Direction",
+              "mac-lte.control.recommended-bit-rate.dir", FT_BOOLEAN, 8,
+              TFS(&tfs_uplink_downlink), 0x08, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_bit_rate,
+            { "Bit Rate",
+              "mac-lte.control.recommended-bit-rate.bit-rate", FT_UINT16, BASE_DEC|BASE_EXT_STRING,
+              &bit_rate_vals_ext, 0x07e0, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_reserved,
+            { "Reserved",
+              "mac-lte.control.recommended-bit-rate.reserved", FT_UINT8, BASE_HEX,
+              NULL, 0x1f, "Reserved bits, should be 0", HFILL
+            }
+        },
+
+        { &hf_mac_lte_control_recommended_bit_rate_query,
+            { "Recommended Bit Rate Query",
+              "mac-lte.control.recommended-bit-rate-query", FT_STRING, BASE_NONE,
+              NULL, 0x0, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_query_lcid,
+            { "LCID",
+              "mac-lte.control.recommended-bit-rate-query.lcid", FT_UINT8, BASE_DEC,
+              NULL, 0xf0, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_query_dir,
+            { "Direction",
+              "mac-lte.control.recommended-bit-rate-query.dir", FT_BOOLEAN, 8,
+              TFS(&tfs_uplink_downlink), 0x08, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_query_bit_rate,
+            { "Bit Rate",
+              "mac-lte.control.recommended-bit-rate-query.bit-rate", FT_UINT16, BASE_DEC|BASE_EXT_STRING,
+              &bit_rate_vals_ext, 0x07e0, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_recommended_bit_rate_query_reserved,
+            { "Reserved",
+              "mac-lte.control.recommended-bit-rate-query.reserved", FT_UINT8, BASE_HEX,
+              NULL, 0x1f, "Reserved bits, should be 0", HFILL
+            }
+        },
+
+        { &hf_mac_lte_control_activation_deactivation_csi_rs,
+            { "Activation/Deactivation of CSI-RS",
+              "mac-lte.control.activation-deactivation-csi-rs", FT_STRING, BASE_NONE,
+              NULL, 0x0, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a8,
+            { "CSI-RS Resource Index 8",
+              "mac-lte.control.activation-deactivation-csi-rs.a8", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x80, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a7,
+            { "CSI-RS Resource Index 7",
+              "mac-lte.control.activation-deactivation-csi-rs.a7", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x40, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a6,
+            { "CSI-RS Resource Index 6",
+              "mac-lte.control.activation-deactivation-csi-rs.a6", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x20, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a5,
+            { "CSI-RS Resource Index 5",
+              "mac-lte.control.activation-deactivation-csi-rs.a5", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x10, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a4,
+            { "CSI-RS Resource Index 4",
+              "mac-lte.control.activation-deactivation-csi-rs.a4", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x08, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a3,
+            { "CSI-RS Resource Index 3",
+              "mac-lte.control.activation-deactivation-csi-rs.a3", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x04, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a2,
+            { "CSI-RS Resource Index 2",
+              "mac-lte.control.activation-deactivation-csi-rs.a2", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x02, NULL, HFILL
+            }
+        },
+        { &hf_mac_lte_control_activation_deactivation_csi_rs_a1,
+            { "CSI-RS Resource Index 1",
+              "mac-lte.control.activation-deactivation-csi-rs.a1", FT_BOOLEAN, 8,
+              TFS(&activated_deactivated_vals), 0x01, NULL, HFILL
+            }
+        },
+
         /* Generated fields */
         { &hf_mac_lte_dl_harq_resend_original_frame,
             { "Frame with previous tx",
@@ -9106,7 +9443,10 @@ void proto_register_mac_lte(void)
         &ett_mac_lte_drx_config,
         &ett_mac_lte_drx_state,
         &ett_mac_lte_sidelink_bsr,
-        &ett_mac_lte_data_vol_power_headroom
+        &ett_mac_lte_data_vol_power_headroom,
+        &ett_mac_lte_recommended_bit_rate,
+        &ett_mac_lte_recommended_bit_rate_query,
+        &ett_mac_lte_activation_deactivation_csi_rs
     };
 
     static ei_register_info ei[] = {
index 45edce38e34ecc9bc446625fed075235f83e0a23..86fdbcf05df5ec39a9a24ed96599db37ad9596dd 100644 (file)
@@ -97,6 +97,8 @@ const true_false_string tfs_preferred_no_preference = { "Preferred", "No prefere
 const true_false_string tfs_encrypt_do_not_encrypt = { "Encrypt", "Do Not Encrypt" };
 const true_false_string tfs_down_up = { "Down", "Up" };
 const true_false_string tfs_up_down = { "Up", "Down" };
+const true_false_string tfs_downlink_uplink = { "Downlink", "Uplink" };
+const true_false_string tfs_uplink_downlink = { "Uplink", "Downlink" };
 const true_false_string tfs_s2c_c2s = { "Server to Client", "Client to Server" };
 const true_false_string tfs_c2s_s2c = { "Client to Server", "Server to Client" };
 const true_false_string tfs_open_closed = { "Open", "Closed" };
index 0ade256279de74ebba801b010971f1551580da81..2426f1939443aca4a0f1e4987fb5c3f5687512db 100644 (file)
@@ -112,6 +112,8 @@ WS_DLL_PUBLIC const true_false_string tfs_preferred_no_preference;
 WS_DLL_PUBLIC const true_false_string tfs_encrypt_do_not_encrypt;
 WS_DLL_PUBLIC const true_false_string tfs_down_up;
 WS_DLL_PUBLIC const true_false_string tfs_up_down;
+WS_DLL_PUBLIC const true_false_string tfs_downlink_uplink;
+WS_DLL_PUBLIC const true_false_string tfs_uplink_downlink;
 WS_DLL_PUBLIC const true_false_string tfs_s2c_c2s;
 WS_DLL_PUBLIC const true_false_string tfs_c2s_s2c;
 WS_DLL_PUBLIC const true_false_string tfs_open_closed;