NAS EPS: upgrade dissector to v16.6.0

This commit is contained in:
Pascal Quantin 2020-11-14 16:35:33 +01:00
parent 62730dc4fe
commit 30ca4b72ec
2 changed files with 391 additions and 157 deletions

View File

@ -1617,7 +1617,7 @@ typedef enum
DE_EMM_TRAC_AREA_ID, /* 9.9.3.32 Tracking area identity */
DE_EMM_TRAC_AREA_ID_LST, /* 9.9.3.33 Tracking area identity list */
DE_EMM_UE_NET_CAP, /* 9.9.3.34 UE network capability */
DE_EMM_UE_RA_CAP_INF_UPD_NEED, /* 9.9.3.35 UE radio capability information update needed */
DE_EMM_UE_RA_CAP_INF_UPD_NEED, /* 9.9.3.35 UE radio capability information update needed */
DE_EMM_UE_SEC_CAP, /* 9.9.3.36 UE security capability */
DE_EMM_EMERG_NUM_LIST, /* 9.9.3.37 Emergency Number List */
DE_EMM_EXT_EMERG_NUM_LIST, /* 9.9.3.37a Extended Emergency Number List */
@ -1641,6 +1641,12 @@ typedef enum
DE_EMM_ADD_INFO_REQ, /* 9.9.3.55 Additional information requested */
DE_EMM_CIPH_KEY_DATA, /* 9.9.3.56 Ciphering key data */
DE_EMM_N1_UE_NETWORK_CAP, /* 9.9.3.57 N1 UE network capability */
DE_EMM_UE_RADIO_CAP_ID_AVAIL, /* 9.9.3.58 UE radio capability ID availability */
DE_EMM_UE_RADIO_CAP_ID_REQ, /* 9.9.3.59 UE radio capability ID request */
DE_EMM_UE_RADIO_CAP_ID, /* 9.9.3.60 UE radio capability ID */
DE_EMM_UE_RADIO_CAP_ID_DEL_IND, /* 9.9.3.61 UE radio capability ID deletion indication */
DE_EMM_WUS_ASSIT_INFO, /* 9.9.3.62 WUS assistance information */
DE_EMM_NB_S1_DRX_PARAM, /* 9.9.3.63 NB-S1 DRX parameter */
DE_EMM_NONE /* NONE */
}
nas_emm_elem_idx_t;

View File

@ -9,7 +9,7 @@
*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* References: 3GPP TS 24.301 V16.1.1 (2019-06)
* References: 3GPP TS 24.301 V16.6.0 (2020-09)
*/
#include "config.h"
@ -45,6 +45,7 @@ static dissector_handle_t nbifom_handle;
static dissector_handle_t ipv4_handle;
static dissector_handle_t ipv6_handle;
static dissector_handle_t non_ip_data_handle;
static dissector_handle_t ethernet_handle;
/* Forward declaration */
static void disect_nas_eps_esm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset);
@ -196,6 +197,11 @@ static int hf_nas_eps_cp_backoff_cap = -1;
static int hf_nas_eps_restrict_ec_cap = -1;
static int hf_nas_eps_v2x_pc5_cap = -1;
static int hf_nas_eps_multiple_drb_cap = -1;
static int hf_nas_eps_v2x_nr_pc5_cap = -1;
static int hf_nas_eps_up_mt_edt_cap = -1;
static int hf_nas_eps_cp_mt_edt_cap = -1;
static int hf_nas_eps_wsua_cap = -1;
static int hf_nas_eps_racs_cap = -1;
static int hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg = -1;
static int hf_nas_eps_emm_ss_code = -1;
static int hf_nas_eps_emm_lcs_ind = -1;
@ -245,51 +251,55 @@ static int hf_nas_eps_emm_5g_ia13 = -1;
static int hf_nas_eps_emm_5g_ia14 = -1;
static int hf_nas_eps_emm_5g_ia15 = -1;
static int hf_nas_eps_emm_cipher_key = -1;
static int hf_emm_ciph_key_data_ciphering_set_id = -1;
static int hf_emm_ciph_key_data_ciphering_key = -1;
static int hf_emm_ciph_key_data_c0_len = -1;
static int hf_emm_ciph_key_data_c0 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_1_1 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_1_2 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_1_3 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_1_4 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_1_5 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_1_6 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_1_7 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_1 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_2 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_3 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_4 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_5 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_6 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_7 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_8 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_9 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_10 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_11 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_12 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_13 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_14 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_15 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_16 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_17 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_18 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_2_19 = -1;
static int hf_emm_ciph_key_data_pos_sib_type_3_1 = -1;
static int hf_emm_ciph_key_data_validity_start_time = -1;
static int hf_emm_ciph_key_data_validity_duration = -1;
static int hf_emm_ciph_key_data_tais_list_len = -1;
static int hf_nas_eps_emm_ciph_key_data_ciphering_set_id = -1;
static int hf_nas_eps_emm_ciph_key_data_ciphering_key = -1;
static int hf_nas_eps_emm_ciph_key_data_c0_len = -1;
static int hf_nas_eps_emm_ciph_key_data_c0 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_1 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_2 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_3 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_4 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_5 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_6 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_7 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_1 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_2 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_3 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_4 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_5 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_6 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_7 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_8 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_9 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_10 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_11 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_12 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_13 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_14 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_15 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_16 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_17 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_18 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_19 = -1;
static int hf_nas_eps_emm_ciph_key_data_pos_sib_type_3_1 = -1;
static int hf_nas_eps_emm_ciph_key_data_validity_start_time = -1;
static int hf_nas_eps_emm_ciph_key_data_validity_duration = -1;
static int hf_nas_eps_emm_ciph_key_data_tais_list_len = -1;
static int hf_nas_eps_emm_detach_req_UL = -1;
static int hf_nas_eps_emm_detach_req_DL = -1;
static int hf_nas_eps_emm_switch_off = -1;
static int hf_nas_eps_emm_detach_type_UL = -1;
static int hf_nas_eps_emm_detach_type_DL = -1;
static int hf_emm_5g_up_ciot_b3 = -1;
static int hf_emm_5g_hc_cp_ciot = -1;
static int hf_emm_n3_data = -1;
static int hf_emm_5g_cp_ciot = -1;
static int hf_nas_eps_emm_5gs_pnb_ciot = -1;
static int hf_nas_eps_emm_5g_up_ciot = -1;
static int hf_nas_eps_emm_5g_hc_cp_ciot = -1;
static int hf_nas_eps_emm_n3_data = -1;
static int hf_nas_eps_emm_5g_cp_ciot = -1;
static int hf_nas_eps_emm_ue_radio_cap_id_available = -1;
static int hf_nas_eps_emm_ue_radio_cap_id_availability = -1;
static int hf_nas_eps_emm_wus_assist_info_type = -1;
static int hf_nas_eps_emm_wus_assist_info_ue_paging_prob = -1;
static int hf_nas_eps_emm_nb_s1_drx_param = -1;
static int hf_nas_eps_esm_qci = -1;
static int hf_nas_eps_esm_mbr_ul = -1;
@ -380,8 +390,6 @@ static int hf_nas_eps_gen_msg_cont = -1;
static int hf_nas_eps_cmn_add_info = -1;
static int hf_nas_eps_esm_request_type = -1;
static int hf_nas_eps_spare_b7_b4 = -1;
/* ESM */
static int hf_nas_eps_msg_esm_type = -1;
int hf_nas_eps_esm_elem_id = -1;
@ -398,6 +406,7 @@ static int ett_nas_eps_esm_user_data_cont = -1;
static int ett_nas_eps_replayed_nas_msg_cont = -1;
static int ett_nas_eps_ext_emerg_num = -1;
static int ett_nas_eps_ciph_data_set = -1;
static int ett_nas_eps_wus_assist_info_type = -1;
static expert_field ei_nas_eps_extraneous_data = EI_INIT;
static expert_field ei_nas_eps_unknown_identity = EI_INIT;
@ -415,12 +424,14 @@ static gboolean g_nas_eps_null_decipher = TRUE;
enum {
DECODE_USER_DATA_AS_NONE,
DECODE_USER_DATA_AS_IP,
DECODE_USER_DATA_AS_NON_IP
DECODE_USER_DATA_AS_NON_IP,
DECODE_USER_DATA_AS_ETHERNET
};
static const enum_val_t nas_eps_user_data_container_as_vals[] = {
{"none", "None", DECODE_USER_DATA_AS_NONE},
{"ip", "IP", DECODE_USER_DATA_AS_IP},
{"non_ip","Non IP", DECODE_USER_DATA_AS_NON_IP},
{"ethernet","Ethernet", DECODE_USER_DATA_AS_ETHERNET},
{NULL, NULL, -1}
};
static gint g_nas_eps_decode_user_data_container_as = DECODE_USER_DATA_AS_NONE;
@ -884,13 +895,12 @@ static const value_string nas_emm_elem_strings[] = {
{ DE_EMM_ADD_INFO_REQ, "Additional information requested" }, /* 9.9.3.55 Additional information requested */
{ DE_EMM_CIPH_KEY_DATA, "Ciphering key data" }, /* 9.9.3.56 Ciphering key data */
{ DE_EMM_N1_UE_NETWORK_CAP, "N1 UE network capability" }, /* 9.9.3.57 N1 UE network capability */
/*
* 9.9.3.58 UE radio capability ID availability
* 9.9.3.59 UE radio capability ID request
* 9.9.3.60 UE radio capability ID
* 9.9.3.61 UE radio capability ID deletion indication
* 9.9.3.62 WUS assistance information
*/
{ DE_EMM_UE_RADIO_CAP_ID_AVAIL, "UE radio capability ID availability" }, /* 9.9.3.58 UE radio capability ID availability */
{ DE_EMM_UE_RADIO_CAP_ID_REQ, "UE radio capability ID request" }, /* 9.9.3.59 UE radio capability ID request */
{ DE_EMM_UE_RADIO_CAP_ID, "UE radio capability ID" }, /* 9.9.3.60 UE radio capability ID */
{ DE_EMM_UE_RADIO_CAP_ID_DEL_IND, "UE radio capability ID deletion indication" }, /* 9.9.3.61 UE radio capability ID deletion indication */
{ DE_EMM_WUS_ASSIT_INFO, "WUS assistance information" }, /* 9.9.3.62 WUS assistance information */
{ DE_EMM_NB_S1_DRX_PARAM, "NB-S1 DRX parameter" }, /* 9.9.3.63 NB-S1 DRX parameter */
{ 0, NULL }
};
@ -978,6 +988,12 @@ typedef enum
DE_EMM_ADD_INFO_REQ /* 9.9.3.55 Additional information requested */
DE_EMM_CIPH_KEY_DATA, /* 9.9.3.56 Ciphering key data */
DE_EMM_N1_UE_NETWORK_CAP, /* 9.9.3.57 N1 UE network capability */
DE_EMM_UE_RADIO_CAP_ID_AVAIL, /* 9.9.3.58 UE radio capability ID availability */
DE_EMM_UE_RADIO_CAP_ID_REQ, /* 9.9.3.59 UE radio capability ID request */
DE_EMM_UE_RADIO_CAP_ID, /* 9.9.3.60 UE radio capability ID */
DE_EMM_UE_RADIO_CAP_ID_DEL_IND, /* 9.9.3.61 UE radio capability ID deletion indication */
DE_EMM_WUS_ASSIT_INFO, /* 9.9.3.62 WUS assistance information */
DE_EMM_NB_S1_DRX_PARAM, /* 9.9.3.63 NB-S1 DRX parameter */
DE_EMM_NONE /* NONE */
}
nas_emm_elem_idx_t;
@ -1018,7 +1034,7 @@ de_emm_add_upd_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
*/
static const value_string nas_eps_emm_pnb_ciot_vals[] = {
{ 0x0, "No additional information"},
{ 0x1, "Control-plane CIoT EPS optimization"},
{ 0x1, "Control plane CIoT EPS optimization"},
{ 0x2, "User plane CIoT EPS optimization"},
{ 0x3, "Reserved"},
{ 0, NULL }
@ -1292,7 +1308,7 @@ static const value_string nas_eps_emm_eps_att_type_vals[] = {
{ 0, "EPS attach(unused)"},
{ 1, "EPS attach"},
{ 2, "Combined EPS/IMSI attach"},
{ 3, "EPS attach(unused)"},
{ 3, "EPS RLOS attach"},
{ 4, "EPS attach(unused)"},
{ 5, "EPS attach(unused)"},
{ 6, "EPS emergency attach"},
@ -1608,8 +1624,8 @@ de_emm_nas_ksi_and_seq_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U
* Type of security context flag (TSC) (octet 1)
*/
static const true_false_string nas_eps_tsc_value = {
"Mapped security context (for KSIsgsn)",
"Native security context (for KSIasme)"
"Mapped security context (for KSIsgsn or KSIamf)",
"Native security context (for KSIasme or KSIamf)"
};
/* NAS key set identifier (octet 1) Bits 3 2 1 */
@ -2119,6 +2135,15 @@ de_emm_ue_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
NULL
};
static int * const oct10_flags[] = {
&hf_nas_eps_v2x_nr_pc5_cap,
&hf_nas_eps_up_mt_edt_cap,
&hf_nas_eps_cp_mt_edt_cap,
&hf_nas_eps_wsua_cap,
&hf_nas_eps_racs_cap,
NULL
};
curr_offset = offset;
@ -2177,6 +2202,16 @@ de_emm_ue_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, oct9_flags, ENC_NA);
curr_offset++;
if ((curr_offset - offset) >= len)
return (len);
/* Octet 10
* 0 0 0 V2X NR-PC5 UP-MT-EDT CP-MT-EDT WSUA RACS
*/
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 3, ENC_BIG_ENDIAN);
proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, oct10_flags, ENC_NA);
curr_offset++;
while ((curr_offset - offset) < len) {
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 8, ENC_BIG_ENDIAN);
curr_offset++;
@ -2728,56 +2763,56 @@ de_emm_ciph_key_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
while ((curr_offset - offset) < len) {
static int * const flags1[] = {
&hf_emm_ciph_key_data_pos_sib_type_1_1,
&hf_emm_ciph_key_data_pos_sib_type_1_2,
&hf_emm_ciph_key_data_pos_sib_type_1_3,
&hf_emm_ciph_key_data_pos_sib_type_1_4,
&hf_emm_ciph_key_data_pos_sib_type_1_5,
&hf_emm_ciph_key_data_pos_sib_type_1_6,
&hf_emm_ciph_key_data_pos_sib_type_1_7,
&hf_emm_ciph_key_data_pos_sib_type_2_1,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_1,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_2,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_3,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_4,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_5,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_6,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_7,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_1,
NULL
};
static int * const flags2[] = {
&hf_emm_ciph_key_data_pos_sib_type_2_2,
&hf_emm_ciph_key_data_pos_sib_type_2_3,
&hf_emm_ciph_key_data_pos_sib_type_2_4,
&hf_emm_ciph_key_data_pos_sib_type_2_5,
&hf_emm_ciph_key_data_pos_sib_type_2_6,
&hf_emm_ciph_key_data_pos_sib_type_2_7,
&hf_emm_ciph_key_data_pos_sib_type_2_8,
&hf_emm_ciph_key_data_pos_sib_type_2_9,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_2,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_3,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_4,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_5,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_6,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_7,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_8,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_9,
NULL
};
static int * const flags3[] = {
&hf_emm_ciph_key_data_pos_sib_type_2_10,
&hf_emm_ciph_key_data_pos_sib_type_2_11,
&hf_emm_ciph_key_data_pos_sib_type_2_12,
&hf_emm_ciph_key_data_pos_sib_type_2_13,
&hf_emm_ciph_key_data_pos_sib_type_2_14,
&hf_emm_ciph_key_data_pos_sib_type_2_15,
&hf_emm_ciph_key_data_pos_sib_type_2_16,
&hf_emm_ciph_key_data_pos_sib_type_2_17,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_10,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_11,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_12,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_13,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_14,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_15,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_16,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_17,
NULL
};
static int * const flags4[] = {
&hf_emm_ciph_key_data_pos_sib_type_2_18,
&hf_emm_ciph_key_data_pos_sib_type_2_19,
&hf_emm_ciph_key_data_pos_sib_type_3_1,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_18,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_19,
&hf_nas_eps_emm_ciph_key_data_pos_sib_type_3_1,
NULL
};
saved_offset = curr_offset;
sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_eps_ciph_data_set,
&pi, "Ciphering data set #%u", i++);
proto_tree_add_item(sub_tree, hf_emm_ciph_key_data_ciphering_set_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
proto_tree_add_item(sub_tree, hf_nas_eps_emm_ciph_key_data_ciphering_set_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
proto_tree_add_item(sub_tree, hf_emm_ciph_key_data_ciphering_key, tvb, curr_offset, 16, ENC_NA);
proto_tree_add_item(sub_tree, hf_nas_eps_emm_ciph_key_data_ciphering_key, tvb, curr_offset, 16, ENC_NA);
curr_offset += 16;
proto_tree_add_bits_item(sub_tree, hf_nas_eps_spare_bits, tvb, offset<<3, 3, ENC_BIG_ENDIAN);
proto_tree_add_item_ret_uint(sub_tree, hf_emm_ciph_key_data_c0_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &c0_len);
proto_tree_add_item_ret_uint(sub_tree, hf_nas_eps_emm_ciph_key_data_c0_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &c0_len);
curr_offset++;
if (c0_len) {
proto_tree_add_item(sub_tree, hf_emm_ciph_key_data_c0, tvb, curr_offset, c0_len, ENC_NA);
proto_tree_add_item(sub_tree, hf_nas_eps_emm_ciph_key_data_c0, tvb, curr_offset, c0_len, ENC_NA);
curr_offset += c0_len;
}
proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, flags1, ENC_NA);
@ -2804,12 +2839,12 @@ de_emm_ciph_key_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
tm.tm_sec = 0;
tv.secs = mktime(&tm);
tv.nsecs = 0;
proto_tree_add_time_format_value(sub_tree, hf_emm_ciph_key_data_validity_start_time, tvb, curr_offset, 5, &tv,
proto_tree_add_time_format_value(sub_tree, hf_nas_eps_emm_ciph_key_data_validity_start_time, tvb, curr_offset, 5, &tv,
"%s", abs_time_to_str(wmem_packet_scope(), &tv, ABSOLUTE_TIME_LOCAL, FALSE));
curr_offset += 5;
proto_tree_add_item(sub_tree, hf_emm_ciph_key_data_validity_duration, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
proto_tree_add_item(sub_tree, hf_nas_eps_emm_ciph_key_data_validity_duration, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
proto_tree_add_item_ret_uint(sub_tree, hf_emm_ciph_key_data_tais_list_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &tai_len);
proto_tree_add_item_ret_uint(sub_tree, hf_nas_eps_emm_ciph_key_data_tais_list_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &tai_len);
curr_offset++;
if (tai_len) {
de_emm_trac_area_id_lst(tvb, sub_tree, pinfo, curr_offset, tai_len, NULL, 0);
@ -2824,19 +2859,28 @@ de_emm_ciph_key_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
/*
* 9.9.3.57 N1 UE network capability
*/
static const value_string nas_eps_emm_5gs_pnb_ciot_vals[] = {
{ 0x0, "No additional information"},
{ 0x1, "Control plane CIoT 5GS optimization"},
{ 0x2, "User plane CIoT 5GS optimization"},
{ 0x3, "Reserved"},
{ 0, NULL }
};
static guint16
de_emm_n1_ue_network_cap(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
guint32 offset, guint len _U_, gchar* add_string _U_, int string_len _U_)
{
static int* const flags_oct1[] = {
&hf_nas_eps_spare_b7_b4,
&hf_emm_5g_up_ciot_b3,
&hf_emm_5g_hc_cp_ciot,
&hf_emm_n3_data,
&hf_emm_5g_cp_ciot,
&hf_nas_eps_emm_5gs_pnb_ciot,
&hf_nas_eps_emm_5g_up_ciot,
&hf_nas_eps_emm_5g_hc_cp_ciot,
&hf_nas_eps_emm_n3_data,
&hf_nas_eps_emm_5g_cp_ciot,
NULL
};
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (offset<<3), 2, ENC_BIG_ENDIAN);
proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_oct1, ENC_NA);
return 1;
@ -2844,14 +2888,108 @@ de_emm_n1_ue_network_cap(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_
/*
* 9.9.3.58 UE radio capability ID availability
*/
static const value_string nas_eps_emm_ue_radio_cap_id_avail_vals[] = {
{ 0x0, "Not available"},
{ 0x1, "Available"},
{ 0, NULL }
};
static guint16
de_emm_ue_radio_cap_id_avail(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
guint32 offset, guint len _U_, gchar* add_string _U_, int string_len _U_)
{
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (offset<<3)+4, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_nas_eps_emm_ue_radio_cap_id_available, tvb, offset, 1, ENC_BIG_ENDIAN);
return 1;
}
/*
* 9.9.3.59 UE radio capability ID request
* 9.9.3.60 UE radio capability ID
*/
static guint16
de_emm_ue_radio_cap_id_req(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
guint32 offset, guint len _U_, gchar* add_string _U_, int string_len _U_)
{
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (offset<<3), 7, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_nas_eps_emm_ue_radio_cap_id_availability, tvb, offset, 1, ENC_BIG_ENDIAN);
return 1;
}
/* 9.9.3.60 UE radio capability ID
* See subclause 9.11.3.65 in 3GPP TS 24.501
* 9.9.3.61 UE radio capability ID deletion indication
* See subclause 9.11.3.zz in 3GPP TS 24.501
* 9.9.3.62 WUS assistance information
*/
/* 9.9.3.61 UE radio capability ID deletion indication
* See subclause 9.11.3.zz in 3GPP TS 24.501
*/
/*
* 9.9.3.62 WUS assistance information
*/
static const value_string nas_eps_emm_wus_assist_info_type_vals[] = {
{ 0x0, "UE paging probability information"},
{ 0, NULL }
};
static void
de_emm_wus_assist_info_ue_paging_prob_fmt(gchar *s, guint32 val)
{
if (val < 20) {
g_snprintf(s, ITEM_LABEL_LENGTH, "p%u (%u)", val*5, val);
} else {
g_snprintf(s, ITEM_LABEL_LENGTH, "p100 (%u)", val);
}
}
static guint16
de_emm_wus_assist_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
guint32 offset, guint len, gchar* add_string _U_, int string_len _U_)
{
guint32 curr_offset = offset;
guint count = 1;
while ((curr_offset - offset) < len) {
guint32 type;
proto_tree *subtree;
subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 1, ett_nas_eps_wus_assist_info_type,
NULL, "WUS assistance information type %u", count);
proto_tree_add_item_ret_uint(subtree, hf_nas_eps_emm_wus_assist_info_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &type);
if (type == 0) {
proto_tree_add_item(subtree, hf_nas_eps_emm_wus_assist_info_ue_paging_prob, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
curr_offset++;
count++;
}
return len;
}
/*
* 9.9.3.62 NB-S1 DRX parameter
*/
static const value_string nas_eps_emm_nb_s1_drx_params_vals[] = {
{ 0x0, "DRX value not specified and use cell specific DRX value"},
{ 0x1, "DRX cycle parameter T = 32"},
{ 0x2, "DRX cycle parameter T = 64"},
{ 0x3, "DRX cycle parameter T = 128"},
{ 0x4, "DRX cycle parameter T = 256"},
{ 0x5, "DRX cycle parameter T = 512"},
{ 0x6, "DRX cycle parameter T = 1024"},
{ 0, NULL }
};
static guint16
de_emm_nb_s1_drx_param(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
guint32 offset, guint len _U_, gchar* add_string _U_, int string_len _U_)
{
proto_tree_add_item(tree, hf_nas_eps_emm_nb_s1_drx_param, tvb, offset, 1, ENC_BIG_ENDIAN);
return 1;
}
/*
* 9.9.4 EPS Session Management (ESM) information elements
@ -3219,6 +3357,7 @@ const value_string nas_eps_esm_cause_vals[] = {
{ 0x3a, "PDN type non IP only allowed"},
{ 0x3b, "Unsupported QCI value"},
{ 0x3c, "Bearer handling not supported"},
{ 0x3d, "PDN type Ethernet only allowed"},
{ 0x41, "Maximum number of EPS bearers reached"},
{ 0x42, "Requested APN not supported in current RAT and PLMN combination"},
{ 0x51, "Invalid PTI value"},
@ -3388,6 +3527,7 @@ de_esm_pdn_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
curr_offset+=4;
break;
case 5:
case 6:
curr_offset+=4;
break;
default:
@ -3407,6 +3547,7 @@ static const value_string nas_eps_esm_pdn_type_values[] = {
{ 0x3, "IPv4v6" },
{ 0x4, "Unused; shall be interpreted as IPv6 if received by the network" },
{ 0x5, "Non IP" },
{ 0x6, "Ethernet" },
{ 0, NULL }
};
@ -3432,8 +3573,8 @@ const true_false_string nas_eps_esm_eplmnc_value = {
};
const true_false_string nas_eps_esm_ratc_value = {
"UE is not allowed to re-attempt the procedure in A/Gb mode or Iu mode",
"UE is allowed to re-attempt the procedure in A/Gb mode or Iu mode"
"UE is not allowed to re-attempt the procedure in A/Gb mode or Iu mode or N1 mode",
"UE is allowed to re-attempt the procedure in A/Gb mode or Iu mode or N1 mode"
};
static guint16
@ -3735,8 +3876,10 @@ de_esm_user_data_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
handle = ipv6_handle;
else
handle = NULL;
} else {
} else if (g_nas_eps_decode_user_data_container_as == DECODE_USER_DATA_AS_NON_IP) {
handle = non_ip_data_handle;
} else {
handle = ethernet_handle;
}
if (handle) {
col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
@ -3760,7 +3903,7 @@ de_esm_user_data_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
*/
static const value_string nas_eps_esm_rel_assist_ind_ddx_vals[] = {
{ 0x00, "No information available" },
{ 0x01, "No further uplink or downlink data transmission subsequent to the uplink data transmission is expected" },
{ 0x01, "No further uplink and no further downlink data transmission subsequent to the uplink data transmission is expected" },
{ 0x02, "Only a single downlink data transmission and no further uplink data transmission subsequent to the uplink data transmission is expected" },
{ 0x03, "Reserved" },
{ 0, NULL}
@ -4076,13 +4219,12 @@ guint16 (*emm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g
de_emm_add_info_req, /* 9.9.3.55 Additional information requested */
de_emm_ciph_key_data, /* 9.9.3.56 Ciphering key data */
de_emm_n1_ue_network_cap, /* 9.9.3.57 N1 UE network capability */
/*
* 9.9.3.58 UE radio capability ID availability
* 9.9.3.59 UE radio capability ID request
* 9.9.3.60 UE radio capability ID
* 9.9.3.61 UE radio capability ID deletion indication
* 9.9.3.62 WUS assistance information
*/
de_emm_ue_radio_cap_id_avail, /* 9.9.3.58 UE radio capability ID availability */
de_emm_ue_radio_cap_id_req, /* 9.9.3.59 UE radio capability ID request */
NULL, /* 9.9.3.60 UE radio capability ID */
NULL, /* 9.9.3.61 UE radio capability ID deletion indication */
de_emm_wus_assist_info, /* 9.9.3.62 WUS assistance information */
de_emm_nb_s1_drx_param, /* 9.9.3.63 NB-S1 DRX parameter */
NULL, /* NONE */
};
@ -4286,6 +4428,14 @@ nas_emm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV_E(0x7A, NAS_PDU_TYPE_EMM, DE_EMM_EXT_EMERG_NUM_LIST, NULL);
/* 7C Ciphering key data Ciphering key data 9.9.3.56 O TLV-E 35-2291 */
ELEM_OPT_TLV_E(0x7C, NAS_PDU_TYPE_EMM, DE_EMM_CIPH_KEY_DATA, NULL);
/* 66 UE radio capability ID UE radio capability ID 9.9.3.60 O TLV 3-n */
ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID, NULL);
/* B- UE radio capability ID deletion indication UE radio capability ID deletion indication O TV 1 */
ELEM_OPT_TV_SHORT(0xB0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID_DEL_IND, NULL);
/* XX Negotiated WUS assistance information WUS assistance information 9.9.3.62 O TLV 3-n */
//ELEM_OPT_TLV(0xXX, NAS_PDU_TYPE_EMM, DE_EMM_WUS_ASSIT_INFO, " - Negotiated WUS assistance information");
/* K- Negotiated DRX parameter in NB-S1 mode NB-S1 DRX parameter 9.9.3.63 O TC 1 */
//ELEM_OPT_TV_SHORT(0xK0, NAS_PDU_TYPE_EMM, DE_EMM_NB_S1_DRX_PARAM, " - Negotiated DRX parameter in NB-S1 mode");
EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_eps_extraneous_data);
}
@ -4422,8 +4572,14 @@ nas_emm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV(0x6D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_STATUS, NULL);
/* 17 Additional information requested Additional information requested 9.9.3.55 O TV 2 */
ELEM_OPT_TV(0x17, NAS_PDU_TYPE_EMM, DE_EMM_ADD_INFO_REQ, NULL);
/* 32 N1 UE network capability N1 UE network capability 9.9.3.57 O TLV 3-15 */
/* 32 N1 UE network capability N1 UE network capability 9.9.3.57 O TLV 3-15 */
ELEM_OPT_TLV(0x32, NAS_PDU_TYPE_EMM, DE_EMM_N1_UE_NETWORK_CAP, NULL);
/* TBC UE radio capability ID availability UE radio capability ID availability O TLV 3 */
//ELEM_OPT_TLV(TBC, NAS_PDU_TYPE_EMM, DE_EMM_UE_RADIO_CAP_ID_AVAIL, NULL);
/* XX Requested WUS assistance WUS assistance information O TLV 3-n */
//ELEM_OPT_TLV(0xXX, NAS_PDU_TYPE_EMM, DE_EMM_WUS_ASSIT_INFO, " - Requested WUS assistance");
/* K- DRX parameter in NB-S1 mode NB-S1 DRX parameter 9.9.3.63 O TC 1 */
//ELEM_OPT_TV_SHORT(0xK0, NAS_PDU_TYPE_EMM, DE_EMM_NB_S1_DRX_PARAM, NULL);
EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_eps_extraneous_data);
}
@ -4775,12 +4931,14 @@ nas_emm_guti_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu
/* GUTI EPS mobile identity 9.9.3.12 M LV 12 */
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI", ei_nas_eps_missing_mandatory_elemen);
/* 54 TAI list Tracking area identity list 9.9.3.33 O TLV 8-98 */
ELEM_OPT_TLV(0x54, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID_LST, NULL);
/* 65 DCN-ID DCN-ID 9.9.3.48 O TLV 4 */
ELEM_OPT_TLV(0x65, GSM_A_PDU_TYPE_GM, DE_DCN_ID, NULL);
/* 66 UE radio capability ID UE radio capability ID 9.9.3.60 O TLV 3-n */
ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID, NULL);
/* B- UE radio capability ID deletion indication UE radio capability ID deletion indication O TV 1 */
ELEM_OPT_TV_SHORT(0xB0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID_DEL_IND, NULL);
EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_eps_extraneous_data);
}
@ -4879,7 +5037,7 @@ nas_emm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
/* Replayed UE security capabilities UE security capability 9.9.3.36 M LV 3-6 */
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_UE_SEC_CAP, " - Replayed UE security capabilities", ei_nas_eps_missing_mandatory_elemen);
/* C- IMEISV request IMEISV request 9.9.3.18 O TV 1 */
ELEM_OPT_TV_SHORT( 0xC0 , NAS_PDU_TYPE_EMM, DE_EMM_IMEISV_REQ , NULL );
ELEM_OPT_TV_SHORT(0xC0, NAS_PDU_TYPE_EMM, DE_EMM_IMEISV_REQ , NULL );
/* 55 Replayed NonceUE Nonce 9.9.3.25 O TV 5 */
ELEM_OPT_TV(0x55, NAS_PDU_TYPE_EMM, DE_EMM_NONCE, " - Replayed NonceUE");
/* 56 NonceMME Nonce 9.9.3.25 O TV 5 */
@ -4888,6 +5046,8 @@ nas_emm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
ELEM_OPT_TLV(0x4F, NAS_PDU_TYPE_EMM, DE_EMM_HASH_MME, NULL);
/* 6F Replayed UE additional security capability UE additional security capability 9.9.3.53 O TLV 6 */
ELEM_OPT_TLV(0x6F, NAS_PDU_TYPE_EMM, DE_EMM_UE_ADD_SEC_CAP, " - Replayed UE additional security capability");
/* D- UE radio capability ID request UE radio capability ID request 9.9.3.59 O TV 1 */
ELEM_OPT_TV_SHORT(0xD0, NAS_PDU_TYPE_EMM, DE_EMM_UE_RADIO_CAP_ID_REQ, NULL);
EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_eps_extraneous_data);
}
@ -4910,6 +5070,8 @@ nas_emm_sec_mode_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint
ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - IMEISV");
/* 79 Replayed NAS message container Replayed NAS message container 9.9.3.51 O TLV-E 3-n */
ELEM_OPT_TLV_E(0x79, NAS_PDU_TYPE_EMM, DE_EMM_REPLAYED_NAS_MSG_CONT, NULL);
/* 66 UE radio capability ID UE radio capability ID 9.9.3.60 O TLV 3-n */
ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID, NULL);
EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_eps_extraneous_data);
}
@ -5070,6 +5232,14 @@ nas_emm_trac_area_upd_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g
ELEM_OPT_TLV_E(0x7A, NAS_PDU_TYPE_EMM, DE_EMM_EXT_EMERG_NUM_LIST, NULL);
/* 7C Ciphering key data Ciphering key data 9.9.3.56 O TLV-E 35-2291 */
ELEM_OPT_TLV_E(0x7C, NAS_PDU_TYPE_EMM, DE_EMM_CIPH_KEY_DATA, NULL);
/* 66 UE radio capability ID UE radio capability ID 9.9.3.60 O TLV 3-n */
ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID, NULL);
/* B- UE radio capability ID deletion indication UE radio capability ID deletion indication O TV 1 */
ELEM_OPT_TV_SHORT(0xB0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID_DEL_IND, NULL);
/* XX Negotiated WUS assistance information WUS assistance information 9.9.3.62 O TLV 3-n */
//ELEM_OPT_TLV(0xXX, NAS_PDU_TYPE_EMM, DE_EMM_WUS_ASSIT_INFO, " - Negotiated WUS assistance information");
/* K- Negotiated DRX parameter in NB-S1 mode NB-S1 DRX parameter 9.9.3.63 O TC 1 */
//ELEM_OPT_TV_SHORT(0xK0, NAS_PDU_TYPE_EMM, DE_EMM_NB_S1_DRX_PARAM, " - Negotiated DRX parameter in NB-S1 mode");
EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_eps_extraneous_data);
}
@ -5192,8 +5362,14 @@ nas_emm_trac_area_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g
ELEM_OPT_TLV(0x6D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_STATUS, NULL);
/* 17 Additional information requested Additional information requested 9.9.3.55 O TV 2 */
ELEM_OPT_TV(0x17, NAS_PDU_TYPE_EMM, DE_EMM_ADD_INFO_REQ, NULL);
/* 32 N1 UE network capability N1 UE network capability 9.9.3.57 O TLV 3-15 */
/* 32 N1 UE network capability N1 UE network capability 9.9.3.57 O TLV 3-15 */
ELEM_OPT_TLV(0x32, NAS_PDU_TYPE_EMM, DE_EMM_N1_UE_NETWORK_CAP, NULL);
/* TBC UE radio capability ID availability UE radio capability ID availability O TLV 3 */
//ELEM_OPT_TLV(TBC, NAS_PDU_TYPE_EMM, DE_EMM_UE_RADIO_CAP_ID_AVAIL, NULL);
/* XX Requested WUS assistance WUS assistance information O TLV 3-n */
//ELEM_OPT_TLV(0xXX, NAS_PDU_TYPE_EMM, DE_EMM_WUS_ASSIT_INFO, " - Requested WUS assistance");
/* K- DRX parameter in NB-S1 mode NB-S1 DRX parameter 9.9.3.63 O TC 1 */
//ELEM_OPT_TV_SHORT(0xK0, NAS_PDU_TYPE_EMM, DE_EMM_NB_S1_DRX_PARAM, NULL);
EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_eps_extraneous_data);
}
@ -7388,6 +7564,31 @@ proto_register_nas_eps(void)
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
NULL, HFILL }
},
{ &hf_nas_eps_v2x_nr_pc5_cap,
{ "V2X communication over NR-PC5","nas_eps.emm.v2x_nr_pc5_cap",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
NULL, HFILL }
},
{ &hf_nas_eps_up_mt_edt_cap,
{ "User plane Mobile Terminated-Early Data Transmission","nas_eps.emm.up_mt_edt_cap",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
NULL, HFILL }
},
{ &hf_nas_eps_cp_mt_edt_cap,
{ "Control plane Mobile Terminated-Early Data Transmission","nas_eps.emm.cp_mt_edt_cap",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
NULL, HFILL }
},
{ &hf_nas_eps_wsua_cap,
{ "Wake-up signal assistance","nas_eps.emm.wsua_cap",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
NULL, HFILL }
},
{ &hf_nas_eps_racs_cap,
{ "Radio capability signaling optimisation","nas_eps.emm.racs_cap",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
NULL, HFILL }
},
{ &hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg,
{ "URC upd","nas_eps.emm.ue_ra_cap_inf_upd_need_flg",
FT_BOOLEAN, 8, TFS(&nas_eps_emm_ue_ra_cap_inf_upd_need_flg), 0x01,
@ -7633,172 +7834,172 @@ proto_register_nas_eps(void)
FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_ciphering_set_id,
{ &hf_nas_eps_emm_ciph_key_data_ciphering_set_id,
{ "Ciphering set ID","nas_eps.emm.ciph_key_data.ciphering_set_id",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_ciphering_key,
{ &hf_nas_eps_emm_ciph_key_data_ciphering_key,
{ "Ciphering key","nas_eps.emm.ciph_key_data.ciphering_key",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_c0_len,
{ &hf_nas_eps_emm_ciph_key_data_c0_len,
{ "c0 length","nas_eps.emm.ciph_key_data.c0_len",
FT_UINT8, BASE_DEC, NULL, 0x1f,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_c0,
{ &hf_nas_eps_emm_ciph_key_data_c0,
{ "c0","nas_eps.emm.ciph_key_data.c0",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_1_1,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_1,
{ "Ciphering data set for positioning SIB type 1-1","nas_eps.emm.ciph_key_data.pos_sib_type_1_1",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x80,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_1_2,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_2,
{ "Ciphering data set for positioning SIB type 1-2","nas_eps.emm.ciph_key_data.pos_sib_type_1_2",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x40,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_1_3,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_3,
{ "Ciphering data set for positioning SIB type 1-3","nas_eps.emm.ciph_key_data.pos_sib_type_1_3",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x20,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_1_4,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_4,
{ "Ciphering data set for positioning SIB type 1-4","nas_eps.emm.ciph_key_data.pos_sib_type_1_4",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x10,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_1_5,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_5,
{ "Ciphering data set for positioning SIB type 1-5","nas_eps.emm.ciph_key_data.pos_sib_type_1_5",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x08,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_1_6,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_6,
{ "Ciphering data set for positioning SIB type 1-6","nas_eps.emm.ciph_key_data.pos_sib_type_1_6",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x04,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_1_7,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_1_7,
{ "Ciphering data set for positioning SIB type 1-7","nas_eps.emm.ciph_key_data.pos_sib_type_1_7",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x02,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_1,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_1,
{ "Ciphering data set for positioning SIB type 2-1","nas_eps.emm.ciph_key_data.pos_sib_type_2_1",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x01,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_2,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_2,
{ "Ciphering data set for positioning SIB type 2-2","nas_eps.emm.ciph_key_data.pos_sib_type_2_2",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x80,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_3,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_3,
{ "Ciphering data set for positioning SIB type 2-3","nas_eps.emm.ciph_key_data.pos_sib_type_2_3",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x40,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_4,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_4,
{ "Ciphering data set for positioning SIB type 2-4","nas_eps.emm.ciph_key_data.pos_sib_type_2_4",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x20,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_5,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_5,
{ "Ciphering data set for positioning SIB type 2-5","nas_eps.emm.ciph_key_data.pos_sib_type_2_5",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x10,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_6,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_6,
{ "Ciphering data set for positioning SIB type 2-6","nas_eps.emm.ciph_key_data.pos_sib_type_2_6",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x08,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_7,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_7,
{ "Ciphering data set for positioning SIB type 2-7","nas_eps.emm.ciph_key_data.pos_sib_type_2_7",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x04,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_8,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_8,
{ "Ciphering data set for positioning SIB type 2-8","nas_eps.emm.ciph_key_data.pos_sib_type_2_8",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x02,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_9,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_9,
{ "Ciphering data set for positioning SIB type 2-9","nas_eps.emm.ciph_key_data.pos_sib_type_2_9",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x01,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_10,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_10,
{ "Ciphering data set for positioning SIB type 2-10","nas_eps.emm.ciph_key_data.pos_sib_type_2_10",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x80,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_11,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_11,
{ "Ciphering data set for positioning SIB type 2-11","nas_eps.emm.ciph_key_data.pos_sib_type_2_11",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x40,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_12,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_12,
{ "Ciphering data set for positioning SIB type 2-12","nas_eps.emm.ciph_key_data.pos_sib_type_2_12",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x20,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_13,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_13,
{ "Ciphering data set for positioning SIB type 2-13","nas_eps.emm.ciph_key_data.pos_sib_type_2_13",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x10,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_14,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_14,
{ "Ciphering data set for positioning SIB type 2-14","nas_eps.emm.ciph_key_data.pos_sib_type_2_14",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x08,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_15,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_15,
{ "Ciphering data set for positioning SIB type 2-15","nas_eps.emm.ciph_key_data.pos_sib_type_2_15",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x04,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_16,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_16,
{ "Ciphering data set for positioning SIB type 2-16","nas_eps.emm.ciph_key_data.pos_sib_type_2_16",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x02,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_17,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_17,
{ "Ciphering data set for positioning SIB type 2-17","nas_eps.emm.ciph_key_data.pos_sib_type_2_17",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x01,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_18,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_18,
{ "Ciphering data set for positioning SIB type 2-18","nas_eps.emm.ciph_key_data.pos_sib_type_2_18",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x80,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_2_19,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_2_19,
{ "Ciphering data set for positioning SIB type 2-19","nas_eps.emm.ciph_key_data.pos_sib_type_2_19",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x40,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_pos_sib_type_3_1,
{ &hf_nas_eps_emm_ciph_key_data_pos_sib_type_3_1,
{ "Ciphering data set for positioning SIB type 3-1","nas_eps.emm.ciph_key_data.pos_sib_type_3_1",
FT_BOOLEAN, 8, TFS(&emm_applicable_not_applicable), 0x20,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_validity_start_time,
{ &hf_nas_eps_emm_ciph_key_data_validity_start_time,
{ "Validity start time", "nas_eps.emm.ciph_key_data.validity_start_time",
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_validity_duration,
{ &hf_nas_eps_emm_ciph_key_data_validity_duration,
{ "Validity duration", "nas_eps.emm.ciph_key_data.validity_duration",
FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_minute_minutes, 0x0,
NULL, HFILL }
},
{ &hf_emm_ciph_key_data_tais_list_len,
{ &hf_nas_eps_emm_ciph_key_data_tais_list_len,
{ "TAIs list length", "nas_eps.emm.ciph_key_data.tais_list_len",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
@ -8269,29 +8470,54 @@ proto_register_nas_eps(void)
FT_UINT8, BASE_DEC, VALS(nas_eps_esm_request_type_values), 0x0,
NULL, HFILL }
},
{ &hf_emm_5g_up_ciot_b3,
{ &hf_nas_eps_emm_5gs_pnb_ciot,
{ "5GS Preferred CIoT network behaviour", "nas_eps.emm.5gs_pnb_ciot",
FT_UINT8, BASE_DEC, VALS(nas_eps_emm_5gs_pnb_ciot_vals), 0x30,
NULL, HFILL }
},
{ &hf_nas_eps_emm_5g_up_ciot,
{ "User plane CIoT 5GS optimization", "nas_eps.emm.5g_up_ciot",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
NULL, HFILL }
},
{ &hf_emm_5g_hc_cp_ciot,
{ &hf_nas_eps_emm_5g_hc_cp_ciot,
{ "Header compression for control plane CIoT 5GS optimization", "nas_eps.emm.5g_hc_cp_ciot",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
NULL, HFILL }
},
{ &hf_emm_n3_data,
{ &hf_nas_eps_emm_n3_data,
{ "N3 data transfer", "nas_eps.emm.n3_data",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
NULL, HFILL }
},
{ &hf_emm_5g_cp_ciot,
{ &hf_nas_eps_emm_5g_cp_ciot,
{ "Control plane CIoT 5GS optimization", "nas_eps.emm.5g_cp_ciot",
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
NULL, HFILL }
},
{ &hf_nas_eps_spare_b7_b4,
{ "Spare bit(s)", "nas_eps.spare_bits",
FT_UINT8, BASE_HEX, NULL, 0xf0,
{ &hf_nas_eps_emm_ue_radio_cap_id_available,
{ "UE radio capability ID availability", "nas_eps.emm.ue_radio_cap_id_available",
FT_UINT8, BASE_DEC, VALS(nas_eps_emm_ue_radio_cap_id_avail_vals), 0x07,
NULL, HFILL }
},
{ &hf_nas_eps_emm_ue_radio_cap_id_availability,
{ "UE radio capability ID availability", "nas_eps.emm.ue_radio_cap_id.availability",
FT_BOOLEAN, 8, TFS(&tfs_available_not_available), 0x01,
NULL, HFILL }
},
{ &hf_nas_eps_emm_wus_assist_info_type,
{ "Type", "nas_eps.emm.wus_assist_info.type",
FT_UINT8, BASE_DEC, VALS(nas_eps_emm_wus_assist_info_type_vals), 0xe0,
NULL, HFILL }
},
{ &hf_nas_eps_emm_wus_assist_info_ue_paging_prob,
{ "UE paging probability information", "nas_eps.emm.wus_assist_info.ue_paging_probability",
FT_UINT8, BASE_CUSTOM, CF_FUNC(de_emm_wus_assist_info_ue_paging_prob_fmt), 0x1f,
NULL, HFILL }
},
{ &hf_nas_eps_emm_nb_s1_drx_param,
{ "DRX value", "nas_eps.emm.nb_s1_drx_param",
FT_UINT8, BASE_DEC, VALS(nas_eps_emm_nb_s1_drx_params_vals), 0x0f,
NULL, HFILL }
},
};
@ -8311,7 +8537,7 @@ proto_register_nas_eps(void)
expert_module_t* expert_nas_eps;
/* Setup protocol subtree array */
#define NUM_INDIVIDUAL_ELEMS 10
#define NUM_INDIVIDUAL_ELEMS 11
gint *ett[NUM_INDIVIDUAL_ELEMS +
NUM_NAS_EPS_COMMON_ELEM +
NUM_NAS_MSG_EMM + NUM_NAS_EMM_ELEM+
@ -8327,6 +8553,7 @@ proto_register_nas_eps(void)
ett[7] = &ett_nas_eps_replayed_nas_msg_cont;
ett[8] = &ett_nas_eps_ext_emerg_num;
ett[9] = &ett_nas_eps_ciph_data_set;
ett[10] = &ett_nas_eps_wus_assist_info_type;
last_offset = NUM_INDIVIDUAL_ELEMS;
@ -8448,6 +8675,7 @@ proto_reg_handoff_nas_eps(void)
nbifom_handle = find_dissector_add_dependency("nbifom", proto_nas_eps);
ipv4_handle = find_dissector_add_dependency("ip", proto_nas_eps);
ipv6_handle = find_dissector_add_dependency("ipv6", proto_nas_eps);
ethernet_handle = find_dissector_add_dependency("eth_withoutfcs", proto_nas_eps);
initialized = TRUE;
}
if (g_nas_eps_non_ip_data_dissector[0] != '\0') {