diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c index 1705a5e343..e8cb495e37 100644 --- a/epan/dissectors/packet-gsm_a_common.c +++ b/epan/dissectors/packet-gsm_a_common.c @@ -62,6 +62,7 @@ const value_string gsm_common_elem_strings[] = { { 0x00, "PD and SAPI $(CCBS)$" }, { 0x00, "Priority Level" }, { 0x00, "PLMN List" }, + { 0x00, "NAS container for PS HO" }, { 0, NULL } }; @@ -576,7 +577,9 @@ int hf_gsm_a_call_prio = -1; int hf_gsm_a_skip_ind = -1; int hf_gsm_a_spare_bits = -1; int hf_gsm_a_lac = -1; - +static int hf_gsm_a_type_of_ciph_alg = -1; +static int hf_gsm_a_old_xid = -1; +static int hf_gsm_a_iov_ui = -1; static int hf_gsm_a_b7spare = -1; int hf_gsm_a_b8spare = -1; static int hf_gsm_a_multi_bnd_sup_fields = -1; @@ -3082,6 +3085,40 @@ de_plmn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * return(curr_offset - offset); } +/* + * 10.5.1.14 NAS container for PS HO + */ + + +static const value_string gsm_a_pld_xid_vals[] = { + { 0x00, "The MS shall perform a Reset of LLC and SNDCP without old XID indicator" }, + { 0x01, "The MS shall perform a Reset of LLC and SNDCP with old XID indicator" }, + { 0, NULL } +}; +guint16 +de_nas_cont_for_ps_ho(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +{ + guint32 curr_offset; + + curr_offset = offset; + + proto_tree_add_text(tree, tvb, curr_offset, len, "IE not dissected yet"); + /* 8 7 6 5 4 3 2 1 + * 0 0 0 old 0 Type of ciphering + * spare spare spare XID spare algorithm + */ + proto_tree_add_item(tree, hf_gsm_a_old_xid, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_type_of_ciph_alg, tvb, curr_offset, 1, FALSE); + curr_offset++; + + /* IOV-UI value (octet 2 to 5) + * The IOV-UI value consists of 32 bits, the format is defined in 3GPP TS 44.064 [78a]. + */ + proto_tree_add_item(tree, hf_gsm_a_iov_ui, tvb, curr_offset, 4, FALSE); + + return(len); +} + guint16 (*common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = { /* Common Information Elements 10.5.1 */ @@ -3098,7 +3135,8 @@ guint16 (*common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gu de_pd_sapi, /* PD and SAPI $(CCBS)$ */ /* Pos 10 */ de_prio /* handled inline */, /* Priority Level */ - de_plmn_list, /* PLMN List */ + de_plmn_list, /* 10.5.1.13 PLMN list */ + de_nas_cont_for_ps_ho, /* 10.5.1.14 NAS container for PS HO */ NULL, /* NONE */ }; @@ -3287,6 +3325,21 @@ proto_register_gsm_a_common(void) FT_UINT8, BASE_DEC, VALS(gsm_a_call_prio_vals), 0x00, NULL, HFILL } }, + { &hf_gsm_a_type_of_ciph_alg, + { "Call priority", "gsm_a.call_prio", + FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_ciph_alg_vals), 0x07, + NULL, HFILL } + }, + { &hf_gsm_a_old_xid, + { "Old XID", "gsm_a.old_xid", + FT_UINT8, BASE_DEC, VALS(gsm_a_pld_xid_vals), 0x10, + NULL, HFILL } + }, + { &hf_gsm_a_iov_ui, + { "IOV-UI", "gsm_a.iov_ui", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, { &hf_gsm_a_skip_ind, { "Skip Indicator", "gsm_a.skip.ind", FT_UINT8, BASE_DEC, NULL, 0xf0, diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h index 257e479af0..102106d071 100644 --- a/epan/dissectors/packet-gsm_a_common.h +++ b/epan/dissectors/packet-gsm_a_common.h @@ -648,6 +648,7 @@ void dtap_mm_mm_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) guint16 be_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc); guint16 be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len); guint16 be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len); +guint16 be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len); guint16 de_lai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len); guint16 de_mid(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len); @@ -727,6 +728,7 @@ extern const value_string gsm_a_type_of_number_values[]; extern const value_string gsm_a_numbering_plan_id_values[]; extern const value_string gsm_a_sms_vals[]; extern value_string_ext gsm_a_rr_rxlev_vals_ext; +extern const value_string gsm_a_gm_type_of_ciph_alg_vals[]; typedef enum { @@ -744,6 +746,7 @@ typedef enum DE_PD_SAPI, /* PD and SAPI $(CCBS)$ */ DE_PRIO, /* Priority Level */ DE_PLMN_LIST, /* PLMN List */ + DE_NAS_CONT_FOR_PS_HO, /* 10.5.1.14 NAS container for PS HO */ DE_COMMON_NONE /* NONE */ } diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c index 12fa39000e..2072b1c3bb 100644 --- a/epan/dissectors/packet-gsm_a_gm.c +++ b/epan/dissectors/packet-gsm_a_gm.c @@ -411,7 +411,7 @@ de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U /* * [9] 10.5.5.3 Ciphering algorithm */ -static const value_string gsm_a_gm_type_of_ciph_alg_vals[] = { +const value_string gsm_a_gm_type_of_ciph_alg_vals[] = { { 0x00, "ciphering not used" }, { 0x01, "GPRS Encryption Algorithm GEA/1" }, { 0x02, "GPRS Encryption Algorithm GEA/2" },