From e2c7dc66276c8cc68be23de61f5ce2c5238818c7 Mon Sep 17 00:00:00 2001 From: Pascal Quantin Date: Fri, 16 Apr 2021 12:03:57 +0200 Subject: [PATCH] NAS 5GS: add dissection of operator-defined access category definitions IE Closes #17340 --- epan/dissectors/packet-nas_5gs.c | 332 +++++++++++++++++++++++++------ 1 file changed, 266 insertions(+), 66 deletions(-) diff --git a/epan/dissectors/packet-nas_5gs.c b/epan/dissectors/packet-nas_5gs.c index 05e6c488c4..dd590e5132 100644 --- a/epan/dissectors/packet-nas_5gs.c +++ b/epan/dissectors/packet-nas_5gs.c @@ -501,6 +501,8 @@ static int ett_nas_5gs_user_data_cont = -1; static int ett_nas_5gs_ciph_data_set = -1; static int ett_nas_5gs_mm_mapped_nssai = -1; static int ett_nas_5gs_mm_ext_rej_nssai = -1; +static int ett_nas_5gs_mm_op_def_acc_cat_def = -1; +static int ett_nas_5gs_mm_op_def_acc_cat_criteria = -1; static int hf_nas_5gs_mm_abba = -1; static int hf_nas_5gs_mm_supi_fmt = -1; @@ -526,7 +528,22 @@ static int hf_nas_5gs_amf_region_id = -1; static int hf_nas_5gs_amf_set_id = -1; static int hf_nas_5gs_amf_pointer = -1; static int hf_nas_5gs_5g_tmsi = -1; -static int hf_nas_5gs_mm_precedence = -1; +static int hf_nas_5gs_mm_op_def_access_cat_len = -1; +static int hf_nas_5gs_mm_op_def_access_cat_precedence = -1; +static int hf_nas_5gs_mm_op_def_access_cat_psac = -1; +static int hf_nas_5gs_mm_op_def_access_cat_number = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_length = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_type = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_count = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_len = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_id_os_app_id_count = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_id = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id_len = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_count = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_len = -1; +static int hf_nas_5gs_mm_op_def_access_cat_criteria_payload = -1; +static int hf_nas_5gs_mm_op_def_access_cat_standardized_number = -1; static int hf_nas_5gs_mm_sms_indic_sai = -1; static int hf_nas_5gs_nw_feat_sup_mpsi_b7 = -1; @@ -567,18 +584,17 @@ static int hf_nas_5gs_sor_mac_iausf = -1; static int hf_nas_5gs_counter_sor = -1; static int hf_nas_5gs_sor_sec_pkt = -1; -static int hf_nas_5gs_acces_tech_o1_b7 = -1; -static int hf_nas_5gs_acces_tech_o1_b6 = -1; -static int hf_nas_5gs_acces_tech_o1_b5 = -1; -static int hf_nas_5gs_acces_tech_o1_b4 = -1; -static int hf_nas_5gs_acces_tech_o1_b3 = -1; - -static int hf_nas_5gs_acces_tech_o2_b7 = -1; -static int hf_nas_5gs_acces_tech_o2_b6 = -1; -static int hf_nas_5gs_acces_tech_o2_b5 = -1; -static int hf_nas_5gs_acces_tech_o2_b4 = -1; -static int hf_nas_5gs_acces_tech_o2_b3 = -1; -static int hf_nas_5gs_acces_tech_o2_b2 = -1; +static int hf_nas_5gs_access_tech_o1_b7 = -1; +static int hf_nas_5gs_access_tech_o1_b6 = -1; +static int hf_nas_5gs_access_tech_o1_b5 = -1; +static int hf_nas_5gs_access_tech_o1_b4 = -1; +static int hf_nas_5gs_access_tech_o1_b3 = -1; +static int hf_nas_5gs_access_tech_o2_b7 = -1; +static int hf_nas_5gs_access_tech_o2_b6 = -1; +static int hf_nas_5gs_access_tech_o2_b5 = -1; +static int hf_nas_5gs_access_tech_o2_b4 = -1; +static int hf_nas_5gs_access_tech_o2_b3 = -1; +static int hf_nas_5gs_access_tech_o2_b2 = -1; static int hf_nas_5gs_single_port_type = -1; static int hf_nas_5gs_port_range_type_low = -1; static int hf_nas_5gs_port_range_type_high = -1; @@ -2495,37 +2511,144 @@ de_nas_5gs_mm_nssai_inc_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo /* * 9.11.3.38 Operator-defined access category definitions */ + +static void +nas_5gs_mm_access_cat_number(gchar *s, guint32 val) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u (%u)", 32+val, val); +} + +static void +nas_5gs_mm_access_standardized_cat_number(gchar *s, guint32 val) +{ + if (val <= 7) + g_snprintf(s, ITEM_LABEL_LENGTH, "%u", val); + else + g_snprintf(s, ITEM_LABEL_LENGTH, "Reserved (%u)", val); +} + +static const value_string nas_5gs_mm_op_def_access_cat_criteria_type_vals[] = { + { 0, "DNN" }, + { 1, "OS Id + OS App Id" }, + { 2, "S-NSSAI" }, + { 0, NULL } +}; + static guint16 de_nas_5gs_mm_op_def_acc_cat_def(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - proto_tree *sub_tree; - proto_item *item; + proto_tree *sub_tree, *sub_tree2; + proto_item *item, *item2; int i = 1; - guint32 length; - guint32 curr_offset; + guint32 length, criteria_length, criteria_type, criteria_count, j; + guint32 curr_offset, saved_offset, saved_offset2; + gboolean psac; curr_offset = offset; while ((curr_offset - offset) < len) { - sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 2, ett_nas_5gs_mm_nssai, &item, "Operator-defined access category definition %u", i); + sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 4, ett_nas_5gs_mm_op_def_acc_cat_def, + &item, "Operator-defined access category definition %u", i); - proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length); + proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_len, tvb, + curr_offset, 1, ENC_BIG_ENDIAN, &length); curr_offset++; + saved_offset = curr_offset; /* Precedence value */ - proto_tree_add_item(sub_tree, hf_nas_5gs_mm_precedence, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sub_tree, hf_nas_5gs_mm_op_def_access_cat_precedence, + tvb, curr_offset, 1, ENC_BIG_ENDIAN); curr_offset++; - /* PSAC 0 Spare 0 Spare Operator-defined access category number */ + proto_tree_add_item_ret_boolean(sub_tree, hf_nas_5gs_mm_op_def_access_cat_psac, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &psac); + proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, + (curr_offset << 3)+1, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sub_tree, hf_nas_5gs_mm_op_def_access_cat_number, + tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; /* Length of criteria */ + proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_criteria_length, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_length); + curr_offset++; /* Criteria */ - /* 0 Spare 0 Spare 0 Spare Standardized access category */ - proto_tree_add_expert(sub_tree, pinfo, &ei_nas_5gs_not_diss, tvb, curr_offset, length - 1); - curr_offset += length; + proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_criteria_type, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_type); + curr_offset++; + switch (criteria_type) { + case 0: + proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_count, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_count); + curr_offset++; + for (j = 1; j <= criteria_count; j++) { + guint32 dnn_len; + saved_offset2 = curr_offset; + sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, + ett_nas_5gs_mm_op_def_acc_cat_criteria, &item2, "DNN %u", j); + proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_len, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &dnn_len); + curr_offset++; + de_nas_5gs_cmn_dnn(tvb, sub_tree2, pinfo, curr_offset, dnn_len, NULL, 0); + curr_offset += dnn_len; + proto_item_set_len(item2, curr_offset - saved_offset2); + } + break; + case 1: + proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_criteria_os_id_os_app_id_count, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_count); + curr_offset++; + for (j = 1; j <= criteria_count; j++) { + guint32 os_app_id_len; + saved_offset2 = curr_offset; + sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, ett_nas_5gs_mm_op_def_acc_cat_criteria, + &item2, "OS Id + Os App Id %u", j); + proto_tree_add_item(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_os_id, + tvb, curr_offset, 16, ENC_NA); + curr_offset += 16; + proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id_len, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &os_app_id_len); + curr_offset++; + proto_tree_add_item(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id, + tvb, curr_offset, os_app_id_len, ENC_NA); + curr_offset += os_app_id_len; + proto_item_set_len(item2, curr_offset - saved_offset2); + } + break; + case 2: + proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_count, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_count); + curr_offset++; + for (j = 1; j <= criteria_count; j++) { + guint32 s_nssai_len; + saved_offset2 = curr_offset; + sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, + ett_nas_5gs_mm_op_def_acc_cat_criteria, &item2, "S-NSSAI %u", j); + proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_len, + tvb, curr_offset, 1, ENC_BIG_ENDIAN, &s_nssai_len); + curr_offset++; + curr_offset += de_nas_5gs_cmn_s_nssai(tvb, sub_tree2, pinfo, curr_offset, s_nssai_len, NULL, 0); + proto_item_set_len(item2, curr_offset - saved_offset2); + } + break; + default: + if (criteria_length > 1) { + proto_tree_add_item(sub_tree, hf_nas_5gs_mm_op_def_access_cat_criteria_payload, + tvb, curr_offset, criteria_length - 1, ENC_NA); + curr_offset += criteria_length - 1; + } + break; + } + if (psac) { + /* 0 Spare 0 Spare 0 Spare Standardized access category */ + proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, + (curr_offset << 3), 3, ENC_BIG_ENDIAN); + proto_tree_add_item(sub_tree, hf_nas_5gs_mm_op_def_access_cat_standardized_number, + tvb, curr_offset, 1, ENC_BIG_ENDIAN); + } + curr_offset = saved_offset + length; proto_item_set_len(item, length + 1); i++; - } return len; @@ -3140,25 +3263,25 @@ de_nas_5gs_mm_sor_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinf NULL }; /* 3GPP TS 31.102 [22] subclause 4.2.5 */ - static int * const flags_acces_tech_1[] = { - &hf_nas_5gs_acces_tech_o1_b7, - &hf_nas_5gs_acces_tech_o1_b6, - &hf_nas_5gs_acces_tech_o1_b5, - &hf_nas_5gs_acces_tech_o1_b4, - &hf_nas_5gs_acces_tech_o1_b3, + static int * const flags_access_tech_1[] = { + &hf_nas_5gs_access_tech_o1_b7, + &hf_nas_5gs_access_tech_o1_b6, + &hf_nas_5gs_access_tech_o1_b5, + &hf_nas_5gs_access_tech_o1_b4, + &hf_nas_5gs_access_tech_o1_b3, &hf_nas_5gs_rfu_b2, &hf_nas_5gs_rfu_b1, &hf_nas_5gs_rfu_b0, NULL }; - static int * const flags_acces_tech_2[] = { - &hf_nas_5gs_acces_tech_o2_b7, - &hf_nas_5gs_acces_tech_o2_b6, - &hf_nas_5gs_acces_tech_o2_b5, - &hf_nas_5gs_acces_tech_o2_b4, - &hf_nas_5gs_acces_tech_o2_b3, - &hf_nas_5gs_acces_tech_o2_b2, + static int * const flags_access_tech_2[] = { + &hf_nas_5gs_access_tech_o2_b7, + &hf_nas_5gs_access_tech_o2_b6, + &hf_nas_5gs_access_tech_o2_b5, + &hf_nas_5gs_access_tech_o2_b4, + &hf_nas_5gs_access_tech_o2_b3, + &hf_nas_5gs_access_tech_o2_b2, &hf_nas_5gs_rfu_b1, &hf_nas_5gs_rfu_b0, NULL @@ -3203,9 +3326,9 @@ de_nas_5gs_mm_sor_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinf curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_NONE, TRUE); curr_offset += 3; /* access technology identifier 1 octet 26*- 27* */ - proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_acces_tech_1, ENC_BIG_ENDIAN); + proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_access_tech_1, ENC_BIG_ENDIAN); curr_offset++; - proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_acces_tech_2, ENC_BIG_ENDIAN); + proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_access_tech_2, ENC_BIG_ENDIAN); curr_offset++; i++; } @@ -10733,11 +10856,86 @@ proto_register_nas_5gs(void) FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_drx_vals), 0x0f, NULL, HFILL } }, - { &hf_nas_5gs_mm_precedence, - { "Precedence", "nas_5gs.mm.precedence", + { &hf_nas_5gs_mm_op_def_access_cat_len, + { "Length of operator-defined access category definition contents", "nas_5gs.mm.operator_defined_access_cat.len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, + { &hf_nas_5gs_mm_op_def_access_cat_precedence, + { "Precedence", "nas_5gs.mm.operator_defined_access_cat.precedence", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_psac, + { "Presence of standardized access category", "nas_5gs.mm.operator_defined_access_cat.psac", + FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x80, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_number, + { "Access category number", "nas_5gs.mm.operator_defined_access_cat.number", + FT_UINT8, BASE_CUSTOM, CF_FUNC(nas_5gs_mm_access_cat_number), 0x1f, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_length, + { "Length of criteria", "nas_5gs.mm.operator_defined_access_cat.criteria_length", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_type, + { "Criteria type", "nas_5gs.mm.operator_defined_access_cat.criteria_type", + FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_op_def_access_cat_criteria_type_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_count, + { "DNN count", "nas_5gs.mm.operator_defined_access_cat.criteria_dnn_count", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_len, + { "DNN length", "nas_5gs.mm.operator_defined_access_cat.criteria_dnn_len", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_id_os_app_id_count, + { "OS Id + OS App Id count", "nas_5gs.mm.operator_defined_access_cat.criteria_os_id_os_app_id_count", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_id, + { "OS Id", "nas_5gs.mm.operator_defined_access_cat.criteria_os_id", + FT_GUID, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id_len, + { "OS App Id length", "nas_5gs.mm.operator_defined_access_cat.criteria_os_app_id_len", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id, + { "OS App Id", "nas_5gs.mm.operator_defined_access_cat.criteria_os_app_id", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_count, + { "S-NSSAI count", "nas_5gs.mm.operator_defined_access_cat.criteria_s_nssai_count", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_len, + { "S-NSSAI length", "nas_5gs.mm.operator_defined_access_cat.criteria_s_nssai_len", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_criteria_payload, + { "Criteria payload", "nas_5gs.mm.operator_defined_access_cat.criteria_payload", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_5gs_mm_op_def_access_cat_standardized_number, + { "Standardized access category number", "nas_5gs.mm.operator_defined_access_cat.standardized_number", + FT_UINT8, BASE_CUSTOM, CF_FUNC(nas_5gs_mm_access_standardized_cat_number), 0x1f, + NULL, HFILL } + }, { &hf_nas_5gs_mm_sms_indic_sai, { "SMS over NAS", "nas_5gs.mm.ms_indic.sai", FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x01, @@ -10783,58 +10981,58 @@ proto_register_nas_5gs(void) FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o1_b7, - { "Access technology UTRAN", "nas_5gs.cces_tech_o1_b7.utran", + { &hf_nas_5gs_access_tech_o1_b7, + { "Access technology UTRAN", "nas_5gs.access_tech_o1_b7.utran", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x80, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o1_b6, - { "Access technology E-UTRAN", "nas_5gs.cces_tech_o1_b6.e_utran", + { &hf_nas_5gs_access_tech_o1_b6, + { "Access technology E-UTRAN", "nas_5gs.access_tech_o1_b6.e_utran", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x40, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o1_b5, - { "Access technology E-UTRAN in WB-S1 mode", "nas_5gs.cces_tech_o1_b5.e_utran_in_wb_s1_mode", + { &hf_nas_5gs_access_tech_o1_b5, + { "Access technology E-UTRAN in WB-S1 mode", "nas_5gs.access_tech_o1_b5.e_utran_in_wb_s1_mode", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x20, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o1_b4, - { "Access technology E-UTRAN in NB-S1 mode", "nas_5gs.cces_tech_o1_b4.e_utran_in_nb_s1_mode", + { &hf_nas_5gs_access_tech_o1_b4, + { "Access technology E-UTRAN in NB-S1 mode", "nas_5gs.access_tech_o1_b4.e_utran_in_nb_s1_mode", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x10, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o1_b3, - { "Access technology NG-RAN", "nas_5gs.cces_tech_o1_b3.ng_ran", + { &hf_nas_5gs_access_tech_o1_b3, + { "Access technology NG-RAN", "nas_5gs.access_tech_o1_b3.ng_ran", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x08, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o2_b7, - { "Access technology GSM", "nas_5gs.cces_tech_o2_b7.gsm", + { &hf_nas_5gs_access_tech_o2_b7, + { "Access technology GSM", "nas_5gs.access_tech_o2_b7.gsm", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x80, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o2_b6, - { "Access technology GSM COMPACT", "nas_5gs.cces_tech_o2_b6.gsm_compact", + { &hf_nas_5gs_access_tech_o2_b6, + { "Access technology GSM COMPACT", "nas_5gs.access_tech_o2_b6.gsm_compact", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x40, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o2_b5, - { "Access technology CDMA2000 HRPD", "nas_5gs.cces_tech_o2_b5.cdma2000_hrpd", + { &hf_nas_5gs_access_tech_o2_b5, + { "Access technology CDMA2000 HRPD", "nas_5gs.access_tech_o2_b5.cdma2000_hrpd", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x20, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o2_b4, - { "Access technology CDMA2000 1xRTT", "nas_5gs.cces_tech_o2_b4.cdma2000_1x_rtt", + { &hf_nas_5gs_access_tech_o2_b4, + { "Access technology CDMA2000 1xRTT", "nas_5gs.access_tech_o2_b4.cdma2000_1x_rtt", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x10, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o2_b3, - { "Access technology EC-GSM-IoT", "nas_5gs.cces_tech_o2_b3.ec_gsm_iot", + { &hf_nas_5gs_access_tech_o2_b3, + { "Access technology EC-GSM-IoT", "nas_5gs.access_tech_o2_b3.ec_gsm_iot", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x08, NULL, HFILL } }, - { &hf_nas_5gs_acces_tech_o2_b2, - { "Access technology GSM", "nas_5gs.cces_tech_o2_b2.gsm", + { &hf_nas_5gs_access_tech_o2_b2, + { "Access technology GSM", "nas_5gs.access_tech_o2_b2.gsm", FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x04, NULL, HFILL } }, @@ -11103,7 +11301,7 @@ proto_register_nas_5gs(void) guint last_offset; /* Setup protocol subtree array */ -#define NUM_INDIVIDUAL_ELEMS 31 +#define NUM_INDIVIDUAL_ELEMS 33 gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_NAS_5GS_COMMON_ELEM + NUM_NAS_5GS_MM_MSG + NUM_NAS_5GS_MM_ELEM + @@ -11142,6 +11340,8 @@ proto_register_nas_5gs(void) ett[28] = &ett_nas_5gs_ciph_data_set; ett[29] = &ett_nas_5gs_mm_mapped_nssai; ett[30] = &ett_nas_5gs_mm_ext_rej_nssai; + ett[31] = &ett_nas_5gs_mm_op_def_acc_cat_def; + ett[32] = &ett_nas_5gs_mm_op_def_acc_cat_criteria; last_offset = NUM_INDIVIDUAL_ELEMS; @@ -11197,7 +11397,7 @@ proto_register_nas_5gs(void) { &ei_nas_5gs_msg_not_dis,{ "nas_5gs.msg_not_dis", PI_PROTOCOL, PI_WARN, "MSG IEs not dissected yet", EXPFILL } }, { &ei_nas_5gs_ie_not_dis,{ "nas_5gs.ie_not_dis", PI_PROTOCOL, PI_WARN, "IE not dissected yet", EXPFILL } }, { &ei_nas_5gs_missing_mandatory_element,{ "nas_5gs.missing_mandatory_element", PI_PROTOCOL, PI_ERROR, "Missing Mandatory element, rest of dissection is suspect", EXPFILL } }, - { &ei_nas_5gs_dnn_too_long,{ "nas_5gs.dnn_to_long", PI_PROTOCOL, PI_ERROR, "DNN encoding has more than 100 octets", EXPFILL } }, + { &ei_nas_5gs_dnn_too_long,{ "nas_5gs.dnn_too_long", PI_PROTOCOL, PI_ERROR, "DNN encoding has more than 100 octets", EXPFILL } }, { &ei_nas_5gs_unknown_value,{ "nas_5gs.unknown_value", PI_PROTOCOL, PI_ERROR, "Value not according to (decoded)specification", EXPFILL } }, { &ei_nas_5gs_num_pkt_flt,{ "nas_5gs.num_pkt_flt", PI_PROTOCOL, PI_ERROR, "num_pkt_flt != 0", EXPFILL } }, { &ei_nas_5gs_not_diss,{ "nas_5gs.not_diss", PI_PROTOCOL, PI_NOTE, "Not dissected yet", EXPFILL } },