LTE RRC: fix RLC configuration for NB-IoT UE
authorPascal Quantin <pascal.quantin@gmail.com>
Thu, 4 Oct 2018 11:26:30 +0000 (13:26 +0200)
committerPascal Quantin <pascal.quantin@gmail.com>
Thu, 4 Oct 2018 12:49:46 +0000 (12:49 +0000)
R15 introduced UM mode for DRBs.

Change-Id: Ifd9030a46bcb237d6e6c1909f2dbad3be3a4eb86
Reviewed-on: https://code.wireshark.org/review/30014
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
epan/dissectors/asn1/lte-rrc/lte-rrc.cnf
epan/dissectors/packet-lte-rrc.c

index 00456be9b4f4e53b469dab43a62ea5efecb64dc3..14727d61aeac7d60767afe6e88f0fc06683b8b59 100644 (file)
@@ -2827,7 +2827,7 @@ SR-NPRACH-Resource-NB-r15/p0-SR-r15 DISPLAY=BASE_DEC|BASE_UNIT_STRING STRINGS=&u
   /* Clear out the struct again */
   memset(&drb_mapping, 0, sizeof(drb_mapping));
 
-#.FN_BODY RLC-Config-NB-r13
+#.FN_BODY RLC-Config-NB-r13/am
   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
 %(DEFAULT_BODY)s
   if (mapping != NULL) {
@@ -2837,6 +2837,42 @@ SR-NPRACH-Resource-NB-r15/p0-SR-r15 DISPLAY=BASE_DEC|BASE_UNIT_STRING STRINGS=&u
     mapping->pdcp_sn_size_present = TRUE;
   }
 
+#.FN_BODY RLC-Config-NB-r13/um-Bi-Directional-r15
+  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
+%(DEFAULT_BODY)s
+  if (mapping != NULL) {
+    mapping->rlcMode = RLC_UM_MODE;
+    mapping->rlcMode_present = TRUE;
+    mapping->um_sn_length = 5;
+    mapping->um_sn_length_present = TRUE;
+    mapping->pdcp_sn_size = 7;
+    mapping->pdcp_sn_size_present = TRUE;
+  }
+
+#.FN_BODY RLC-Config-NB-r13/um-Uni-Directional-UL-r15
+  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
+%(DEFAULT_BODY)s
+  if (mapping != NULL) {
+    mapping->rlcMode = RLC_UM_MODE;
+    mapping->rlcMode_present = TRUE;
+    mapping->um_sn_length = 5;
+    mapping->um_sn_length_present = TRUE;
+    mapping->pdcp_sn_size = 7;
+    mapping->pdcp_sn_size_present = TRUE;
+  }
+
+#.FN_BODY RLC-Config-NB-r13/um-Uni-Directional-DL-r15
+  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
+%(DEFAULT_BODY)s
+  if (mapping != NULL) {
+    mapping->rlcMode = RLC_UM_MODE;
+    mapping->rlcMode_present = TRUE;
+    mapping->um_sn_length = 5;
+    mapping->um_sn_length_present = TRUE;
+    mapping->pdcp_sn_size = 7;
+    mapping->pdcp_sn_size_present = TRUE;
+  }
+
 #.FN_BODY DRB-ToAddMod-NB-r13/logicalChannelIdentity-r13 VAL_PTR=&value
   guint32 value;
   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
index 102c2ba98b4d4b375b5dd7200e08e3abaedeb55e..6d5de92f52e3974637b253792192a6e81f92b3f7 100644 (file)
@@ -7294,9 +7294,9 @@ static int hf_lte_rrc_DRB_ToReleaseList_NB_r13_item = -1;  /* DRB_Identity */
 static int hf_lte_rrc_am_01 = -1;                 /* T_am_01 */
 static int hf_lte_rrc_ul_AM_RLC_r13 = -1;         /* UL_AM_RLC_NB_r13 */
 static int hf_lte_rrc_dl_AM_RLC_r13 = -1;         /* DL_AM_RLC_NB_r13 */
-static int hf_lte_rrc_um_Bi_Directional_r15_01 = -1;  /* NULL */
-static int hf_lte_rrc_um_Uni_Directional_UL_r15_01 = -1;  /* NULL */
-static int hf_lte_rrc_um_Uni_Directional_DL_r15_01 = -1;  /* NULL */
+static int hf_lte_rrc_um_Bi_Directional_r15_01 = -1;  /* T_um_Bi_Directional_r15_01 */
+static int hf_lte_rrc_um_Uni_Directional_UL_r15_01 = -1;  /* T_um_Uni_Directional_UL_r15_01 */
+static int hf_lte_rrc_um_Uni_Directional_DL_r15_01 = -1;  /* T_um_Uni_Directional_DL_r15_01 */
 static int hf_lte_rrc_t_Reordering_r14 = -1;      /* T_Reordering */
 static int hf_lte_rrc_t_PollRetransmit_r13 = -1;  /* T_PollRetransmit_NB_r13 */
 static int hf_lte_rrc_maxRetxThreshold_r13 = -1;  /* T_maxRetxThreshold_r13 */
@@ -94992,9 +94992,78 @@ static const per_sequence_t T_am_01_sequence[] = {
 
 static int
 dissect_lte_rrc_T_am_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
                                    ett_lte_rrc_T_am_01, T_am_01_sequence);
 
+  if (mapping != NULL) {
+    mapping->rlcMode = RLC_AM_MODE;
+    mapping->rlcMode_present = TRUE;
+    mapping->pdcp_sn_size = 7;
+    mapping->pdcp_sn_size_present = TRUE;
+  }
+
+
+  return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_um_Bi_Directional_r15_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
+  offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+  if (mapping != NULL) {
+    mapping->rlcMode = RLC_UM_MODE;
+    mapping->rlcMode_present = TRUE;
+    mapping->um_sn_length = 5;
+    mapping->um_sn_length_present = TRUE;
+    mapping->pdcp_sn_size = 7;
+    mapping->pdcp_sn_size_present = TRUE;
+  }
+
+
+  return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_um_Uni_Directional_UL_r15_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
+  offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+  if (mapping != NULL) {
+    mapping->rlcMode = RLC_UM_MODE;
+    mapping->rlcMode_present = TRUE;
+    mapping->um_sn_length = 5;
+    mapping->um_sn_length_present = TRUE;
+    mapping->pdcp_sn_size = 7;
+    mapping->pdcp_sn_size_present = TRUE;
+  }
+
+
+  return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_um_Uni_Directional_DL_r15_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
+  offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+  if (mapping != NULL) {
+    mapping->rlcMode = RLC_UM_MODE;
+    mapping->rlcMode_present = TRUE;
+    mapping->um_sn_length = 5;
+    mapping->um_sn_length_present = TRUE;
+    mapping->pdcp_sn_size = 7;
+    mapping->pdcp_sn_size_present = TRUE;
+  }
+
+
   return offset;
 }
 
@@ -95009,27 +95078,18 @@ static const value_string lte_rrc_RLC_Config_NB_r13_vals[] = {
 
 static const per_choice_t RLC_Config_NB_r13_choice[] = {
   {   0, &hf_lte_rrc_am_01       , ASN1_EXTENSION_ROOT    , dissect_lte_rrc_T_am_01 },
-  {   1, &hf_lte_rrc_um_Bi_Directional_r15_01, ASN1_NOT_EXTENSION_ROOT, dissect_lte_rrc_NULL },
-  {   2, &hf_lte_rrc_um_Uni_Directional_UL_r15_01, ASN1_NOT_EXTENSION_ROOT, dissect_lte_rrc_NULL },
-  {   3, &hf_lte_rrc_um_Uni_Directional_DL_r15_01, ASN1_NOT_EXTENSION_ROOT, dissect_lte_rrc_NULL },
+  {   1, &hf_lte_rrc_um_Bi_Directional_r15_01, ASN1_NOT_EXTENSION_ROOT, dissect_lte_rrc_T_um_Bi_Directional_r15_01 },
+  {   2, &hf_lte_rrc_um_Uni_Directional_UL_r15_01, ASN1_NOT_EXTENSION_ROOT, dissect_lte_rrc_T_um_Uni_Directional_UL_r15_01 },
+  {   3, &hf_lte_rrc_um_Uni_Directional_DL_r15_01, ASN1_NOT_EXTENSION_ROOT, dissect_lte_rrc_T_um_Uni_Directional_DL_r15_01 },
   { 0, NULL, 0, NULL }
 };
 
 static int
 dissect_lte_rrc_RLC_Config_NB_r13(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
                                  ett_lte_rrc_RLC_Config_NB_r13, RLC_Config_NB_r13_choice,
                                  NULL);
 
-  if (mapping != NULL) {
-    mapping->rlcMode = RLC_AM_MODE;
-    mapping->rlcMode_present = TRUE;
-    mapping->pdcp_sn_size = 7;
-    mapping->pdcp_sn_size_present = TRUE;
-  }
-
-
   return offset;
 }
 
@@ -136160,15 +136220,15 @@ void proto_register_lte_rrc(void) {
     { &hf_lte_rrc_um_Bi_Directional_r15_01,
       { "um-Bi-Directional-r15", "lte-rrc.um_Bi_Directional_r15_element",
         FT_NONE, BASE_NONE, NULL, 0,
-        NULL, HFILL }},
+        "T_um_Bi_Directional_r15_01", HFILL }},
     { &hf_lte_rrc_um_Uni_Directional_UL_r15_01,
       { "um-Uni-Directional-UL-r15", "lte-rrc.um_Uni_Directional_UL_r15_element",
         FT_NONE, BASE_NONE, NULL, 0,
-        NULL, HFILL }},
+        "T_um_Uni_Directional_UL_r15_01", HFILL }},
     { &hf_lte_rrc_um_Uni_Directional_DL_r15_01,
       { "um-Uni-Directional-DL-r15", "lte-rrc.um_Uni_Directional_DL_r15_element",
         FT_NONE, BASE_NONE, NULL, 0,
-        NULL, HFILL }},
+        "T_um_Uni_Directional_DL_r15_01", HFILL }},
     { &hf_lte_rrc_t_Reordering_r14,
       { "t-Reordering-r14", "lte-rrc.t_Reordering_r14",
         FT_UINT32, BASE_DEC|BASE_EXT_STRING, &lte_rrc_T_Reordering_vals_ext, 0,