diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2018-03-29 22:14:27 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2018-03-29 22:56:03 +0000 |
commit | 684ca9db12b107f7d0ab5f2e5e29320da5ef9a77 (patch) | |
tree | 4d2f395be486a7d533dae331333f8422e5e6c3f5 /epan | |
parent | e2ec760d5ec00168d20b6c87095d8752934d732f (diff) |
3GPP NAS: upgrade dissector to v15.2.0
Change-Id: I11510356950c1eab4d77f8473f62aa6428311853
Reviewed-on: https://code.wireshark.org/review/26682
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-gsm_a_common.h | 6 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_gm.c | 51 | ||||
-rwxr-xr-x | epan/dissectors/packet-nas_5gs.c | 30 |
3 files changed, 80 insertions, 7 deletions
diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h index 4b6e308141..5fd097c051 100644 --- a/epan/dissectors/packet-gsm_a_common.h +++ b/epan/dissectors/packet-gsm_a_common.h @@ -782,6 +782,10 @@ guint16 de_emm_sec_par_to_eutra(tvbuff_t *tvb, proto_tree *tree, packet_info *pi guint16 de_esm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_); void nas_esm_pdn_con_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len); +guint16 de_nas_5gs_mm_s_nssai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_); +guint16 de_nas_5gs_sm_qos_rules(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_); +guint16 de_nas_5gs_sm_session_ambr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_); + void dtap_rr_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len); void dtap_rr_cip_mode_cpte(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len); @@ -826,6 +830,8 @@ extern value_string_ext nas_eps_emm_cause_values_ext; extern const value_string nas_eps_emm_cause_values[]; extern const value_string nas_eps_esm_cause_vals[]; +extern const value_string nas_5gs_pdu_session_id_vals[]; + typedef enum { /* Common Information Elements [3] 10.5.1 */ diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c index 01ef01b2af..97023632fb 100644 --- a/epan/dissectors/packet-gsm_a_gm.c +++ b/epan/dissectors/packet-gsm_a_gm.c @@ -69,7 +69,7 @@ * Mobile radio interface Layer 3 specification; * Core network protocols; * Stage 3 - * (3GPP TS 24.008 version 15.1.0 Release 15) + * (3GPP TS 24.008 version 15.2.0 Release 15) * * Wireshark - Network traffic analyzer * By Gerald Combs <gerald@wireshark.org> @@ -555,6 +555,8 @@ static int hf_gsm_a_gm_sm_pco_3gpp_data_off_ue_status = -1; static int hf_gsm_a_gm_sm_pco_sel_bearer_ctrl_mode = -1; static int hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_ul_time_unit = -1; static int hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_max_ul_rate = -1; +static int hf_gsm_a_gm_sm_pco_pdu_session_id = -1; +static int hf_gsm_a_gm_sm_pco_pdu_session_address_lifetime = -1; static int hf_gsm_a_sm_pdp_type_number = -1; static int hf_gsm_a_sm_pdp_address = -1; static int hf_gsm_a_gm_ti_value = -1; @@ -4411,6 +4413,7 @@ static const range_string gsm_a_sm_pco_ms2net_prot_vals[] = { { 0x0017, 0x0017, "3GPP PS data off UE status" }, { 0x0018, 0x0018, "Reliable Data Service request indicator" }, { 0x0019, 0x0019, "Additional APN rate control for exception data support indicator" }, + { 0x001a, 0x001a, "PDU session ID" }, { 0xff00, 0xffff, "Operator Specific Use" }, { 0, 0, NULL } }; @@ -4440,6 +4443,11 @@ static const range_string gsm_a_sm_pco_net2ms_prot_vals[] = { { 0x0017, 0x0017, "3GPP PS data off support indication" }, { 0x0018, 0x0018, "Reliable Data Service accepted indicator" }, { 0x0019, 0x0019, "Additional APN rate control for exception data parameters" }, + { 0x001a, 0x001a, "Reserved" }, + { 0x001b, 0x001b, "S-NSSAI" }, + { 0x001c, 0x001c, "QoS rules" }, + { 0x001d, 0x001d, "Session-AMBR" }, + { 0x001e, 0x001e, "PDU session address lifetime" }, { 0xff00, 0xffff, "Operator Specific Use" }, { 0, 0, NULL } }; @@ -4648,6 +4656,37 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g } } break; + case 0x001a: + if (link_dir == P2P_DIR_UL) { + proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_pdu_session_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + } + break; + case 0x001b: + if (link_dir == P2P_DIR_DL && e_len >= 4) { + de_nas_5gs_mm_s_nssai(tvb, pco_tree, pinfo, curr_offset, e_len - 3, NULL, 0); + dissect_e212_mcc_mnc(tvb, pinfo, pco_tree, curr_offset + e_len - 3, E212_NONE, TRUE); + } + break; + case 0x001c: + if (link_dir == P2P_DIR_DL) { + de_nas_5gs_sm_qos_rules(tvb, pco_tree, pinfo, curr_offset, e_len, NULL, 0); + } + break; + case 0x001d: + if (link_dir == P2P_DIR_DL) { + de_nas_5gs_sm_qos_rules(tvb, pco_tree, pinfo, curr_offset, e_len, NULL, 0); + } + break; + case 0x001e: + if (link_dir == P2P_DIR_DL) { + de_nas_5gs_sm_session_ambr(tvb, pco_tree, pinfo, curr_offset, e_len, NULL, 0); + } + break; + case 0x001f: + if (link_dir == P2P_DIR_DL && e_len == 2) { + proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_pdu_session_address_lifetime, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + } + break; default: { if (e_len > 0) { @@ -9204,6 +9243,16 @@ proto_register_gsm_a_gm(void) FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_message_messages, 0x0, NULL, HFILL } }, + { &hf_gsm_a_gm_sm_pco_pdu_session_id, + { "PDU session identity", "gsm_a.gm.sm.pco.pdu_session_id", + FT_UINT8, BASE_DEC, VALS(nas_5gs_pdu_session_id_vals), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_gm_sm_pco_pdu_session_address_lifetime, + { "PDU session address lifetime", "gsm_a.gm.sm.pco.pdu_session_address_lifetime", + FT_UINT8, BASE_DEC|BASE_UNIT_STRING, &units_second_seconds, 0x0, + NULL, HFILL } + }, /* Generated from convert_proto_tree_add_text.pl */ { &hf_gsm_a_gm_presence, { "Presence", "gsm_a.gm.gmm.presence", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_gsm_a_gm_8psk_power_class, { "8PSK Power Class", "gsm_a.gm.8psk_power_class", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_8psk_power_class_vals), 0x0, NULL, HFILL }}, diff --git a/epan/dissectors/packet-nas_5gs.c b/epan/dissectors/packet-nas_5gs.c index e4ea366e2c..be03bd756d 100755 --- a/epan/dissectors/packet-nas_5gs.c +++ b/epan/dissectors/packet-nas_5gs.c @@ -195,8 +195,6 @@ static expert_field ei_nas_5gs_num_pkt_flt = EI_INIT; static expert_field ei_nas_5gs_not_diss = EI_INIT; -static guint16 de_nas_5gs_mm_s_nssai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_); - static const value_string nas_5gs_security_header_type_vals[] = { { 0, "Plain NAS message, not security protected"}, { 1, "Integrity protected"}, @@ -1041,7 +1039,7 @@ de_nas_5gs_mm_rej_nssai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, /* * 9.8.3.37 S-NSSAI */ -static guint16 +guint16 de_nas_5gs_mm_s_nssai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) @@ -1516,7 +1514,7 @@ static const value_string nas_5gs_sm_pf_type_values[] = { }; -static guint16 +guint16 de_nas_5gs_sm_qos_rules(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) @@ -1692,7 +1690,8 @@ get_ext_ambr_unit(guint32 unit, const char **unit_str) } return mult; } -static guint16 + +guint16 de_nas_5gs_sm_session_ambr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) @@ -3470,6 +3469,25 @@ disect_nas_5gs_mm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int o } +const value_string nas_5gs_pdu_session_id_vals[] = { + { 0x00, "No PDU session identity assigned" }, + { 0x01, "Reserved" }, + { 0x02, "Reserved" }, + { 0x03, "Reserved" }, + { 0x04, "Reserved" }, + { 0x05, "PDU session identity value 5" }, + { 0x06, "PDU session identity value 6" }, + { 0x07, "PDU session identity value 7" }, + { 0x08, "PDU session identity value 8" }, + { 0x09, "PDU session identity value 9" }, + { 0x0a, "PDU session identity value 10" }, + { 0x0b, "PDU session identity value 11" }, + { 0x0c, "PDU session identity value 12" }, + { 0x0d, "PDU session identity value 13" }, + { 0x0e, "PDU session identity value 14" }, + { 0x0f, "PDU session identity value 15" }, + { 0, NULL } +}; static int dissect_nas_5gs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) @@ -3630,7 +3648,7 @@ proto_register_nas_5gs(void) }, { &hf_nas_5gs_pdu_session_id, { "PDU session identity", "nas_5gs.pdu_session_id", - FT_UINT8, BASE_DEC, NULL, 0x0, + FT_UINT8, BASE_DEC, VALS(nas_5gs_pdu_session_id_vals), 0x0, NULL, HFILL } }, { &hf_nas_5gs_msg_elems, |