summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2013-01-20 17:14:24 +0000
committerPascal Quantin <pascal.quantin@gmail.com>2013-01-20 17:14:24 +0000
commit1a182e2a7957da396a11e109efd42bf2370e51b7 (patch)
tree035eb869f93aec936c7b6d8b7a5d05ff435b1b7e
parent4cd9fb3084b0dd94b359ff51eef2a48b9006aea5 (diff)
downloadwireshark-1a182e2a7957da396a11e109efd42bf2370e51b7.tar.gz
Dissect ETWS and CMAS notifications
svn path=/trunk/; revision=47177
-rw-r--r--asn1/lte-rrc/lte-rrc.cnf198
-rw-r--r--asn1/lte-rrc/packet-lte-rrc-template.c151
-rw-r--r--epan/dissectors/packet-cell_broadcast.c2
-rw-r--r--epan/dissectors/packet-cell_broadcast.h5
-rw-r--r--epan/dissectors/packet-lte-rrc.c528
5 files changed, 796 insertions, 88 deletions
diff --git a/asn1/lte-rrc/lte-rrc.cnf b/asn1/lte-rrc/lte-rrc.cnf
index 99d1b5676a..52acf83141 100644
--- a/asn1/lte-rrc/lte-rrc.cnf
+++ b/asn1/lte-rrc/lte-rrc.cnf
@@ -776,18 +776,16 @@ if(ue_cap_tvb){
call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, subtree);
}
-#.FN_BODY NeighCellConfig VAL_PTR = &neigh_cell_config_tvb
+#.TYPE_ATTR
+NeighCellConfig TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lte_rrc_neighCellConfig_vals)
+
+#.FN_BODY NeighCellConfig VAL_PTR = &neigh_cell_config_tvb HF_INDEX=-1
tvbuff_t *neigh_cell_config_tvb = NULL;
%(DEFAULT_BODY)s
#.FN_FTR NeighCellConfig
if (neigh_cell_config_tvb) {
- guint8 bits;
- proto_tree *subtree;
- subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_neighCellConfig);
- bits = tvb_get_bits8(neigh_cell_config_tvb, 0, 2);
- proto_tree_add_text(subtree, neigh_cell_config_tvb, 0, 1, "%s",
- val_to_str_const(bits, lte_rrc_neighCellConfig_vals, "Unknown"));
+ actx->created_item = proto_tree_add_uint(tree, hf_index, neigh_cell_config_tvb, 0, 1, tvb_get_bits8(neigh_cell_config_tvb, 0, 2));
}
#.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoid-Point-r10 VAL_PTR = &ellipsoid_point_tvb
@@ -878,18 +876,190 @@ SystemInformationBlockType9/hnb-Name TYPE=FT_STRING DISPLAY=BASE_NONE
actx->created_item = proto_tree_add_unicode_string(tree, hf_index, hnb_name_tvb, 0, -1,
tvb_get_ephemeral_string_enc(hnb_name_tvb, 0, tvb_length(hnb_name_tvb), ENC_UTF_8 | ENC_NA));
-#.FN_BODY SystemInformationBlockType16-r11/dayLightSavingTime VAL_PTR=&daylight_saving_time_tvb
+#.TYPE_ATTR
+SystemInformationBlockType10/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_messageIdentifier_vals_ext
+
+#.FN_BODY SystemInformationBlockType10/messageIdentifier VAL_PTR=&msg_id_tvb HF_INDEX=-1
+ tvbuff_t *msg_id_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType10/messageIdentifier
+ if (msg_id_tvb) {
+ actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SystemInformationBlockType10/serialNumber VAL_PTR=&serial_nb_tvb
+ tvbuff_t *serial_nb_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType10/serialNumber
+ if (serial_nb_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SystemInformationBlockType10/warningType VAL_PTR=&warning_type_tvb
+ tvbuff_t *warning_type_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType10/warningType
+ if (warning_type_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningType);
+ proto_tree_add_item(subtree, hf_lte_rrc_warningType_value, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_warningType_emergency_user_alert, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_warningType_popup, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SystemInformationBlockType10/warningSecurityInfo VAL_PTR=&warning_sec_info_tvb
+ tvbuff_t *warning_sec_info_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType10/warningSecurityInfo
+ if (warning_sec_info_tvb) {
+ guint8 oct, tz;
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningSecurityInfo);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 0);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_yr, warning_sec_info_tvb, 0, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 1);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_mo, warning_sec_info_tvb, 1, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 2);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_day, warning_sec_info_tvb, 2, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 3);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_hr, warning_sec_info_tvb, 3, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 4);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_min, warning_sec_info_tvb, 4, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 5);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_sec, warning_sec_info_tvb, 5, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 6);
+ if (oct == 0xff) {
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_tz, warning_sec_info_tvb, 6, 1, oct, "Unknown (0x%02x)", oct);
+ } else {
+ tz = (oct >> 4) + (oct & 0x07) * 10;
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_tz, warning_sec_info_tvb, 6, 1, oct, "GMT %c %d hr %d min (0x%02x)",
+ (oct & 0x08)?'-':'+', tz/4, (tz%4)*15, oct);
+ }
+ proto_tree_add_item(subtree, hf_lte_rrc_warningSecurityInfo_digital_signature, warning_sec_info_tvb, 7, 43, ENC_NA);
+ }
+
+#.TYPE_ATTR
+SystemInformationBlockType11/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_messageIdentifier_vals_ext
+
+#.FN_BODY SystemInformationBlockType11/messageIdentifier VAL_PTR=&msg_id_tvb HF_INDEX=-1
+ tvbuff_t *msg_id_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType11/messageIdentifier
+ if (msg_id_tvb) {
+ actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SystemInformationBlockType11/serialNumber VAL_PTR=&serial_nb_tvb
+ tvbuff_t *serial_nb_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType11/serialNumber
+ if (serial_nb_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SystemInformationBlockType11/dataCodingScheme VAL_PTR=&data_coding_scheme_tvb
+ tvbuff_t *data_coding_scheme_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType11/dataCodingScheme
+ if (data_coding_scheme_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
+ lte_rrc_etws_dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
+ }
+
+#.FN_BODY SystemInformationBlockType11/warningMessageSegment VAL_PTR=&warning_msg_seg_tvb
+ tvbuff_t *warning_msg_seg_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType11/warningMessageSegment
+ if (warning_msg_seg_tvb && (lte_rrc_etws_dataCodingScheme != SMS_ENCODING_NOT_SET)) {
+ proto_tree *subtree;
+ tvbuff_t *cb_data_tvb;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
+ cb_data_tvb = dissect_cbs_data(lte_rrc_etws_dataCodingScheme, warning_msg_seg_tvb, subtree, actx->pinfo, 0);
+ if (cb_data_tvb) {
+ proto_tree_add_unicode_string(subtree, hf_lte_rrc_warningMessageSegment_decoded, cb_data_tvb, 0, -1,
+ tvb_get_ephemeral_string_enc(cb_data_tvb, 0, tvb_length(cb_data_tvb), ENC_UTF_8 | ENC_NA));
+ }
+ }
+
+#.TYPE_ATTR
+SystemInformationBlockType12-r9/messageIdentifier-r9 TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_messageIdentifier_vals_ext
+
+#.FN_BODY SystemInformationBlockType12-r9/messageIdentifier-r9 VAL_PTR=&msg_id_tvb HF_INDEX=-1
+ tvbuff_t *msg_id_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType12-r9/messageIdentifier-r9
+ if (msg_id_tvb) {
+ actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SystemInformationBlockType12-r9/serialNumber-r9 VAL_PTR=&serial_nb_tvb
+ tvbuff_t *serial_nb_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType12-r9/serialNumber-r9
+ if (serial_nb_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SystemInformationBlockType12-r9/dataCodingScheme-r9 VAL_PTR=&data_coding_scheme_tvb
+ tvbuff_t *data_coding_scheme_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType12-r9/dataCodingScheme-r9
+ if (data_coding_scheme_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
+ lte_rrc_cmas_dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
+ }
+
+#.FN_BODY SystemInformationBlockType12-r9/warningMessageSegment-r9 VAL_PTR=&warning_msg_seg_tvb
+ tvbuff_t *warning_msg_seg_tvb = NULL;
+%(DEFAULT_BODY)s
+
+#.FN_FTR SystemInformationBlockType12-r9/warningMessageSegment-r9
+ if (warning_msg_seg_tvb && (lte_rrc_cmas_dataCodingScheme != SMS_ENCODING_NOT_SET)) {
+ proto_tree *subtree;
+ tvbuff_t *cb_data_tvb;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
+ cb_data_tvb = dissect_cbs_data(lte_rrc_cmas_dataCodingScheme, warning_msg_seg_tvb, subtree, actx->pinfo, 0);
+ if (cb_data_tvb) {
+ proto_tree_add_unicode_string(subtree, hf_lte_rrc_warningMessageSegment_decoded, cb_data_tvb, 0, -1,
+ tvb_get_ephemeral_string_enc(cb_data_tvb, 0, tvb_length(cb_data_tvb), ENC_UTF_8 | ENC_NA));
+ }
+ }
+
+#.TYPE_ATTR
+SystemInformationBlockType16-r11/dayLightSavingTime TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lte_rrc_daylightSavingTime_vals)
+
+#.FN_BODY SystemInformationBlockType16-r11/dayLightSavingTime VAL_PTR=&daylight_saving_time_tvb HF_INDEX=-1
tvbuff_t *daylight_saving_time_tvb = NULL;
%(DEFAULT_BODY)s
#.FN_FTR SystemInformationBlockType16-r11/dayLightSavingTime
if (daylight_saving_time_tvb) {
- guint8 bits;
- proto_tree *subtree;
- subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_daylightSavingTime);
- bits = tvb_get_bits8(daylight_saving_time_tvb, 0, 2);
- proto_tree_add_text(subtree, daylight_saving_time_tvb, 0, 1, "%s",
- val_to_str_const(bits, lte_rrc_daylightSavingTime_vals, "Unknown"));
+ actx->created_item = proto_tree_add_uint(tree, hf_index, daylight_saving_time_tvb, 0, 1, tvb_get_bits8(daylight_saving_time_tvb, 0, 2));
}
#.FN_BODY SystemInformationBlockType16-r11/leapSeconds
diff --git a/asn1/lte-rrc/packet-lte-rrc-template.c b/asn1/lte-rrc/packet-lte-rrc-template.c
index 65863aa458..6a2fc86447 100644
--- a/asn1/lte-rrc/packet-lte-rrc-template.c
+++ b/asn1/lte-rrc/packet-lte-rrc-template.c
@@ -39,6 +39,8 @@
#include "packet-rrc.h"
#include "packet-gsm_a_common.h"
#include "packet-lpp.h"
+#include "packet-gsm_map.h"
+#include "packet-cell_broadcast.h"
#define PNAME "LTE Radio Resource Control (RRC) protocol"
#define PSNAME "LTE RRC"
@@ -52,6 +54,8 @@ static dissector_handle_t gsm_rlcmac_dl_handle = NULL;
static guint32 lte_rrc_rat_type_value = -1;
static guint32 lte_rrc_ho_target_rat_type_value = -1;
static gint lte_rrc_si_or_psi_geran_val = -1;
+static guint8 lte_rrc_etws_dataCodingScheme = SMS_ENCODING_NOT_SET;
+static guint8 lte_rrc_cmas_dataCodingScheme = SMS_ENCODING_NOT_SET;
/* Include constants */
#include "packet-lte-rrc-val.h"
@@ -157,6 +161,21 @@ static int hf_lte_rrc_eutra_cap_feat_group_ind_129 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_130 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_131 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_132 = -1;
+static int hf_lte_rrc_serialNumber_gs = -1;
+static int hf_lte_rrc_serialNumber_msg_code = -1;
+static int hf_lte_rrc_serialNumber_upd_nb = -1;
+static int hf_lte_rrc_warningType_value = -1;
+static int hf_lte_rrc_warningType_emergency_user_alert = -1;
+static int hf_lte_rrc_warningType_popup = -1;
+static int hf_lte_rrc_warningSecurityInfo_yr = -1;
+static int hf_lte_rrc_warningSecurityInfo_mo = -1;
+static int hf_lte_rrc_warningSecurityInfo_day = -1;
+static int hf_lte_rrc_warningSecurityInfo_hr = -1;
+static int hf_lte_rrc_warningSecurityInfo_min = -1;
+static int hf_lte_rrc_warningSecurityInfo_sec = -1;
+static int hf_lte_rrc_warningSecurityInfo_tz = -1;
+static int hf_lte_rrc_warningSecurityInfo_digital_signature = -1;
+static int hf_lte_rrc_warningMessageSegment_decoded = -1;
/* Initialize the subtree pointers */
static int ett_lte_rrc = -1;
@@ -166,14 +185,17 @@ static int ett_lte_rrc = -1;
static gint ett_lte_rrc_featureGroupIndicators = -1;
static gint ett_lte_rrc_featureGroupIndRel9Add = -1;
static gint ett_lte_rrc_featureGroupIndRel10 = -1;
-static gint ett_lte_rrc_neighCellConfig = -1;
static gint ett_lte_rrc_absTimeInfo = -1;
static gint ett_lte_rrc_nas_SecurityParam = -1;
static gint ett_lte_rrc_targetRAT_MessageContainer = -1;
static gint ett_lte_rrc_siPsiSibContainer = -1;
static gint ett_lte_rrc_dedicatedInfoNAS = -1;
-static gint ett_lte_rrc_daylightSavingTime = -1;
static gint ett_lte_rrc_timeInfo = -1;
+static gint ett_lte_rrc_serialNumber = -1;
+static gint ett_lte_rrc_warningType = -1;
+static gint ett_lte_rrc_warningSecurityInfo = -1;
+static gint ett_lte_rrc_dataCodingScheme = -1;
+static gint ett_lte_rrc_warningMessageSegment = -1;
/* Forward declarations */
static int dissect_DL_DCCH_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
@@ -1697,6 +1719,62 @@ static const value_string lte_rrc_neighCellConfig_vals[] = {
{ 0, NULL},
};
+static const value_string lte_rrc_messageIdentifier_vals[] = {
+ { 0x1100, "ETWS Identifier for earthquake warning message"},
+ { 0x1101, "ETWS Identifier for tsunami warning message"},
+ { 0x1102, "ETWS Identifier for earthquake and tsunami combined warning message"},
+ { 0x1103, "ETWS Identifier for test message"},
+ { 0x1104, "ETWS Identifier for messages related to other emergency types"},
+ { 0x1105, "ETWS Identifier for future extension"},
+ { 0x1106, "ETWS Identifier for future extension"},
+ { 0x1107, "ETWS Identifier for future extension"},
+ { 0x1112, "CMAS Identifier for CMAS Presidential Level Alerts"},
+ { 0x1113, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Observed"},
+ { 0x1114, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Likely"},
+ { 0x1115, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Observed"},
+ { 0x1116, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Likely"},
+ { 0x1117, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Observed"},
+ { 0x1118, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Likely"},
+ { 0x1119, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Observed"},
+ { 0x111a, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Likely"},
+ { 0x111b, "CMAS Identifier for Child Abduction Emergency (or Amber Alert)"},
+ { 0x111c, "CMAS Identifier for the Required Monthly Test"},
+ { 0x111d, "CMAS Identifier for CMAS Exercise"},
+ { 0x111e, "CMAS Identifier for operator defined use"},
+ { 0x111f, "CMAS Identifier for CMAS Presidential Level Alerts for additional languages"},
+ { 0x1120, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Observed for additional languages"},
+ { 0x1121, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Likely for additional languages"},
+ { 0x1122, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Observed for additional languages"},
+ { 0x1123, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Likely for additional languages"},
+ { 0x1124, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Observed for additional languages"},
+ { 0x1125, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Likely for additional languages"},
+ { 0x1126, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Observed for additional languages"},
+ { 0x1127, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Likely for additional languages"},
+ { 0x1128, "CMAS Identifier for Child Abduction Emergency (or Amber Alert) for additional languages"},
+ { 0x1129, "CMAS Identifier for the Required Monthly Test for additional languages"},
+ { 0x112a, "CMAS Identifier for CMAS Exercise for additional languages"},
+ { 0x112b, "CMAS Identifier for operator defined use for additional languages"},
+ { 0, NULL},
+};
+static value_string_ext lte_rrc_messageIdentifier_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_messageIdentifier_vals);
+
+static const value_string lte_rrc_serialNumber_gs_vals[] = {
+ { 0, "Display mode immediate, cell wide"},
+ { 1, "Display mode normal, PLMN wide"},
+ { 2, "Display mode normal, tracking area wide"},
+ { 3, "Display mode normal, cell wide"},
+ { 0, NULL},
+};
+
+static const value_string lte_rrc_warningType_vals[] = {
+ { 0, "Earthquake"},
+ { 1, "Tsunami"},
+ { 2, "Earthquake and Tsunami"},
+ { 3, "Test"},
+ { 4, "Other"},
+ { 0, NULL},
+};
+
static void
lte_rrc_localTimeOffset_fmt(gchar *s, guint32 v)
{
@@ -2230,6 +2308,66 @@ void proto_register_lte_rrc(void) {
{ "Indicator 132", "lte-rrc.eutra_cap_feat_group_ind_132",
FT_BOOLEAN, BASE_NONE, TFS(&lte_rrc_eutra_cap_feat_group_ind_132_val), 0,
"EUTRA Feature Group Indicator 132", HFILL }},
+ { &hf_lte_rrc_serialNumber_gs,
+ { "Geographical Scope", "lte-rrc.serialNumber.gs",
+ FT_UINT16, BASE_DEC, VALS(lte_rrc_serialNumber_gs_vals), 0xc000,
+ NULL, HFILL }},
+ { &hf_lte_rrc_serialNumber_msg_code,
+ { "Message Code", "lte-rrc.serialNumber.msg_code",
+ FT_UINT16, BASE_DEC, NULL, 0x3ff0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_serialNumber_upd_nb,
+ { "Update Number", "lte-rrc.serialNumber.upd_nb",
+ FT_UINT16, BASE_DEC, NULL, 0x000f,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningType_value,
+ { "Warning Type Value", "lte-rrc.warningType.value",
+ FT_UINT16, BASE_DEC, VALS(lte_rrc_warningType_vals), 0xfe00,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningType_emergency_user_alert,
+ { "Emergency User Alert", "lte-rrc.warningType.emergency_user_alert",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0100,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningType_popup,
+ { "Popup", "lte-rrc.warningType.popup",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0080,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_yr,
+ { "Year", "lte-rrc.warningSecurityInfo.yr",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_mo,
+ { "Month", "lte-rrc.warningSecurityInfo.mo",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_day,
+ { "Day", "lte-rrc.warningSecurityInfo.day",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_hr,
+ { "Hours", "lte-rrc.warningSecurityInfo.hr",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_min,
+ { "Minutes", "lte-rrc.warningSecurityInfo.min",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_sec,
+ { "Seconds", "lte-rrc.warningSecurityInfo.sec",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_tz,
+ { "Time Zone", "lte-rrc.warningSecurityInfo.tz",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_digital_signature,
+ { "Digital Signature", "lte-rrc.warningSecurityInfo.digital_signature",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningMessageSegment_decoded,
+ { "Decoded Segment", "lte-rrc.warningMessageSegment.decoded",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
};
/* List of subtrees */
@@ -2240,14 +2378,17 @@ void proto_register_lte_rrc(void) {
&ett_lte_rrc_featureGroupIndicators,
&ett_lte_rrc_featureGroupIndRel9Add,
&ett_lte_rrc_featureGroupIndRel10,
- &ett_lte_rrc_neighCellConfig,
&ett_lte_rrc_absTimeInfo,
&ett_lte_rrc_nas_SecurityParam,
&ett_lte_rrc_targetRAT_MessageContainer,
&ett_lte_rrc_siPsiSibContainer,
&ett_lte_rrc_dedicatedInfoNAS,
- &ett_lte_rrc_daylightSavingTime,
- &ett_lte_rrc_timeInfo
+ &ett_lte_rrc_timeInfo,
+ &ett_lte_rrc_serialNumber,
+ &ett_lte_rrc_warningType,
+ &ett_lte_rrc_warningSecurityInfo,
+ &ett_lte_rrc_dataCodingScheme,
+ &ett_lte_rrc_warningMessageSegment
};
diff --git a/epan/dissectors/packet-cell_broadcast.c b/epan/dissectors/packet-cell_broadcast.c
index c68579321d..c6c0821317 100644
--- a/epan/dissectors/packet-cell_broadcast.c
+++ b/epan/dissectors/packet-cell_broadcast.c
@@ -249,7 +249,7 @@ guint16 dissect_cbs_message_identifier(tvbuff_t *tvb, proto_tree *tree, guint16
return 2;
}
-static tvbuff_t * dissect_cbs_data(guint8 sms_encoding, tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint16 offset )
+tvbuff_t * dissect_cbs_data(guint8 sms_encoding, tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint16 offset )
{
tvbuff_t * tvb_out = NULL;
guint8 out_len;
diff --git a/epan/dissectors/packet-cell_broadcast.h b/epan/dissectors/packet-cell_broadcast.h
index 7cc157612d..26e89bee1c 100644
--- a/epan/dissectors/packet-cell_broadcast.h
+++ b/epan/dissectors/packet-cell_broadcast.h
@@ -56,4 +56,9 @@ void dissect_cbs_serial_number(tvbuff_t *tvb, proto_tree *tree, guint16 offset);
*/
guint16 dissect_umts_cell_broadcast_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+/**
+ * Dissects CB Data
+ */
+tvbuff_t * dissect_cbs_data(guint8 sms_encoding, tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint16 offset);
+
#endif /* PACKET_CELL_BROADCAST_H */
diff --git a/epan/dissectors/packet-lte-rrc.c b/epan/dissectors/packet-lte-rrc.c
index 1b92220fdd..3f7652ba30 100644
--- a/epan/dissectors/packet-lte-rrc.c
+++ b/epan/dissectors/packet-lte-rrc.c
@@ -47,6 +47,8 @@
#include "packet-rrc.h"
#include "packet-gsm_a_common.h"
#include "packet-lpp.h"
+#include "packet-gsm_map.h"
+#include "packet-cell_broadcast.h"
#define PNAME "LTE Radio Resource Control (RRC) protocol"
#define PSNAME "LTE RRC"
@@ -60,6 +62,8 @@ static dissector_handle_t gsm_rlcmac_dl_handle = NULL;
static guint32 lte_rrc_rat_type_value = -1;
static guint32 lte_rrc_ho_target_rat_type_value = -1;
static gint lte_rrc_si_or_psi_geran_val = -1;
+static guint8 lte_rrc_etws_dataCodingScheme = SMS_ENCODING_NOT_SET;
+static guint8 lte_rrc_cmas_dataCodingScheme = SMS_ENCODING_NOT_SET;
/* Include constants */
@@ -153,7 +157,7 @@ typedef enum _RAT_Type_enum {
} RAT_Type_enum;
/*--- End of included file: packet-lte-rrc-val.h ---*/
-#line 58 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 62 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
/* Initialize the protocol and registered fields */
static int proto_lte_rrc = -1;
@@ -1017,20 +1021,22 @@ static int hf_lte_rrc_ac_BarringConfig1XRTT_r11 = -1; /* AC_BarringConfig1XRTT_
static int hf_lte_rrc_csfb_SupportForDualRxUEs_r11 = -1; /* BOOLEAN */
static int hf_lte_rrc_csfb_DualRxTxSupport_r11 = -1; /* T_csfb_DualRxTxSupport_r11 */
static int hf_lte_rrc_hnb_Name = -1; /* T_hnb_Name */
-static int hf_lte_rrc_messageIdentifier = -1; /* BIT_STRING_SIZE_16 */
-static int hf_lte_rrc_serialNumber = -1; /* BIT_STRING_SIZE_16 */
-static int hf_lte_rrc_warningType = -1; /* OCTET_STRING_SIZE_2 */
-static int hf_lte_rrc_warningSecurityInfo = -1; /* OCTET_STRING_SIZE_50 */
+static int hf_lte_rrc_messageIdentifier = -1; /* T_messageIdentifier */
+static int hf_lte_rrc_serialNumber = -1; /* T_serialNumber */
+static int hf_lte_rrc_warningType = -1; /* T_warningType */
+static int hf_lte_rrc_warningSecurityInfo = -1; /* T_warningSecurityInfo */
+static int hf_lte_rrc_messageIdentifier_01 = -1; /* T_messageIdentifier_01 */
+static int hf_lte_rrc_serialNumber_01 = -1; /* T_serialNumber_01 */
static int hf_lte_rrc_warningMessageSegmentType = -1; /* T_warningMessageSegmentType */
static int hf_lte_rrc_warningMessageSegmentNumber = -1; /* INTEGER_0_63 */
-static int hf_lte_rrc_warningMessageSegment = -1; /* OCTET_STRING */
-static int hf_lte_rrc_dataCodingScheme = -1; /* OCTET_STRING_SIZE_1 */
-static int hf_lte_rrc_messageIdentifier_r9 = -1; /* BIT_STRING_SIZE_16 */
-static int hf_lte_rrc_serialNumber_r9 = -1; /* BIT_STRING_SIZE_16 */
+static int hf_lte_rrc_warningMessageSegment = -1; /* T_warningMessageSegment */
+static int hf_lte_rrc_dataCodingScheme = -1; /* T_dataCodingScheme */
+static int hf_lte_rrc_messageIdentifier_r9 = -1; /* T_messageIdentifier_r9 */
+static int hf_lte_rrc_serialNumber_r9 = -1; /* T_serialNumber_r9 */
static int hf_lte_rrc_warningMessageSegmentType_r9 = -1; /* T_warningMessageSegmentType_r9 */
static int hf_lte_rrc_warningMessageSegmentNumber_r9 = -1; /* INTEGER_0_63 */
-static int hf_lte_rrc_warningMessageSegment_r9 = -1; /* OCTET_STRING */
-static int hf_lte_rrc_dataCodingScheme_r9 = -1; /* OCTET_STRING_SIZE_1 */
+static int hf_lte_rrc_warningMessageSegment_r9 = -1; /* T_warningMessageSegment_r9 */
+static int hf_lte_rrc_dataCodingScheme_r9 = -1; /* T_dataCodingScheme_r9 */
static int hf_lte_rrc_mbsfn_AreaInfoList_r9 = -1; /* MBSFN_AreaInfoList_r9 */
static int hf_lte_rrc_notificationConfig_r9 = -1; /* MBMS_NotificationConfig_r9 */
static int hf_lte_rrc_eab_Param_r11 = -1; /* T_eab_Param_r11 */
@@ -2227,7 +2233,7 @@ static int hf_lte_rrc_CandidateCellInfoList_r10_item = -1; /* CandidateCellInfo
static int hf_lte_rrc_dummy_eag_field = -1; /* never registered */
/*--- End of included file: packet-lte-rrc-hf.c ---*/
-#line 63 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 67 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
static int hf_lte_rrc_eutra_cap_feat_group_ind_1 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_2 = -1;
@@ -2325,6 +2331,21 @@ static int hf_lte_rrc_eutra_cap_feat_group_ind_129 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_130 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_131 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_132 = -1;
+static int hf_lte_rrc_serialNumber_gs = -1;
+static int hf_lte_rrc_serialNumber_msg_code = -1;
+static int hf_lte_rrc_serialNumber_upd_nb = -1;
+static int hf_lte_rrc_warningType_value = -1;
+static int hf_lte_rrc_warningType_emergency_user_alert = -1;
+static int hf_lte_rrc_warningType_popup = -1;
+static int hf_lte_rrc_warningSecurityInfo_yr = -1;
+static int hf_lte_rrc_warningSecurityInfo_mo = -1;
+static int hf_lte_rrc_warningSecurityInfo_day = -1;
+static int hf_lte_rrc_warningSecurityInfo_hr = -1;
+static int hf_lte_rrc_warningSecurityInfo_min = -1;
+static int hf_lte_rrc_warningSecurityInfo_sec = -1;
+static int hf_lte_rrc_warningSecurityInfo_tz = -1;
+static int hf_lte_rrc_warningSecurityInfo_digital_signature = -1;
+static int hf_lte_rrc_warningMessageSegment_decoded = -1;
/* Initialize the subtree pointers */
static int ett_lte_rrc = -1;
@@ -3369,19 +3390,22 @@ static gint ett_lte_rrc_CandidateCellInfoList_r10 = -1;
static gint ett_lte_rrc_CandidateCellInfo_r10 = -1;
/*--- End of included file: packet-lte-rrc-ett.c ---*/
-#line 165 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 184 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
static gint ett_lte_rrc_featureGroupIndicators = -1;
static gint ett_lte_rrc_featureGroupIndRel9Add = -1;
static gint ett_lte_rrc_featureGroupIndRel10 = -1;
-static gint ett_lte_rrc_neighCellConfig = -1;
static gint ett_lte_rrc_absTimeInfo = -1;
static gint ett_lte_rrc_nas_SecurityParam = -1;
static gint ett_lte_rrc_targetRAT_MessageContainer = -1;
static gint ett_lte_rrc_siPsiSibContainer = -1;
static gint ett_lte_rrc_dedicatedInfoNAS = -1;
-static gint ett_lte_rrc_daylightSavingTime = -1;
static gint ett_lte_rrc_timeInfo = -1;
+static gint ett_lte_rrc_serialNumber = -1;
+static gint ett_lte_rrc_warningType = -1;
+static gint ett_lte_rrc_warningSecurityInfo = -1;
+static gint ett_lte_rrc_dataCodingScheme = -1;
+static gint ett_lte_rrc_warningMessageSegment = -1;
/* Forward declarations */
static int dissect_DL_DCCH_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
@@ -4905,6 +4929,62 @@ static const value_string lte_rrc_neighCellConfig_vals[] = {
{ 0, NULL},
};
+static const value_string lte_rrc_messageIdentifier_vals[] = {
+ { 0x1100, "ETWS Identifier for earthquake warning message"},
+ { 0x1101, "ETWS Identifier for tsunami warning message"},
+ { 0x1102, "ETWS Identifier for earthquake and tsunami combined warning message"},
+ { 0x1103, "ETWS Identifier for test message"},
+ { 0x1104, "ETWS Identifier for messages related to other emergency types"},
+ { 0x1105, "ETWS Identifier for future extension"},
+ { 0x1106, "ETWS Identifier for future extension"},
+ { 0x1107, "ETWS Identifier for future extension"},
+ { 0x1112, "CMAS Identifier for CMAS Presidential Level Alerts"},
+ { 0x1113, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Observed"},
+ { 0x1114, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Likely"},
+ { 0x1115, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Observed"},
+ { 0x1116, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Likely"},
+ { 0x1117, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Observed"},
+ { 0x1118, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Likely"},
+ { 0x1119, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Observed"},
+ { 0x111a, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Likely"},
+ { 0x111b, "CMAS Identifier for Child Abduction Emergency (or Amber Alert)"},
+ { 0x111c, "CMAS Identifier for the Required Monthly Test"},
+ { 0x111d, "CMAS Identifier for CMAS Exercise"},
+ { 0x111e, "CMAS Identifier for operator defined use"},
+ { 0x111f, "CMAS Identifier for CMAS Presidential Level Alerts for additional languages"},
+ { 0x1120, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Observed for additional languages"},
+ { 0x1121, "CMAS Identifier for CMAS Extreme Alerts with Severity of Extreme, Urgency of Immediate, and Certainty of Likely for additional languages"},
+ { 0x1122, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Observed for additional languages"},
+ { 0x1123, "CMAS Identifier for CMAS Severe Alerts with Severity of Extreme, Urgency of Expected, and Certainty of Likely for additional languages"},
+ { 0x1124, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Observed for additional languages"},
+ { 0x1125, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Immediate, and Certainty of Likely for additional languages"},
+ { 0x1126, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Observed for additional languages"},
+ { 0x1127, "CMAS Identifier for CMAS Severe Alerts with Severity of Severe, Urgency of Expected, and Certainty of Likely for additional languages"},
+ { 0x1128, "CMAS Identifier for Child Abduction Emergency (or Amber Alert) for additional languages"},
+ { 0x1129, "CMAS Identifier for the Required Monthly Test for additional languages"},
+ { 0x112a, "CMAS Identifier for CMAS Exercise for additional languages"},
+ { 0x112b, "CMAS Identifier for operator defined use for additional languages"},
+ { 0, NULL},
+};
+static value_string_ext lte_rrc_messageIdentifier_vals_ext = VALUE_STRING_EXT_INIT(lte_rrc_messageIdentifier_vals);
+
+static const value_string lte_rrc_serialNumber_gs_vals[] = {
+ { 0, "Display mode immediate, cell wide"},
+ { 1, "Display mode normal, PLMN wide"},
+ { 2, "Display mode normal, tracking area wide"},
+ { 3, "Display mode normal, cell wide"},
+ { 0, NULL},
+};
+
+static const value_string lte_rrc_warningType_vals[] = {
+ { 0, "Earthquake"},
+ { 1, "Tsunami"},
+ { 2, "Earthquake and Tsunami"},
+ { 3, "Test"},
+ { 4, "Other"},
+ { 0, NULL},
+};
+
static void
lte_rrc_localTimeOffset_fmt(gchar *s, guint32 v)
{
@@ -6870,18 +6950,13 @@ dissect_lte_rrc_PresenceAntennaPort1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx
static int
dissect_lte_rrc_NeighCellConfig(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
tvbuff_t *neigh_cell_config_tvb = NULL;
- offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, -1,
2, 2, FALSE, &neigh_cell_config_tvb);
if (neigh_cell_config_tvb) {
- guint8 bits;
- proto_tree *subtree;
- subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_neighCellConfig);
- bits = tvb_get_bits8(neigh_cell_config_tvb, 0, 2);
- proto_tree_add_text(subtree, neigh_cell_config_tvb, 0, 1, "%s",
- val_to_str_const(bits, lte_rrc_neighCellConfig_vals, "Unknown"));
+ actx->created_item = proto_tree_add_uint(tree, hf_index, neigh_cell_config_tvb, 0, 1, tvb_get_bits8(neigh_cell_config_tvb, 0, 2));
}
return offset;
@@ -8585,9 +8660,58 @@ dissect_lte_rrc_SystemInformationBlockType9(tvbuff_t *tvb _U_, int offset _U_, a
static int
-dissect_lte_rrc_OCTET_STRING_SIZE_2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_lte_rrc_T_messageIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *msg_id_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, -1,
+ 16, 16, FALSE, &msg_id_tvb);
+
+
+
+ if (msg_id_tvb) {
+ actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+ return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_serialNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *serial_nb_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &serial_nb_tvb);
+
+
+
+ if (serial_nb_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+ return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_warningType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *warning_type_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
- 2, 2, FALSE, NULL);
+ 2, 2, FALSE, &warning_type_tvb);
+
+
+
+ if (warning_type_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningType);
+ proto_tree_add_item(subtree, hf_lte_rrc_warningType_value, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_warningType_emergency_user_alert, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_warningType_popup, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
return offset;
}
@@ -8595,19 +8719,49 @@ dissect_lte_rrc_OCTET_STRING_SIZE_2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_
static int
-dissect_lte_rrc_OCTET_STRING_SIZE_50(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_lte_rrc_T_warningSecurityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *warning_sec_info_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
- 50, 50, FALSE, NULL);
+ 50, 50, FALSE, &warning_sec_info_tvb);
+
+
+
+ if (warning_sec_info_tvb) {
+ guint8 oct, tz;
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningSecurityInfo);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 0);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_yr, warning_sec_info_tvb, 0, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 1);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_mo, warning_sec_info_tvb, 1, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 2);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_day, warning_sec_info_tvb, 2, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 3);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_hr, warning_sec_info_tvb, 3, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 4);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_min, warning_sec_info_tvb, 4, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 5);
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_sec, warning_sec_info_tvb, 5, 1, oct, "%u (0x%02x)", 10*(oct&0x0f)+(oct>>4), oct);
+ oct = tvb_get_guint8(warning_sec_info_tvb, 6);
+ if (oct == 0xff) {
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_tz, warning_sec_info_tvb, 6, 1, oct, "Unknown (0x%02x)", oct);
+ } else {
+ tz = (oct >> 4) + (oct & 0x07) * 10;
+ proto_tree_add_uint_format_value(subtree, hf_lte_rrc_warningSecurityInfo_tz, warning_sec_info_tvb, 6, 1, oct, "GMT %c %d hr %d min (0x%02x)",
+ (oct & 0x08)?'-':'+', tz/4, (tz%4)*15, oct);
+ }
+ proto_tree_add_item(subtree, hf_lte_rrc_warningSecurityInfo_digital_signature, warning_sec_info_tvb, 7, 43, ENC_NA);
+ }
return offset;
}
static const per_sequence_t SystemInformationBlockType10_sequence[] = {
- { &hf_lte_rrc_messageIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_BIT_STRING_SIZE_16 },
- { &hf_lte_rrc_serialNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_BIT_STRING_SIZE_16 },
- { &hf_lte_rrc_warningType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_OCTET_STRING_SIZE_2 },
- { &hf_lte_rrc_warningSecurityInfo, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_lte_rrc_OCTET_STRING_SIZE_50 },
+ { &hf_lte_rrc_messageIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_messageIdentifier },
+ { &hf_lte_rrc_serialNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_serialNumber },
+ { &hf_lte_rrc_warningType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_warningType },
+ { &hf_lte_rrc_warningSecurityInfo, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_lte_rrc_T_warningSecurityInfo },
{ &hf_lte_rrc_lateNonCriticalExtension, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_lte_rrc_OCTET_STRING },
{ NULL, 0, 0, NULL }
};
@@ -8621,6 +8775,44 @@ dissect_lte_rrc_SystemInformationBlockType10(tvbuff_t *tvb _U_, int offset _U_,
}
+
+static int
+dissect_lte_rrc_T_messageIdentifier_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *msg_id_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, -1,
+ 16, 16, FALSE, &msg_id_tvb);
+
+
+
+ if (msg_id_tvb) {
+ actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+ return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_serialNumber_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *serial_nb_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &serial_nb_tvb);
+
+
+
+ if (serial_nb_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+ return offset;
+}
+
+
static const value_string lte_rrc_T_warningMessageSegmentType_vals[] = {
{ 0, "notLastSegment" },
{ 1, "lastSegment" },
@@ -8639,21 +8831,54 @@ dissect_lte_rrc_T_warningMessageSegmentType(tvbuff_t *tvb _U_, int offset _U_, a
static int
-dissect_lte_rrc_OCTET_STRING_SIZE_1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_lte_rrc_T_warningMessageSegment(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *warning_msg_seg_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
- 1, 1, FALSE, NULL);
+ NO_BOUND, NO_BOUND, FALSE, &warning_msg_seg_tvb);
+
+
+
+ if (warning_msg_seg_tvb && (lte_rrc_etws_dataCodingScheme != SMS_ENCODING_NOT_SET)) {
+ proto_tree *subtree;
+ tvbuff_t *cb_data_tvb;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
+ cb_data_tvb = dissect_cbs_data(lte_rrc_etws_dataCodingScheme, warning_msg_seg_tvb, subtree, actx->pinfo, 0);
+ if (cb_data_tvb) {
+ proto_tree_add_unicode_string(subtree, hf_lte_rrc_warningMessageSegment_decoded, cb_data_tvb, 0, -1,
+ tvb_get_ephemeral_string_enc(cb_data_tvb, 0, tvb_length(cb_data_tvb), ENC_UTF_8 | ENC_NA));
+ }
+ }
+
+ return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_dataCodingScheme(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *data_coding_scheme_tvb = NULL;
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 1, 1, FALSE, &data_coding_scheme_tvb);
+
+
+
+ if (data_coding_scheme_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
+ lte_rrc_etws_dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
+ }
return offset;
}
static const per_sequence_t SystemInformationBlockType11_sequence[] = {
- { &hf_lte_rrc_messageIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_BIT_STRING_SIZE_16 },
- { &hf_lte_rrc_serialNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_BIT_STRING_SIZE_16 },
+ { &hf_lte_rrc_messageIdentifier_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_messageIdentifier_01 },
+ { &hf_lte_rrc_serialNumber_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_serialNumber_01 },
{ &hf_lte_rrc_warningMessageSegmentType, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_warningMessageSegmentType },
{ &hf_lte_rrc_warningMessageSegmentNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_INTEGER_0_63 },
- { &hf_lte_rrc_warningMessageSegment, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_OCTET_STRING },
- { &hf_lte_rrc_dataCodingScheme, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_lte_rrc_OCTET_STRING_SIZE_1 },
+ { &hf_lte_rrc_warningMessageSegment, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_warningMessageSegment },
+ { &hf_lte_rrc_dataCodingScheme, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_lte_rrc_T_dataCodingScheme },
{ &hf_lte_rrc_lateNonCriticalExtension, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_lte_rrc_OCTET_STRING },
{ NULL, 0, 0, NULL }
};
@@ -8667,6 +8892,44 @@ dissect_lte_rrc_SystemInformationBlockType11(tvbuff_t *tvb _U_, int offset _U_,
}
+
+static int
+dissect_lte_rrc_T_messageIdentifier_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *msg_id_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, -1,
+ 16, 16, FALSE, &msg_id_tvb);
+
+
+
+ if (msg_id_tvb) {
+ actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+ return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_serialNumber_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *serial_nb_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &serial_nb_tvb);
+
+
+
+ if (serial_nb_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
+ }
+
+ return offset;
+}
+
+
static const value_string lte_rrc_T_warningMessageSegmentType_r9_vals[] = {
{ 0, "notLastSegment" },
{ 1, "lastSegment" },
@@ -8683,13 +8946,56 @@ dissect_lte_rrc_T_warningMessageSegmentType_r9(tvbuff_t *tvb _U_, int offset _U_
}
+
+static int
+dissect_lte_rrc_T_warningMessageSegment_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *warning_msg_seg_tvb = NULL;
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, &warning_msg_seg_tvb);
+
+
+
+ if (warning_msg_seg_tvb && (lte_rrc_cmas_dataCodingScheme != SMS_ENCODING_NOT_SET)) {
+ proto_tree *subtree;
+ tvbuff_t *cb_data_tvb;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
+ cb_data_tvb = dissect_cbs_data(lte_rrc_cmas_dataCodingScheme, warning_msg_seg_tvb, subtree, actx->pinfo, 0);
+ if (cb_data_tvb) {
+ proto_tree_add_unicode_string(subtree, hf_lte_rrc_warningMessageSegment_decoded, cb_data_tvb, 0, -1,
+ tvb_get_ephemeral_string_enc(cb_data_tvb, 0, tvb_length(cb_data_tvb), ENC_UTF_8 | ENC_NA));
+ }
+ }
+
+ return offset;
+}
+
+
+
+static int
+dissect_lte_rrc_T_dataCodingScheme_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *data_coding_scheme_tvb = NULL;
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 1, 1, FALSE, &data_coding_scheme_tvb);
+
+
+
+ if (data_coding_scheme_tvb) {
+ proto_tree *subtree;
+ subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
+ lte_rrc_cmas_dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
+ }
+
+ return offset;
+}
+
+
static const per_sequence_t SystemInformationBlockType12_r9_sequence[] = {
- { &hf_lte_rrc_messageIdentifier_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_BIT_STRING_SIZE_16 },
- { &hf_lte_rrc_serialNumber_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_BIT_STRING_SIZE_16 },
+ { &hf_lte_rrc_messageIdentifier_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_messageIdentifier_r9 },
+ { &hf_lte_rrc_serialNumber_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_serialNumber_r9 },
{ &hf_lte_rrc_warningMessageSegmentType_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_warningMessageSegmentType_r9 },
{ &hf_lte_rrc_warningMessageSegmentNumber_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_INTEGER_0_63 },
- { &hf_lte_rrc_warningMessageSegment_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_OCTET_STRING },
- { &hf_lte_rrc_dataCodingScheme_r9, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_lte_rrc_OCTET_STRING_SIZE_1 },
+ { &hf_lte_rrc_warningMessageSegment_r9, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_lte_rrc_T_warningMessageSegment_r9 },
+ { &hf_lte_rrc_dataCodingScheme_r9, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_lte_rrc_T_dataCodingScheme_r9 },
{ &hf_lte_rrc_lateNonCriticalExtension, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_lte_rrc_OCTET_STRING },
{ NULL, 0, 0, NULL }
};
@@ -9131,18 +9437,13 @@ dissect_lte_rrc_T_timeInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
static int
dissect_lte_rrc_T_dayLightSavingTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
tvbuff_t *daylight_saving_time_tvb = NULL;
- offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, -1,
2, 2, FALSE, &daylight_saving_time_tvb);
if (daylight_saving_time_tvb) {
- guint8 bits;
- proto_tree *subtree;
- subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_daylightSavingTime);
- bits = tvb_get_bits8(daylight_saving_time_tvb, 0, 2);
- proto_tree_add_text(subtree, daylight_saving_time_tvb, 0, 1, "%s",
- val_to_str_const(bits, lte_rrc_daylightSavingTime_vals, "Unknown"));
+ actx->created_item = proto_tree_add_uint(tree, hf_index, daylight_saving_time_tvb, 0, 1, tvb_get_bits8(daylight_saving_time_tvb, 0, 2));
}
return offset;
@@ -10105,6 +10406,16 @@ dissect_lte_rrc_TMGI_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
static int
+dissect_lte_rrc_OCTET_STRING_SIZE_1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 1, 1, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
dissect_lte_rrc_INTEGER_0_maxSessionPerPMCH_1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, maxSessionPerPMCH_1, NULL, FALSE);
@@ -23136,6 +23447,16 @@ dissect_lte_rrc_TraceReference_r10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
+dissect_lte_rrc_OCTET_STRING_SIZE_2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 2, 2, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
dissect_lte_rrc_AbsoluteTimeInfo_r10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
tvbuff_t *abs_time_info_tvb = NULL;
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
@@ -32921,7 +33242,7 @@ static int dissect_MBMSInterestIndication_r11_PDU(tvbuff_t *tvb _U_, packet_info
/*--- End of included file: packet-lte-rrc-fn.c ---*/
-#line 1711 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 1789 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
static void
dissect_lte_rrc_DL_CCCH(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
@@ -35991,7 +36312,7 @@ void proto_register_lte_rrc(void) {
NULL, HFILL }},
{ &hf_lte_rrc_neighCellConfig,
{ "neighCellConfig", "lte-rrc.neighCellConfig",
- FT_BYTES, BASE_NONE, NULL, 0,
+ FT_UINT8, BASE_DEC, VALS(lte_rrc_neighCellConfig_vals), 0,
NULL, HFILL }},
{ &hf_lte_rrc_t_ReselectionEUTRA,
{ "t-ReselectionEUTRA", "lte-rrc.t_ReselectionEUTRA",
@@ -36487,20 +36808,28 @@ void proto_register_lte_rrc(void) {
NULL, HFILL }},
{ &hf_lte_rrc_messageIdentifier,
{ "messageIdentifier", "lte-rrc.messageIdentifier",
- FT_BYTES, BASE_NONE, NULL, 0,
- "BIT_STRING_SIZE_16", HFILL }},
+ FT_UINT16, BASE_DEC|BASE_EXT_STRING, &lte_rrc_messageIdentifier_vals_ext, 0,
+ NULL, HFILL }},
{ &hf_lte_rrc_serialNumber,
{ "serialNumber", "lte-rrc.serialNumber",
FT_BYTES, BASE_NONE, NULL, 0,
- "BIT_STRING_SIZE_16", HFILL }},
+ NULL, HFILL }},
{ &hf_lte_rrc_warningType,
{ "warningType", "lte-rrc.warningType",
FT_BYTES, BASE_NONE, NULL, 0,
- "OCTET_STRING_SIZE_2", HFILL }},
+ NULL, HFILL }},
{ &hf_lte_rrc_warningSecurityInfo,
{ "warningSecurityInfo", "lte-rrc.warningSecurityInfo",
FT_BYTES, BASE_NONE, NULL, 0,
- "OCTET_STRING_SIZE_50", HFILL }},
+ NULL, HFILL }},
+ { &hf_lte_rrc_messageIdentifier_01,
+ { "messageIdentifier", "lte-rrc.messageIdentifier",
+ FT_UINT16, BASE_DEC|BASE_EXT_STRING, &lte_rrc_messageIdentifier_vals_ext, 0,
+ "T_messageIdentifier_01", HFILL }},
+ { &hf_lte_rrc_serialNumber_01,
+ { "serialNumber", "lte-rrc.serialNumber",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "T_serialNumber_01", HFILL }},
{ &hf_lte_rrc_warningMessageSegmentType,
{ "warningMessageSegmentType", "lte-rrc.warningMessageSegmentType",
FT_UINT32, BASE_DEC, VALS(lte_rrc_T_warningMessageSegmentType_vals), 0,
@@ -36512,19 +36841,19 @@ void proto_register_lte_rrc(void) {
{ &hf_lte_rrc_warningMessageSegment,
{ "warningMessageSegment", "lte-rrc.warningMessageSegment",
FT_BYTES, BASE_NONE, NULL, 0,
- "OCTET_STRING", HFILL }},
+ NULL, HFILL }},
{ &hf_lte_rrc_dataCodingScheme,
{ "dataCodingScheme", "lte-rrc.dataCodingScheme",
FT_BYTES, BASE_NONE, NULL, 0,
- "OCTET_STRING_SIZE_1", HFILL }},
+ NULL, HFILL }},
{ &hf_lte_rrc_messageIdentifier_r9,
{ "messageIdentifier-r9", "lte-rrc.messageIdentifier_r9",
- FT_BYTES, BASE_NONE, NULL, 0,
- "BIT_STRING_SIZE_16", HFILL }},
+ FT_UINT16, BASE_DEC|BASE_EXT_STRING, &lte_rrc_messageIdentifier_vals_ext, 0,
+ NULL, HFILL }},
{ &hf_lte_rrc_serialNumber_r9,
{ "serialNumber-r9", "lte-rrc.serialNumber_r9",
FT_BYTES, BASE_NONE, NULL, 0,
- "BIT_STRING_SIZE_16", HFILL }},
+ NULL, HFILL }},
{ &hf_lte_rrc_warningMessageSegmentType_r9,
{ "warningMessageSegmentType-r9", "lte-rrc.warningMessageSegmentType_r9",
FT_UINT32, BASE_DEC, VALS(lte_rrc_T_warningMessageSegmentType_r9_vals), 0,
@@ -36536,11 +36865,11 @@ void proto_register_lte_rrc(void) {
{ &hf_lte_rrc_warningMessageSegment_r9,
{ "warningMessageSegment-r9", "lte-rrc.warningMessageSegment_r9",
FT_BYTES, BASE_NONE, NULL, 0,
- "OCTET_STRING", HFILL }},
+ "T_warningMessageSegment_r9", HFILL }},
{ &hf_lte_rrc_dataCodingScheme_r9,
{ "dataCodingScheme-r9", "lte-rrc.dataCodingScheme_r9",
FT_BYTES, BASE_NONE, NULL, 0,
- "OCTET_STRING_SIZE_1", HFILL }},
+ NULL, HFILL }},
{ &hf_lte_rrc_mbsfn_AreaInfoList_r9,
{ "mbsfn-AreaInfoList-r9", "lte-rrc.mbsfn_AreaInfoList_r9",
FT_UINT32, BASE_DEC, NULL, 0,
@@ -36611,7 +36940,7 @@ void proto_register_lte_rrc(void) {
NULL, HFILL }},
{ &hf_lte_rrc_dayLightSavingTime,
{ "dayLightSavingTime", "lte-rrc.dayLightSavingTime",
- FT_BYTES, BASE_NONE, NULL, 0,
+ FT_UINT8, BASE_DEC, VALS(lte_rrc_daylightSavingTime_vals), 0,
NULL, HFILL }},
{ &hf_lte_rrc_leapSeconds,
{ "leapSeconds", "lte-rrc.leapSeconds",
@@ -41315,7 +41644,7 @@ void proto_register_lte_rrc(void) {
NULL, HFILL }},
/*--- End of included file: packet-lte-rrc-hfarr.c ---*/
-#line 1848 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 1926 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
{ &hf_lte_rrc_eutra_cap_feat_group_ind_1,
{ "Indicator 1", "lte-rrc.eutra_cap_feat_group_ind_1",
@@ -41701,6 +42030,66 @@ void proto_register_lte_rrc(void) {
{ "Indicator 132", "lte-rrc.eutra_cap_feat_group_ind_132",
FT_BOOLEAN, BASE_NONE, TFS(&lte_rrc_eutra_cap_feat_group_ind_132_val), 0,
"EUTRA Feature Group Indicator 132", HFILL }},
+ { &hf_lte_rrc_serialNumber_gs,
+ { "Geographical Scope", "lte-rrc.serialNumber.gs",
+ FT_UINT16, BASE_DEC, VALS(lte_rrc_serialNumber_gs_vals), 0xc000,
+ NULL, HFILL }},
+ { &hf_lte_rrc_serialNumber_msg_code,
+ { "Message Code", "lte-rrc.serialNumber.msg_code",
+ FT_UINT16, BASE_DEC, NULL, 0x3ff0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_serialNumber_upd_nb,
+ { "Update Number", "lte-rrc.serialNumber.upd_nb",
+ FT_UINT16, BASE_DEC, NULL, 0x000f,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningType_value,
+ { "Warning Type Value", "lte-rrc.warningType.value",
+ FT_UINT16, BASE_DEC, VALS(lte_rrc_warningType_vals), 0xfe00,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningType_emergency_user_alert,
+ { "Emergency User Alert", "lte-rrc.warningType.emergency_user_alert",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0100,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningType_popup,
+ { "Popup", "lte-rrc.warningType.popup",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0080,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_yr,
+ { "Year", "lte-rrc.warningSecurityInfo.yr",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_mo,
+ { "Month", "lte-rrc.warningSecurityInfo.mo",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_day,
+ { "Day", "lte-rrc.warningSecurityInfo.day",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_hr,
+ { "Hours", "lte-rrc.warningSecurityInfo.hr",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_min,
+ { "Minutes", "lte-rrc.warningSecurityInfo.min",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_sec,
+ { "Seconds", "lte-rrc.warningSecurityInfo.sec",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_tz,
+ { "Time Zone", "lte-rrc.warningSecurityInfo.tz",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningSecurityInfo_digital_signature,
+ { "Digital Signature", "lte-rrc.warningSecurityInfo.digital_signature",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_lte_rrc_warningMessageSegment_decoded,
+ { "Decoded Segment", "lte-rrc.warningMessageSegment.decoded",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
};
/* List of subtrees */
@@ -42746,19 +43135,22 @@ void proto_register_lte_rrc(void) {
&ett_lte_rrc_CandidateCellInfo_r10,
/*--- End of included file: packet-lte-rrc-ettarr.c ---*/
-#line 2239 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 2377 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
&ett_lte_rrc_featureGroupIndicators,
&ett_lte_rrc_featureGroupIndRel9Add,
&ett_lte_rrc_featureGroupIndRel10,
- &ett_lte_rrc_neighCellConfig,
&ett_lte_rrc_absTimeInfo,
&ett_lte_rrc_nas_SecurityParam,
&ett_lte_rrc_targetRAT_MessageContainer,
&ett_lte_rrc_siPsiSibContainer,
&ett_lte_rrc_dedicatedInfoNAS,
- &ett_lte_rrc_daylightSavingTime,
- &ett_lte_rrc_timeInfo
+ &ett_lte_rrc_timeInfo,
+ &ett_lte_rrc_serialNumber,
+ &ett_lte_rrc_warningType,
+ &ett_lte_rrc_warningSecurityInfo,
+ &ett_lte_rrc_dataCodingScheme,
+ &ett_lte_rrc_warningMessageSegment
};
@@ -42796,7 +43188,7 @@ void proto_register_lte_rrc(void) {
/*--- End of included file: packet-lte-rrc-dis-reg.c ---*/
-#line 2273 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 2414 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
}