aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2018-03-29 22:14:27 +0200
committerAnders Broman <a.broman58@gmail.com>2018-03-29 22:56:03 +0000
commit684ca9db12b107f7d0ab5f2e5e29320da5ef9a77 (patch)
tree4d2f395be486a7d533dae331333f8422e5e6c3f5
parente2ec760d5ec00168d20b6c87095d8752934d732f (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>
-rw-r--r--epan/dissectors/packet-gsm_a_common.h6
-rw-r--r--epan/dissectors/packet-gsm_a_gm.c51
-rwxr-xr-xepan/dissectors/packet-nas_5gs.c30
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,