diff options
author | Bill Meier <wmeier@newsguy.com> | 2011-07-15 16:59:18 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2011-07-15 16:59:18 +0000 |
commit | 111e08bb3ddeff49c58b94f4d1831df94ed15c88 (patch) | |
tree | 2f1037062a31985ff5c6cb3d584a00e79316d5d6 /epan/dissectors/packet-nas_eps.c | |
parent | 73de1d4952a1aee5e1afa5664856483c98814855 (diff) |
Fix gcc 4.6 "set but not used [-Wunused-but-set-variable]" warnings;
Whitespace changes: "4 space tabs" --> spaces.
svn path=/trunk/; revision=38047
Diffstat (limited to 'epan/dissectors/packet-nas_eps.c')
-rw-r--r-- | epan/dissectors/packet-nas_eps.c | 6574 |
1 files changed, 3286 insertions, 3288 deletions
diff --git a/epan/dissectors/packet-nas_eps.c b/epan/dissectors/packet-nas_eps.c index 152231deec..c38c861c78 100644 --- a/epan/dissectors/packet-nas_eps.c +++ b/epan/dissectors/packet-nas_eps.c @@ -339,9 +339,9 @@ calc_bitrate_ext(guint8 value){ else if (value > 0xba && value <= 0xfa) { return_value = 128 + (value-0xba)*2; } - else { - return_value = 256; - } + else { + return_value = 256; + } return return_value; } @@ -351,7 +351,7 @@ gint ett_nas_eps_common_elem[NUM_NAS_EPS_COMMON_ELEM]; typedef enum { - DE_EPS_CMN_ADD_INFO, /* 9.9.2.0 Additional information */ + DE_EPS_CMN_ADD_INFO, /* 9.9.2.0 Additional information */ DE_EPS_CMN_EPS_BE_CTX_STATUS, /* 9.9.2.1 EPS bearer context status */ DE_EPS_CMN_LOC_AREA_ID, /* 9.9.2.2 Location area identification */ DE_EPS_CMN_MOB_ID, /* 9.9.2.3 Mobile identity */ @@ -373,9 +373,9 @@ nas_eps_common_elem_idx_t; static guint16 de_eps_cmn_add_info(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_text(tree, tvb, offset, len, "Not dissected yet"); + proto_tree_add_text(tree, tvb, offset, len, "Not dissected yet"); - return(len); + return(len); } /* @@ -655,49 +655,49 @@ nas_emm_elem_idx_t; * 9.9.3.0A Additional update result */ static const value_string nas_eps_emm_add_upd_res_vals[] = { - { 0x0, "no additional information"}, - { 0x1, "CS Fallback not preferred"}, - { 0x2, "SMS only"}, - { 0x3, "reserved"}, - { 0, NULL } + { 0x0, "no additional information"}, + { 0x1, "CS Fallback not preferred"}, + { 0x2, "SMS only"}, + { 0x3, "reserved"}, + { 0, NULL } }; static guint16 de_emm_add_upd_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset, bit_offset; + guint32 curr_offset, bit_offset; - curr_offset = offset; - bit_offset = (curr_offset<<3)+4; + curr_offset = offset; + bit_offset = (curr_offset<<3)+4; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 2, ENC_BIG_ENDIAN); - bit_offset += 2; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_add_upd_res, tvb, bit_offset, 2, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 2, ENC_BIG_ENDIAN); + bit_offset += 2; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_add_upd_res, tvb, bit_offset, 2, ENC_BIG_ENDIAN); + curr_offset++; - return (curr_offset - offset); + return (curr_offset - offset); } /* * 9.9.3.0B Additional update type */ static const value_string nas_eps_emm_add_upd_type_vals[] = { - { 0x0, "no additional information (shall be interpreted as request for combined attach or combined tracking area updating)"}, - { 0x1, "SMS only"}, - { 0, NULL } + { 0x0, "no additional information (shall be interpreted as request for combined attach or combined tracking area updating)"}, + { 0x1, "SMS only"}, + { 0, NULL } }; static guint16 de_emm_add_upd_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset, bit_offset; + guint32 curr_offset, bit_offset; - curr_offset = offset; - bit_offset = (curr_offset<<3)+4; + curr_offset = offset; + bit_offset = (curr_offset<<3)+4; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset += 3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_add_upd_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset += 3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_add_upd_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return (curr_offset - offset); + return (curr_offset - offset); } /* * 9.9.3.1 Authentication failure parameter @@ -981,245 +981,245 @@ de_emm_eps_mid(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 new_tvb = tvb_new_subset(tvb, curr_offset, len, len ); digit_str = unpack_eps_mid_digits(new_tvb); proto_tree_add_string(tree, hf_nas_eps_emm_imei, new_tvb, 0, -1, digit_str); - break; - case 6: - /* GUTI */ - curr_offset++; - curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); - /* MME Group ID octet 7 - 8 */ - proto_tree_add_item(tree, hf_nas_eps_emm_mme_grp_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; - /* MME Code Octet 9 */ - proto_tree_add_item(tree, hf_nas_eps_emm_mme_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - /* M-TMSI Octet 10 - 13 */ - proto_tree_add_item(tree, hf_nas_eps_emm_m_tmsi, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset+=4; - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, len - 1, "Type of identity not known"); - break; - } - - return(len); + break; + case 6: + /* GUTI */ + curr_offset++; + curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); + /* MME Group ID octet 7 - 8 */ + proto_tree_add_item(tree, hf_nas_eps_emm_mme_grp_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; + /* MME Code Octet 9 */ + proto_tree_add_item(tree, hf_nas_eps_emm_mme_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + /* M-TMSI Octet 10 - 13 */ + proto_tree_add_item(tree, hf_nas_eps_emm_m_tmsi, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset+=4; + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, len - 1, "Type of identity not known"); + break; + } + + return(len); } /* - * 9.9.3.12A EPS network feature support + * 9.9.3.12A EPS network feature support */ static const value_string nas_eps_emm_cs_lcs_vals[] = { - { 0, "no information about support of location services via CS domain is available"}, - { 1, "location services via CS domain not supported"}, - { 2, "location services via CS domain supported"}, - { 3, "reserved"}, - { 0, NULL } + { 0, "no information about support of location services via CS domain is available"}, + { 1, "location services via CS domain not supported"}, + { 2, "location services via CS domain supported"}, + { 3, "reserved"}, + { 0, NULL } }; static const true_false_string nas_eps_emm_epc_lcs_value = { - "location services via EPC supported", - "location services via EPC not supported" + "location services via EPC supported", + "location services via EPC not supported" }; static const true_false_string nas_eps_emm_emc_bs_value = { - "emergency bearer services in S1 mode supported", - "emergency bearer services in S1 mode not supported" + "emergency bearer services in S1 mode supported", + "emergency bearer services in S1 mode not supported" }; static const true_false_string nas_eps_emm_ims_vops_value = { - "IMS voice over PS session in S1 mode supported", - "IMS voice over PS session in S1 mode not supported" + "IMS voice over PS session in S1 mode supported", + "IMS voice over PS session in S1 mode not supported" }; static guint16 de_emm_eps_net_feature_sup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset, bit_offset; - - curr_offset = offset; - bit_offset = curr_offset << 3; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset += 3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_cs_lcs_type, tvb, bit_offset, 2, ENC_BIG_ENDIAN); - bit_offset += 2; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_epc_lcs_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset += 1; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_emc_bs_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset += 1; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_ims_vops_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset += 1; - - return len; + guint32 curr_offset, bit_offset; + + curr_offset = offset; + bit_offset = curr_offset << 3; + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset += 3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_cs_lcs_type, tvb, bit_offset, 2, ENC_BIG_ENDIAN); + bit_offset += 2; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_epc_lcs_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset += 1; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_emc_bs_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset += 1; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_ims_vops_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset += 1; + + return len; } /* - * 9.9.3.13 EPS update result + * 9.9.3.13 EPS update result */ static const value_string nas_eps_emm_eps_update_result_vals[] = { - { 0, "TA updated"}, - { 1, "Combined TA/LA updated"}, - { 2, "Reserved"}, - { 3, "Reserved"}, - { 4, "TA updated and ISR activated"}, - { 5, "Combined TA/LA updated and ISR activated"}, - { 6, "Reserved"}, - { 7, "Reserved"}, - { 0, NULL } + { 0, "TA updated"}, + { 1, "Combined TA/LA updated"}, + { 2, "Reserved"}, + { 3, "Reserved"}, + { 4, "TA updated and ISR activated"}, + { 5, "Combined TA/LA updated and ISR activated"}, + { 6, "Reserved"}, + { 7, "Reserved"}, + { 0, NULL } }; /* - * 9.9.3.14 EPS update type + * 9.9.3.14 EPS update type */ static const true_false_string nas_eps_emm_active_flg_value = { - "Bearer establishment requested", - "No bearer establishment requested" + "Bearer establishment requested", + "No bearer establishment requested" }; static const value_string nas_eps_emm_eps_update_type_vals[] = { - { 0, "TA updating"}, - { 1, "Combined TA/LA updating"}, - { 2, "Combined TA/LA updating with IMSI attach"}, - { 3, "Periodic updating"}, - { 4, "Unused; shall be interpreted as 'TA updating', if received by the network"}, - { 5, "Unused; shall be interpreted as 'TA updating', if received by the network"}, - { 6, "Reserved"}, - { 7, "Reserved"}, - { 0, NULL } + { 0, "TA updating"}, + { 1, "Combined TA/LA updating"}, + { 2, "Combined TA/LA updating with IMSI attach"}, + { 3, "Periodic updating"}, + { 4, "Unused; shall be interpreted as 'TA updating', if received by the network"}, + { 5, "Unused; shall be interpreted as 'TA updating', if received by the network"}, + { 6, "Reserved"}, + { 7, "Reserved"}, + { 0, NULL } }; /* - * 9.9.3.15 ESM message container + * 9.9.3.15 ESM message container */ static guint16 de_emm_esm_msg_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - proto_item *item; - proto_tree *sub_tree; - tvbuff_t *new_tvb; - guint32 curr_offset; + proto_item *item; + proto_tree *sub_tree; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - item = proto_tree_add_item(tree, hf_nas_eps_esm_msg_cont, tvb, curr_offset, len, ENC_BIG_ENDIAN); - sub_tree = proto_item_add_subtree(item, ett_nas_eps_esm_msg_cont); + item = proto_tree_add_item(tree, hf_nas_eps_esm_msg_cont, tvb, curr_offset, len, ENC_BIG_ENDIAN); + sub_tree = proto_item_add_subtree(item, ett_nas_eps_esm_msg_cont); - /* This IE can contain any ESM PDU as defined in subclause 8.3. */ - new_tvb = tvb_new_subset(tvb, curr_offset, len, len ); - /* Plain NAS message */ - disect_nas_eps_esm_msg(new_tvb, gpinfo, sub_tree, 0/* offset */); + /* This IE can contain any ESM PDU as defined in subclause 8.3. */ + new_tvb = tvb_new_subset(tvb, curr_offset, len, len ); + /* Plain NAS message */ + disect_nas_eps_esm_msg(new_tvb, gpinfo, sub_tree, 0/* offset */); - return(len); + return(len); } /* - * 9.9.3.16 GPRS timer + * 9.9.3.16 GPRS timer * See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. * packet-gsm_a_gm.c */ /* - * 9.9.3.17 Identity type 2 + * 9.9.3.17 Identity type 2 * See subclause 10.5.5.9 in 3GPP TS 24.008 [6]. */ static const value_string nas_eps_emm_id_type2_vals[] = { - { 1, "IMSI"}, - { 2, "IMEI"}, - { 3, "IMEISV"}, - { 4, "TMSI"}, - { 0, NULL } + { 1, "IMSI"}, + { 2, "IMEI"}, + { 3, "IMEISV"}, + { 4, "TMSI"}, + { 0, NULL } }; /* - * 9.9.3.18 IMEISV request + * 9.9.3.18 IMEISV request * See subclause 10.5.5.10 in 3GPP TS 24.008 [6]. */ /* IMEISV request value (octet 1) */ static const value_string nas_eps_emm_imeisv_req_vals[] = { - { 0, "IMEISV not requested"}, - { 1, "IMEISV requested"}, - { 2, "IMEISV not requested"}, - { 3, "IMEISV not requested"}, - { 4, "IMEISV not requested"}, - { 5, "IMEISV not requested"}, - { 6, "IMEISV not requested"}, - { 7, "IMEISV not requested"}, - { 0, NULL } + { 0, "IMEISV not requested"}, + { 1, "IMEISV requested"}, + { 2, "IMEISV not requested"}, + { 3, "IMEISV not requested"}, + { 4, "IMEISV not requested"}, + { 5, "IMEISV not requested"}, + { 6, "IMEISV not requested"}, + { 7, "IMEISV not requested"}, + { 0, NULL } }; static guint16 de_emm_nas_imeisv_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - int bit_offset; + guint32 curr_offset; + int bit_offset; - curr_offset = offset; + curr_offset = offset; - bit_offset = curr_offset<<3; - bit_offset+=4; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_nas_eps_esm_imeisv_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + bit_offset = curr_offset<<3; + bit_offset+=4; + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_esm_imeisv_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 9.9.3.19 KSI and sequence number + * 9.9.3.19 KSI and sequence number */ static guint16 de_emm_nas_ksi_and_seq_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - int bit_offset; + guint32 curr_offset; + int bit_offset; - curr_offset = offset; - bit_offset = curr_offset<<3; + curr_offset = offset; + bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset += 3; - proto_tree_add_bits_item(tree, hf_nas_eps_seq_no_short, tvb, bit_offset, 5, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset += 3; + proto_tree_add_bits_item(tree, hf_nas_eps_seq_no_short, tvb, bit_offset, 5, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 9.9.3.20 MS network capability + * 9.9.3.20 MS network capability * See subclause 10.5.5.12 in 3GPP TS 24.008 [6]. */ /* - * 9.9.3.21 NAS key set identifier + * 9.9.3.21 NAS key set identifier */ /* * Type of security context flag (TSC) (octet 1) */ static const value_string nas_eps_tsc_vals[] = { - { 0, "Native security context (for KSIasme)"}, - { 1, "Mapped security context (for KSIsgsn)"}, - { 0, NULL } + { 0, "Native security context (for KSIasme)"}, + { 1, "Mapped security context (for KSIsgsn)"}, + { 0, NULL } }; -/* NAS key set identifier (octet 1) Bits 3 2 1 */ +/* NAS key set identifier (octet 1) Bits 3 2 1 */ static const value_string nas_eps_emm_NAS_key_set_identifier_vals[] = { - { 0, ""}, - { 1, ""}, - { 2, ""}, - { 3, ""}, - { 4, ""}, - { 5, ""}, - { 6, ""}, - { 7, "No key is available"}, - { 0, NULL } + { 0, ""}, + { 1, ""}, + { 2, ""}, + { 3, ""}, + { 4, ""}, + { 5, ""}, + { 6, ""}, + { 7, "No key is available"}, + { 0, NULL } }; /* Takes bit offset as input and consumes 4 bits */ static void de_emm_nas_key_set_id_bits(tvbuff_t *tvb, proto_tree *tree, guint32 bit_offset, const gchar *add_string) { - proto_item *item; - - /* Type of security context flag (TSC) (octet 1) V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_tsc, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - /* NAS key set identifier (octet 1) */ - item = proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - if(add_string){ - proto_item_append_text(item, "%s", add_string); - } - bit_offset+=3; + proto_item *item; + + /* Type of security context flag (TSC) (octet 1) V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_tsc, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + /* NAS key set identifier (octet 1) */ + item = proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + if(add_string){ + proto_item_append_text(item, "%s", add_string); + } + bit_offset+=3; } /* * Note used for TV Short @@ -1227,592 +1227,592 @@ de_emm_nas_key_set_id_bits(tvbuff_t *tvb, proto_tree *tree, guint32 bit_offset, static guint16 de_emm_nas_key_set_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset, bit_offset; - - curr_offset = offset; + guint32 curr_offset, bit_offset; - /* Get the bit offset of the lover half of the octet bits 4 - 1 */ - bit_offset = curr_offset<<3; - bit_offset+=4; + curr_offset = offset; - /* Type of security context flag (TSC) (octet 1) V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_tsc, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - /* NAS key set identifier (octet 1) */ - proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset+=3; - curr_offset++; + /* Get the bit offset of the lover half of the octet bits 4 - 1 */ + bit_offset = curr_offset<<3; + bit_offset+=4; + + /* Type of security context flag (TSC) (octet 1) V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_tsc, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + /* NAS key set identifier (octet 1) */ + proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset+=3; + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 9.9.3.22 NAS message container + * 9.9.3.22 NAS message container */ static guint16 de_emm_nas_msg_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb; - guint32 curr_offset; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* NAS message container contents (octet 3 to octet n) - * This IE can contain an SMS message (i.e. CP-DATA, CP-ACK or CP-ERROR) - * as defined in subclause 7.2 in 3GPP TS 24.011 [13A]. - */ + /* NAS message container contents (octet 3 to octet n) + * This IE can contain an SMS message (i.e. CP-DATA, CP-ACK or CP-ERROR) + * as defined in subclause 7.2 in 3GPP TS 24.011 [13A]. + */ - new_tvb = tvb_new_subset(tvb, curr_offset, len, len ); - if(gsm_a_dtap_handle) - call_dissector(gsm_a_dtap_handle,new_tvb, gpinfo, tree); + new_tvb = tvb_new_subset(tvb, curr_offset, len, len ); + if(gsm_a_dtap_handle) + call_dissector(gsm_a_dtap_handle,new_tvb, gpinfo, tree); - return(len); + return(len); } /* - * 9.9.3.23 NAS security algorithms + * 9.9.3.23 NAS security algorithms */ /* Type of integrity protection algorithm (octet 2, bit 1 to 3) */ static const value_string nas_eps_emm_toi_vals[] = { - { 0, "EPS integrity algorithm EIA0 (null integrity protection algorithm)"}, - { 1, "EPS integrity algorithm 128-EIA1"}, - { 2, "EPS integrity algorithm 128-EIA2"}, - { 3, "EPS integrity algorithm EIA3"}, - { 4, "EPS integrity algorithm EIA4"}, - { 5, "EPS integrity algorithm EIA5"}, - { 6, "EPS integrity algorithm EIA6"}, - { 7, "EPS integrity algorithm EIA7"}, - { 0, NULL } + { 0, "EPS integrity algorithm EIA0 (null integrity protection algorithm)"}, + { 1, "EPS integrity algorithm 128-EIA1"}, + { 2, "EPS integrity algorithm 128-EIA2"}, + { 3, "EPS integrity algorithm EIA3"}, + { 4, "EPS integrity algorithm EIA4"}, + { 5, "EPS integrity algorithm EIA5"}, + { 6, "EPS integrity algorithm EIA6"}, + { 7, "EPS integrity algorithm EIA7"}, + { 0, NULL } }; /* Type of ciphering algorithm (octet 2, bit 5 to 7) */ static const value_string nas_eps_emm_toc_vals[] = { - { 0, "EPS encryption algorithm EEA0 (null ciphering algorithm)"}, - { 1, "EPS encryption algorithm 128-EEA1"}, - { 2, "EPS encryption algorithm 128-EEA2"}, - { 3, "EPS encryption algorithm EEA3"}, - { 4, "EPS encryption algorithm EEA4"}, - { 5, "EPS encryption algorithm EEA5"}, - { 6, "EPS encryption algorithm EEA6"}, - { 7, "EPS encryption algorithm EEA7"}, - { 0, NULL } + { 0, "EPS encryption algorithm EEA0 (null ciphering algorithm)"}, + { 1, "EPS encryption algorithm 128-EEA1"}, + { 2, "EPS encryption algorithm 128-EEA2"}, + { 3, "EPS encryption algorithm EEA3"}, + { 4, "EPS encryption algorithm EEA4"}, + { 5, "EPS encryption algorithm EEA5"}, + { 6, "EPS encryption algorithm EEA6"}, + { 7, "EPS encryption algorithm EEA7"}, + { 0, NULL } }; static guint16 de_emm_nas_sec_alsgs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - int bit_offset; - guint32 curr_offset; + int bit_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - bit_offset = offset<<3; - /* Bit 4 and 8 of octet 2 are spare and shall be coded as zero. */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - /* Type of ciphering algorithm (octet 2, bit 5 to 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_toc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Bit 4 and 8 of octet 2 are spare and shall be coded as zero. */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - /* Type of integrity protection algorithm (octet 2, bit 1 to 3) */ - proto_tree_add_item(tree, hf_nas_eps_emm_toi, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + bit_offset = offset<<3; + /* Bit 4 and 8 of octet 2 are spare and shall be coded as zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + /* Type of ciphering algorithm (octet 2, bit 5 to 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_toc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Bit 4 and 8 of octet 2 are spare and shall be coded as zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + /* Type of integrity protection algorithm (octet 2, bit 1 to 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_toi, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 9.9.3.24 Network name + * 9.9.3.24 Network name * See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. */ /* - * 9.9.3.25 Nonce + * 9.9.3.25 Nonce */ static guint16 de_emm_nonce(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_emm_nonce, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset+=4; + proto_tree_add_item(tree, hf_nas_eps_emm_nonce, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset+=4; - return(len); + return(len); } /* * 9.9.3.25A Paging identity */ static const true_false_string nas_eps_emm_paging_id_vals = { - "TMSI", - "IMSI" + "TMSI", + "IMSI" }; static guint16 de_emm_paging_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, curr_offset<<3, 7, ENC_BIG_ENDIAN); - proto_tree_add_bits_item(tree, hf_nas_eps_emm_paging_id, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN); - curr_offset+=len; + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, curr_offset<<3, 7, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(tree, hf_nas_eps_emm_paging_id, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN); + curr_offset+=len; - return(len); + return(len); } /* - * 9.9.3.26 P-TMSI signature + * 9.9.3.26 P-TMSI signature * See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. */ /* - * 9.9.3.27 Service type + * 9.9.3.27 Service type */ static const value_string nas_eps_service_type_vals[] = { - { 0, "Mobile originating CS fallback or 1xCS fallback"}, - { 1, "Mobile terminating CS fallback or 1xCS fallback"}, - { 2, "Mobile originating CS fallback emergency call or 1xCS fallback emergency call"}, - { 0, NULL } + { 0, "Mobile originating CS fallback or 1xCS fallback"}, + { 1, "Mobile terminating CS fallback or 1xCS fallback"}, + { 2, "Mobile originating CS fallback emergency call or 1xCS fallback emergency call"}, + { 0, NULL } }; /* - * 9.9.3.28 Short MAC + * 9.9.3.28 Short MAC */ static guint16 de_emm_nas_short_mac(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_emm_short_mac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + proto_tree_add_item(tree, hf_nas_eps_emm_short_mac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 9.9.3.29 Time zone + * 9.9.3.29 Time zone * See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. */ /* - * 9.9.3.30 Time zone and time + * 9.9.3.30 Time zone and time * See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. */ /* - * 9.9.3.31 TMSI status + * 9.9.3.31 TMSI status * See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. */ /* - * 9.9.3.32 Tracking area identity + * 9.9.3.32 Tracking area identity */ guint16 de_emm_trac_area_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); - proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); + proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 9.9.3.33 Tracking area identity list + * 9.9.3.33 Tracking area identity list */ /* Type of list (octet 1) * Bits 7 6 */ static const value_string nas_eps_emm_tai_tol_vals[] = { - { 0, "list of TACs belonging to one PLMN, with non-consecutive TAC values"}, - { 1, "list of TACs belonging to one PLMN, with consecutive TAC values"}, - { 2, "list of TAIs belonging to different PLMNs"}, - { 0, NULL } + { 0, "list of TACs belonging to one PLMN, with non-consecutive TAC values"}, + { 1, "list of TACs belonging to one PLMN, with consecutive TAC values"}, + { 2, "list of TAIs belonging to different PLMNs"}, + { 0, NULL } }; static guint16 de_emm_trac_area_id_lst(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_item *item; - guint32 curr_offset; - guint8 octet, tol, n_elem; - int i; - - curr_offset = offset; - - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN); - /* Type of list (octet 1) Bits 7 6 */ - proto_tree_add_item(tree, hf_nas_eps_emm_tai_tol, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* Number of elements (octet 1) Bits 5 4 3 2 1 */ - octet = tvb_get_guint8(tvb,curr_offset)& 0x7f; - tol = octet >> 5; - n_elem = (octet & 0x1f)+1; - item = proto_tree_add_item(tree, hf_nas_eps_emm_tai_n_elem, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - if(n_elem<16) - proto_item_append_text(item, " [+1 = %u element(s)]", n_elem); - - curr_offset++; - if (tol>2){ - proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset) , "Unknown type of list ( Not in 3GPP TS 24.301 version 8.1.0 Release 8 )"); - return len; - } - - switch(tol){ - case 0: - /* MCC digit 2 MCC digit 1 octet 2 - * MNC digit 3 MCC digit 3 octet 3 - * MNC digit 2 MNC digit 1 octet 4 - */ - curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); - /* type of list = "000" */ - /* TAC 1 octet 5 - * TAC 1 (continued) octet 6 - * ... - * ... - * TAC k octet 2k+3* - * TAC k (continued) octet 2k+4* - */ - if (len < (guint)(4+(n_elem*2))){ - proto_tree_add_text(tree, tvb, curr_offset, len-1 , "[Wrong number of elements?]"); - return len; - } - for (i=0; i < n_elem; i++, curr_offset+=2) - proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - break; - case 1: - - /* type of list = "010" */ - /* MCC digit 2 MCC digit 1 octet 2 - * MNC digit 3 MCC digit 3 octet 3 - * MNC digit 2 MNC digit 1 octet 4 - */ - curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); - proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; - break; - case 2: - if (len< (guint)(1+(n_elem*5))){ - proto_tree_add_text(tree, tvb, curr_offset, len-1 , "[Wrong number of elements?]"); - return len; - } - - for (i=0; i < n_elem; i++){ - /* type of list = "001" */ - /* MCC digit 2 MCC digit 1 octet 2 - * MNC digit 3 MCC digit 3 octet 3 - * MNC digit 2 MNC digit 1 octet 4 - */ - curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); - proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; - } - break; - default: - /* Unknown ( Not in 3GPP TS 24.301 version 8.1.0 Release 8 ) */ - break; - } - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - - return(curr_offset-offset); + proto_item *item; + guint32 curr_offset; + guint8 octet, tol, n_elem; + int i; + + curr_offset = offset; + + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN); + /* Type of list (octet 1) Bits 7 6 */ + proto_tree_add_item(tree, hf_nas_eps_emm_tai_tol, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* Number of elements (octet 1) Bits 5 4 3 2 1 */ + octet = tvb_get_guint8(tvb,curr_offset)& 0x7f; + tol = octet >> 5; + n_elem = (octet & 0x1f)+1; + item = proto_tree_add_item(tree, hf_nas_eps_emm_tai_n_elem, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + if(n_elem<16) + proto_item_append_text(item, " [+1 = %u element(s)]", n_elem); + + curr_offset++; + if (tol>2){ + proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset) , "Unknown type of list ( Not in 3GPP TS 24.301 version 8.1.0 Release 8 )"); + return len; + } + + switch(tol){ + case 0: + /* MCC digit 2 MCC digit 1 octet 2 + * MNC digit 3 MCC digit 3 octet 3 + * MNC digit 2 MNC digit 1 octet 4 + */ + curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); + /* type of list = "000" */ + /* TAC 1 octet 5 + * TAC 1 (continued) octet 6 + * ... + * ... + * TAC k octet 2k+3* + * TAC k (continued) octet 2k+4* + */ + if (len < (guint)(4+(n_elem*2))){ + proto_tree_add_text(tree, tvb, curr_offset, len-1 , "[Wrong number of elements?]"); + return len; + } + for (i=0; i < n_elem; i++, curr_offset+=2) + proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + break; + case 1: + + /* type of list = "010" */ + /* MCC digit 2 MCC digit 1 octet 2 + * MNC digit 3 MCC digit 3 octet 3 + * MNC digit 2 MNC digit 1 octet 4 + */ + curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); + proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; + break; + case 2: + if (len< (guint)(1+(n_elem*5))){ + proto_tree_add_text(tree, tvb, curr_offset, len-1 , "[Wrong number of elements?]"); + return len; + } + + for (i=0; i < n_elem; i++){ + /* type of list = "001" */ + /* MCC digit 2 MCC digit 1 octet 2 + * MNC digit 3 MCC digit 3 octet 3 + * MNC digit 2 MNC digit 1 octet 4 + */ + curr_offset = dissect_e212_mcc_mnc(tvb, gpinfo, tree, curr_offset, TRUE); + proto_tree_add_item(tree, hf_nas_eps_emm_tai_tac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; + } + break; + default: + /* Unknown ( Not in 3GPP TS 24.301 version 8.1.0 Release 8 ) */ + break; + } + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + + return(curr_offset-offset); } /* - * 9.9.3.34 UE network capability + * 9.9.3.34 UE network capability */ static const true_false_string nas_eps_emm_supported_flg_value = { - "Supported", - "Not Supported" + "Supported", + "Not Supported" }; static const true_false_string nas_eps_emm_ucs2_supp_flg_value = { - "The UE has no preference between the use of the default alphabet and the use of UCS2", - "The UE has a preference for the default alphabet" + "The UE has no preference between the use of the default alphabet and the use of UCS2", + "The UE has a preference for the default alphabet" }; /* LPP capability (octet 7, bit 4) */ static const true_false_string nas_eps_emm_lpp_cap_flg = { - "LTE Positioning Protocol supported", - "LTE Positioning Protocol not supported" + "LTE Positioning Protocol supported", + "LTE Positioning Protocol not supported" }; /* LCS capability (octet 7, bit 3) */ static const true_false_string nas_eps_emm_lcs_cap_flg = { - "Location services notification mechanisms supported", - "Location services notification mechanisms not supported" + "Location services notification mechanisms supported", + "Location services notification mechanisms not supported" }; /* 1xSRVCC capability (octet 7, bit 2) */ static const true_false_string nas_eps_emm_1xsrvcc_cap_flg = { - "SRVCC from E-UTRAN to cdma2000 1xCS supported", - "SRVCC from E-UTRAN to cdma2000 1x CS not supported" + "SRVCC from E-UTRAN to cdma2000 1xCS supported", + "SRVCC from E-UTRAN to cdma2000 1x CS not supported" }; /* NF capability (octet 7, bit 1) */ static const true_false_string nas_eps_emm_nf_cap_flg = { - "Notification procedure supported", - "Notification procedure not supported" + "Notification procedure supported", + "Notification procedure not supported" }; guint16 de_emm_ue_net_cap(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; - - curr_offset = offset; - - - /* EPS encryption algorithms supported (octet 3) */ - /* EPS encryption algorithm EEA0 supported (octet 3, bit 8) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA1 supported (octet 3, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA2 supported (octet 3, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA3 supported (octet 3, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA4 supported (octet 3, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA5 supported (octet 3, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA6 supported (octet 3, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA7 supported (octet 3, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - - /* EPS integrity algorithms supported (octet 4) */ - /* EPS integrity algorithm EIA0 supported (octet 4, bit 8) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm 128-EIA1 supported (octet 4, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm 128-EIA2 supported (octet 4, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA3 supported (octet 4, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA4 supported (octet 4, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA5 supported (octet 4, bit 3) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA6 supported (octet 4, bit 2) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA7 supported (octet 4, bit 1) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - - /* Following octets are optional */ - if ((curr_offset - offset) >= len) - return (len); - - /* UMTS encryption algorithms supported (octet 5) - * UMTS encryption algorithm UEA0 supported (octet 5, bit 8) - */ - /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 8) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-UEA0 supported (octet 5, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - if ((curr_offset - offset) >= len) - return (len); - - /* UCS2 support (UCS2) (octet 6, bit 8) - * This information field indicates the likely treatment of UCS2 encoded character strings - * by the UE. - */ - proto_tree_add_item(tree, hf_nas_eps_emm_ucs2_supp, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithms supported (octet 6) */ - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 3) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 2) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 1) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - if ((curr_offset - offset) >= len) - return (len); - - /* Bits 8 to 5 of octet 7 are spare and shall be coded as zero. */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN); - /* LPP capability (octet 7, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_lpp_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* LCS capability (octet 7, bit 3) */ - proto_tree_add_item(tree, hf_nas_eps_emm_lcs_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* 1xSRVCC capability (octet 7, bit 2) */ - proto_tree_add_item(tree, hf_nas_eps_emm_1xsrvcc_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* NF capability (octet 7, bit 1) */ - proto_tree_add_item(tree, hf_nas_eps_emm_nf_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - return(len); + guint32 curr_offset; + + curr_offset = offset; + + + /* EPS encryption algorithms supported (octet 3) */ + /* EPS encryption algorithm EEA0 supported (octet 3, bit 8) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA1 supported (octet 3, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA2 supported (octet 3, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA3 supported (octet 3, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA4 supported (octet 3, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA5 supported (octet 3, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA6 supported (octet 3, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA7 supported (octet 3, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + + /* EPS integrity algorithms supported (octet 4) */ + /* EPS integrity algorithm EIA0 supported (octet 4, bit 8) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm 128-EIA1 supported (octet 4, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm 128-EIA2 supported (octet 4, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA3 supported (octet 4, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA4 supported (octet 4, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA5 supported (octet 4, bit 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA6 supported (octet 4, bit 2) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA7 supported (octet 4, bit 1) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + + /* Following octets are optional */ + if ((curr_offset - offset) >= len) + return (len); + + /* UMTS encryption algorithms supported (octet 5) + * UMTS encryption algorithm UEA0 supported (octet 5, bit 8) + */ + /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 8) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-UEA0 supported (octet 5, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm 128-UEA0 supported (octet 5, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + if ((curr_offset - offset) >= len) + return (len); + + /* UCS2 support (UCS2) (octet 6, bit 8) + * This information field indicates the likely treatment of UCS2 encoded character strings + * by the UE. + */ + proto_tree_add_item(tree, hf_nas_eps_emm_ucs2_supp, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithms supported (octet 6) */ + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 2) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 1) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + if ((curr_offset - offset) >= len) + return (len); + + /* Bits 8 to 5 of octet 7 are spare and shall be coded as zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN); + /* LPP capability (octet 7, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_lpp_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* LCS capability (octet 7, bit 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_lcs_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* 1xSRVCC capability (octet 7, bit 2) */ + proto_tree_add_item(tree, hf_nas_eps_emm_1xsrvcc_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* NF capability (octet 7, bit 1) */ + proto_tree_add_item(tree, hf_nas_eps_emm_nf_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + return(len); } /* UE radio capability information update needed flag (URC upd) (octet 1) */ static const true_false_string nas_eps_emm_ue_ra_cap_inf_upd_need_flg = { - "UE radio capability information update needed", - "UE radio capability information update not needed" + "UE radio capability information update needed", + "UE radio capability information update not needed" }; /* - * 9.9.3.35 UE radio capability information update needed + * 9.9.3.35 UE radio capability information update needed */ static guint16 de_emm_ue_ra_cap_inf_upd_need(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - return(len); + return(len); } /* - * 9.9.3.36 UE security capability + * 9.9.3.36 UE security capability */ static guint16 de_emm_ue_sec_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - - curr_offset = offset; - - /* EPS encryption algorithms supported (octet 3) */ - /* EPS encryption algorithm EEA0 supported (octet 3, bit 8) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA1 supported (octet 3, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA2 supported (octet 3, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA3 supported (octet 3, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA4 supported (octet 3, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA5 supported (octet 3, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA6 supported (octet 3, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm 128-EEA7 supported (octet 3, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - - /* EPS integrity algorithms supported (octet 4) */ - /* EPS integrity algorithm EIA0 supported (octet 4, bit 8) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm 128-EIA1 supported (octet 4, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm 128-EIA2 supported (octet 4, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_128eia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA3 supported (octet 4, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA4 supported (octet 4, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA5 supported (octet 4, bit 3) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA6 supported (octet 4, bit 2) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS integrity algorithm EIA7 supported (octet 4, bit 1) */ - proto_tree_add_item(tree, hf_nas_eps_emm_eia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - - /* Octets 5, 6, and 7 are optional. If octet 5 is included, - * then also octet 6 shall be included and octet 7 may be included. - */ - if(len==2) - return(len); - - /* UMTS encryption algorithms supported (octet 5) */ - /* UMTS encryption algorithm UEA0 supported (octet 5, bit 8) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm UEA1 supported (octet 5, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm UEA2 supported (octet 5, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm UEA3 supported (octet 5, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EPS encryption algorithm UEA4 supported (octet 5, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm UEA5 supported (octet 5, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm UEA6 supported (octet 5, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS encryption algorithm UEA7 supported (octet 5, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - /* UMTS integrity algorithms supported (octet 6) */ - /* Bit 8 of octet 6 is spare and shall be coded as zero. */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA1 supported (octet 6, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA2 supported (octet 6, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA3 supported (octet 6, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA4 supported (octet 6, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA5 supported (octet 6, bit 3) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA6 supported (octet 6, bit 2) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* UMTS integrity algorithm UIA7 supported (octet 6, bit 1) */ - proto_tree_add_item(tree, hf_nas_eps_emm_uia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - if(len==4) - return(len); - - /* Bit 8 of octet 7 is spare and shall be coded as zero. */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 1, ENC_BIG_ENDIAN); - /* GPRS encryption algorithm GEA1 supported (octet 7, bit 7) */ - proto_tree_add_item(tree, hf_nas_eps_emm_gea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* GPRS encryption algorithm GEA2 supported (octet 7, bit 6) */ - proto_tree_add_item(tree, hf_nas_eps_emm_gea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* GPRS encryption algorithm GEA3 supported (octet 7, bit 5) */ - proto_tree_add_item(tree, hf_nas_eps_emm_gea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* GPRS encryption algorithm GEA4 supported (octet 7, bit 4) */ - proto_tree_add_item(tree, hf_nas_eps_emm_gea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* GPRS encryption algorithm GEA5 supported (octet 7, bit 3) */ - proto_tree_add_item(tree, hf_nas_eps_emm_gea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* GPRS encryption algorithm GEA6 supported (octet 7, bit 2) */ - proto_tree_add_item(tree, hf_nas_eps_emm_gea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* GPRS encryption algorithm GEA7 supported (octet 7, bit 1) */ - proto_tree_add_item(tree, hf_nas_eps_emm_gea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - return(len); + guint32 curr_offset; + + curr_offset = offset; + + /* EPS encryption algorithms supported (octet 3) */ + /* EPS encryption algorithm EEA0 supported (octet 3, bit 8) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA1 supported (octet 3, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA2 supported (octet 3, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA3 supported (octet 3, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA4 supported (octet 3, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA5 supported (octet 3, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA6 supported (octet 3, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm 128-EEA7 supported (octet 3, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + + /* EPS integrity algorithms supported (octet 4) */ + /* EPS integrity algorithm EIA0 supported (octet 4, bit 8) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm 128-EIA1 supported (octet 4, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm 128-EIA2 supported (octet 4, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_128eia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA3 supported (octet 4, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA4 supported (octet 4, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA5 supported (octet 4, bit 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA6 supported (octet 4, bit 2) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS integrity algorithm EIA7 supported (octet 4, bit 1) */ + proto_tree_add_item(tree, hf_nas_eps_emm_eia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + + /* Octets 5, 6, and 7 are optional. If octet 5 is included, + * then also octet 6 shall be included and octet 7 may be included. + */ + if(len==2) + return(len); + + /* UMTS encryption algorithms supported (octet 5) */ + /* UMTS encryption algorithm UEA0 supported (octet 5, bit 8) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea0, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm UEA1 supported (octet 5, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm UEA2 supported (octet 5, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm UEA3 supported (octet 5, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EPS encryption algorithm UEA4 supported (octet 5, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm UEA5 supported (octet 5, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm UEA6 supported (octet 5, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS encryption algorithm UEA7 supported (octet 5, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + /* UMTS integrity algorithms supported (octet 6) */ + /* Bit 8 of octet 6 is spare and shall be coded as zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA1 supported (octet 6, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA2 supported (octet 6, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA3 supported (octet 6, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA4 supported (octet 6, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA5 supported (octet 6, bit 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA6 supported (octet 6, bit 2) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* UMTS integrity algorithm UIA7 supported (octet 6, bit 1) */ + proto_tree_add_item(tree, hf_nas_eps_emm_uia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + if(len==4) + return(len); + + /* Bit 8 of octet 7 is spare and shall be coded as zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3), 1, ENC_BIG_ENDIAN); + /* GPRS encryption algorithm GEA1 supported (octet 7, bit 7) */ + proto_tree_add_item(tree, hf_nas_eps_emm_gea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* GPRS encryption algorithm GEA2 supported (octet 7, bit 6) */ + proto_tree_add_item(tree, hf_nas_eps_emm_gea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* GPRS encryption algorithm GEA3 supported (octet 7, bit 5) */ + proto_tree_add_item(tree, hf_nas_eps_emm_gea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* GPRS encryption algorithm GEA4 supported (octet 7, bit 4) */ + proto_tree_add_item(tree, hf_nas_eps_emm_gea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* GPRS encryption algorithm GEA5 supported (octet 7, bit 3) */ + proto_tree_add_item(tree, hf_nas_eps_emm_gea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* GPRS encryption algorithm GEA6 supported (octet 7, bit 2) */ + proto_tree_add_item(tree, hf_nas_eps_emm_gea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* GPRS encryption algorithm GEA7 supported (octet 7, bit 1) */ + proto_tree_add_item(tree, hf_nas_eps_emm_gea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + return(len); } /* - * 9.9.3.37 Emergency Number List + * 9.9.3.37 Emergency Number List * See subclause 10.5.3.13 in 3GPP TS 24.008 [13]. * packet-gsm_a_dtap.c */ /* - * 9.9.3.38 CLI + * 9.9.3.38 CLI */ /* @@ -1822,90 +1822,90 @@ de_emm_ue_sec_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint */ /* - * 9.9.3.39 SS Code + * 9.9.3.39 SS Code */ static guint16 de_emm_ss_code(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* - * SS Code value - * The coding of the SS Code value is given in subclause 17.7.5 of 3GPP TS 29.002 [15B]. - * value string imported from gsm map - */ - proto_tree_add_item(tree, hf_nas_eps_emm_ss_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* + * SS Code value + * The coding of the SS Code value is given in subclause 17.7.5 of 3GPP TS 29.002 [15B]. + * value string imported from gsm map + */ + proto_tree_add_item(tree, hf_nas_eps_emm_ss_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - return(len); + return(len); } /* - * 9.9.3.40 LCS indicator + * 9.9.3.40 LCS indicator */ /* LCS indicator value */ static const value_string nas_eps_emm_lcs_ind_vals[] = { - { 0, "Normal, unspecified"}, - { 1, "MT-LR"}, - { 0, NULL } + { 0, "Normal, unspecified"}, + { 1, "MT-LR"}, + { 0, NULL } }; static guint16 de_emm_lcs_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_emm_lcs_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_emm_lcs_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - return(len); + return(len); } /* - * 9.9.3.41 LCS client identity + * 9.9.3.41 LCS client identity */ static guint16 de_emm_lcs_client_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - tvbuff_t *new_tvb; + guint32 curr_offset; + tvbuff_t *new_tvb; - curr_offset = offset; + curr_offset = offset; - /* LCS client identity (value part) - * The coding of the value part of the LCS client identity is given - * in subclause 17.7.13 of 3GPP TS 29.002 [15B](GSM MAP). - */ - new_tvb = tvb_new_subset(tvb, curr_offset, len, len ); - dissect_gsm_map_lcs_LCS_ClientID_PDU( new_tvb, gpinfo, tree ); + /* LCS client identity (value part) + * The coding of the value part of the LCS client identity is given + * in subclause 17.7.13 of 3GPP TS 29.002 [15B](GSM MAP). + */ + new_tvb = tvb_new_subset(tvb, curr_offset, len, len ); + dissect_gsm_map_lcs_LCS_ClientID_PDU( new_tvb, gpinfo, tree ); - return(len); + return(len); } /* * 9.9.3.42 Generic message container type */ static const value_string nas_eps_emm_gen_msg_cont_type_vals[] = { - { 0, "Reserved"}, - { 1, "LTE Positioning Protocol (LPP) message container"}, - { 2, "Location services message container "}, - { 0, NULL } + { 0, "Reserved"}, + { 1, "LTE Positioning Protocol (LPP) message container"}, + { 2, "Location services message container "}, + { 0, NULL } }; static guint16 de_emm_gen_msg_cont_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_emm_gen_msg_cont_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_nas_eps_emm_gen_msg_cont_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(len); + return(len); } /* * 9.9.3.43 Generic message container @@ -1913,9 +1913,9 @@ de_emm_gen_msg_cont_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ static guint16 de_emm_gen_msg_cont(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_text(tree, tvb, offset, len, "Not dissected yet"); + proto_tree_add_text(tree, tvb, offset, len, "Not dissected yet"); - return(len); + return(len); } /* * 9.9.3.44 Voice domain preference and UE's usage setting @@ -1924,7 +1924,7 @@ de_emm_gen_msg_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui */ /* - * 9.9.4 EPS Session Management (ESM) information elements + * 9.9.4 EPS Session Management (ESM) information elements */ /* @@ -1938,126 +1938,126 @@ de_emm_gen_msg_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui static guint16 de_esm_apn_aggr_max_br(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 octet; - guint32 dl_total = 0; - guint32 ul_total = 0; - guint32 bitrate = 0; - - curr_offset = offset; - /* APN-AMBR for downlink octet 3 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl, tvb, curr_offset, 1, octet, - "Reserved"); - }else{ - bitrate = calc_bitrate(octet); - dl_total += bitrate; - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl, tvb, curr_offset, 1, octet, - "APN-AMBR for downlink : %u kbps", bitrate); - } - curr_offset++; - - /* APN-AMBR for uplink octet 4 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul, tvb, curr_offset, 1, octet, - "Reserved"); - }else{ - bitrate = calc_bitrate(octet); - ul_total += bitrate; - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul, tvb, curr_offset, 1, octet, - "APN-AMBR for uplink : %u kbps", bitrate); - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* APN-AMBR for downlink (extended) octet 5 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext, tvb, curr_offset, 1, octet, - "Use the value indicated by the APN-AMBR for downlink"); - }else{ - bitrate = calc_bitrate_ext(octet); - dl_total += (octet > 0x4a) ? bitrate*1000 : bitrate; - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext, tvb, curr_offset, 1, octet, - "APN-AMBR for downlink (extended) : %u %s", - bitrate, - (octet > 0x4a) ? "Mbps" : "kbps"); - } - if (len < 5) { - /* APN-AMBR for downlink (extended-2) is not present; display total now */ - if (octet != 0) { - /* Ignore value indicated by the APN-AMBR for downlink */ - dl_total = (octet > 0x4a) ? bitrate*1000 : bitrate; - } - if (dl_total >= 1000) { - proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for downlink : %.3f Mbps", (gfloat)dl_total / 1000); - } else { - proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for downlink : %u kbps", dl_total); - } - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* APN-AMBR for uplink (extended) octet 6 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext, tvb, curr_offset, 1, octet, - "Use the value indicated by the APN-AMBR for uplink"); - }else{ - bitrate = calc_bitrate_ext(octet); - ul_total += (octet > 0x4a) ? bitrate*1000 : bitrate; - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext, tvb, curr_offset, 1, octet, - "APN-AMBR for uplink (extended) : %u %s", - bitrate, - (octet > 0x4a) ? "Mbps" : "kbps"); - } - if (len < 6) { - /* APN-AMBR for uplink (extended-2) is not present; display total now */ - if (octet != 0) { - /* Ignore value indicated by the APN-AMBR for uplink */ - ul_total = (octet > 0x4a) ? bitrate*1000 : bitrate; - } - if (ul_total >= 1000) { - proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for uplink : %.3f Mbps", (gfloat)ul_total / 1000); - } else { - proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for uplink : %u kbps", ul_total); - } - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* APN-AMBR for downlink (extended-2) octet 7 */ - octet = tvb_get_guint8(tvb,curr_offset); - if((octet==0)||(octet==0xff)){ - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext2, tvb, curr_offset, 1, octet, - "Use the value indicated by the APN-AMBR for downlink and APN-AMBR for downlink (extended)"); - }else{ - dl_total += octet*256*1000; - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext2, tvb, curr_offset, 1, octet, - "APN-AMBR for downlink (extended-2) : %u Mbps", - (octet* 256)); - } - proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for downlink : %.3f Mbps", (gfloat)dl_total / 1000); - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* APN-AMBR for uplink (extended-2) octet 8 */ - octet = tvb_get_guint8(tvb,curr_offset); - if((octet==0)||(octet==0xff)){ - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext2, tvb, curr_offset, 1, octet, - "Use the value indicated by the APN-AMBR for uplink and APN-AMBR for downlink (extended)"); - }else{ - ul_total += octet*256*1000; - proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext2, tvb, curr_offset, 1, octet, - "APN-AMBR for uplink (extended-2) : %u Mbps", - (octet* 256)); - } - proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for uplink : %.3f Mbps", (gfloat)ul_total / 1000); - curr_offset++; - - return(len); + guint32 curr_offset; + guint8 octet; + guint32 dl_total = 0; + guint32 ul_total = 0; + guint32 bitrate = 0; + + curr_offset = offset; + /* APN-AMBR for downlink octet 3 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl, tvb, curr_offset, 1, octet, + "Reserved"); + }else{ + bitrate = calc_bitrate(octet); + dl_total += bitrate; + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl, tvb, curr_offset, 1, octet, + "APN-AMBR for downlink : %u kbps", bitrate); + } + curr_offset++; + + /* APN-AMBR for uplink octet 4 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul, tvb, curr_offset, 1, octet, + "Reserved"); + }else{ + bitrate = calc_bitrate(octet); + ul_total += bitrate; + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul, tvb, curr_offset, 1, octet, + "APN-AMBR for uplink : %u kbps", bitrate); + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* APN-AMBR for downlink (extended) octet 5 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext, tvb, curr_offset, 1, octet, + "Use the value indicated by the APN-AMBR for downlink"); + }else{ + bitrate = calc_bitrate_ext(octet); + dl_total += (octet > 0x4a) ? bitrate*1000 : bitrate; + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext, tvb, curr_offset, 1, octet, + "APN-AMBR for downlink (extended) : %u %s", + bitrate, + (octet > 0x4a) ? "Mbps" : "kbps"); + } + if (len < 5) { + /* APN-AMBR for downlink (extended-2) is not present; display total now */ + if (octet != 0) { + /* Ignore value indicated by the APN-AMBR for downlink */ + dl_total = (octet > 0x4a) ? bitrate*1000 : bitrate; + } + if (dl_total >= 1000) { + proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for downlink : %.3f Mbps", (gfloat)dl_total / 1000); + } else { + proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for downlink : %u kbps", dl_total); + } + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* APN-AMBR for uplink (extended) octet 6 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext, tvb, curr_offset, 1, octet, + "Use the value indicated by the APN-AMBR for uplink"); + }else{ + bitrate = calc_bitrate_ext(octet); + ul_total += (octet > 0x4a) ? bitrate*1000 : bitrate; + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext, tvb, curr_offset, 1, octet, + "APN-AMBR for uplink (extended) : %u %s", + bitrate, + (octet > 0x4a) ? "Mbps" : "kbps"); + } + if (len < 6) { + /* APN-AMBR for uplink (extended-2) is not present; display total now */ + if (octet != 0) { + /* Ignore value indicated by the APN-AMBR for uplink */ + ul_total = (octet > 0x4a) ? bitrate*1000 : bitrate; + } + if (ul_total >= 1000) { + proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for uplink : %.3f Mbps", (gfloat)ul_total / 1000); + } else { + proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for uplink : %u kbps", ul_total); + } + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* APN-AMBR for downlink (extended-2) octet 7 */ + octet = tvb_get_guint8(tvb,curr_offset); + if((octet==0)||(octet==0xff)){ + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext2, tvb, curr_offset, 1, octet, + "Use the value indicated by the APN-AMBR for downlink and APN-AMBR for downlink (extended)"); + }else{ + dl_total += octet*256*1000; + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_dl_ext2, tvb, curr_offset, 1, octet, + "APN-AMBR for downlink (extended-2) : %u Mbps", + (octet* 256)); + } + proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for downlink : %.3f Mbps", (gfloat)dl_total / 1000); + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* APN-AMBR for uplink (extended-2) octet 8 */ + octet = tvb_get_guint8(tvb,curr_offset); + if((octet==0)||(octet==0xff)){ + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext2, tvb, curr_offset, 1, octet, + "Use the value indicated by the APN-AMBR for uplink and APN-AMBR for downlink (extended)"); + }else{ + ul_total += octet*256*1000; + proto_tree_add_uint_format(tree, hf_nas_eps_emm_apn_ambr_ul_ext2, tvb, curr_offset, 1, octet, + "APN-AMBR for uplink (extended-2) : %u Mbps", + (octet* 256)); + } + proto_tree_add_text(tree, tvb, curr_offset, 1,"Total APN-AMBR for uplink : %.3f Mbps", (gfloat)ul_total / 1000); + curr_offset++; + + return(len); } /* * 9.9.4.3 EPS quality of service @@ -2065,17 +2065,17 @@ de_esm_apn_aggr_max_br(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, /* Quality of Service Class Identifier (QCI), octet 3 (see 3GPP TS 23.203 [7]) */ static const value_string nas_eps_qci_vals[] = { - { 0, "UE -> NW Network selects the QCI / NW -> UE Reserved"}, - { 1, "QCI 1"}, - { 2, "QCI 2"}, - { 3, "QCI 3"}, - { 4, "QCI 4"}, - { 5, "QCI 5"}, - { 6, "QCI 6"}, - { 7, "QCI 7"}, - { 8, "QCI 8"}, - { 9, "QCI 9"}, - { 0, NULL } + { 0, "UE -> NW Network selects the QCI / NW -> UE Reserved"}, + { 1, "QCI 1"}, + { 2, "QCI 2"}, + { 3, "QCI 3"}, + { 4, "QCI 4"}, + { 5, "QCI 5"}, + { 6, "QCI 6"}, + { 7, "QCI 7"}, + { 8, "QCI 8"}, + { 9, "QCI 9"}, + { 0, NULL } }; @@ -2083,194 +2083,194 @@ static const value_string nas_eps_qci_vals[] = { static guint16 de_esm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 octet; - - curr_offset = offset; - - /* QCI octet 3 */ - proto_tree_add_item(tree, hf_nas_eps_qci, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Maximum bit rate for uplink octet 4 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_mbr_ul, tvb, curr_offset, 1, octet, - "UE->NW Subscribed maximum bit rate for uplink/ NW->UE Reserved"); - }else{ - proto_tree_add_uint_format(tree, hf_nas_eps_mbr_ul, tvb, curr_offset, 1, octet, - "Maximum bit rate for uplink : %u kbps", calc_bitrate(octet)); - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Maximum bit rate for downlink octet 5 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_mbr_dl, tvb, curr_offset, 1, octet, - "UE->NW Subscribed maximum bit rate for downlink/ NW->UE Reserved"); - }else{ - proto_tree_add_uint_format(tree, hf_nas_eps_mbr_dl, tvb, curr_offset, 1, octet, - "Maximum bit rate for downlink : %u kbps", calc_bitrate(octet)); - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Guaranteed bit rate for uplink octet 6 */ - octet = tvb_get_guint8(tvb,curr_offset); - proto_tree_add_uint_format(tree, hf_nas_eps_gbr_ul, tvb, curr_offset, 1, octet, - "Guaranteed bit rate for uplink : %u kbps", calc_bitrate(octet)); - - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Guaranteed bit rate for downlink octet 7 */ - octet = tvb_get_guint8(tvb,curr_offset); - proto_tree_add_uint_format(tree, hf_nas_eps_gbr_ul, tvb, curr_offset, 1, octet, - "Guaranteed bit rate for downlink : %u kbps", calc_bitrate(octet)); - - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Maximum bit rate for uplink (extended) octet 8 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Use the value indicated by the maximum bit rate for uplink in octet 4."); - }else{ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Maximum bit rate for uplink(extended) : %u %s", - calc_bitrate_ext(octet), - (octet > 0x4a) ? "Mbps" : "kbps"); - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Maximum bit rate for downlink (extended) octet 9 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Use the value indicated by the maximum bit rate for downlink in octet 5."); - }else{ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Maximum bit rate for downlink(extended) : %u %s", - calc_bitrate_ext(octet), - (octet > 0x4a) ? "Mbps" : "kbps"); - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Guaranteed bit rate for uplink (extended) octet 10 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Use the value indicated by the Guaranteed bit rate for uplink in octet 6."); - }else{ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Guaranteed bit rate for uplink(extended) : %u %s", - calc_bitrate_ext(octet), - (octet > 0x4a) ? "Mbps" : "kbps"); - } - curr_offset++; - if ((curr_offset - offset) >= len) - return(len); - /* Guaranteed bit rate for downlink (extended) octet 11 */ - octet = tvb_get_guint8(tvb,curr_offset); - if(octet==0){ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Use the value indicated by the Guaranteed bit rate for downlink in octet 7."); - }else{ - proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, - "Guaranteed bit rate for downlink(extended) : %u %s", - calc_bitrate_ext(octet), - (octet > 0x4a) ? "Mbps" : "kbps"); - } - curr_offset++; - - return(len); + guint32 curr_offset; + guint8 octet; + + curr_offset = offset; + + /* QCI octet 3 */ + proto_tree_add_item(tree, hf_nas_eps_qci, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Maximum bit rate for uplink octet 4 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_mbr_ul, tvb, curr_offset, 1, octet, + "UE->NW Subscribed maximum bit rate for uplink/ NW->UE Reserved"); + }else{ + proto_tree_add_uint_format(tree, hf_nas_eps_mbr_ul, tvb, curr_offset, 1, octet, + "Maximum bit rate for uplink : %u kbps", calc_bitrate(octet)); + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Maximum bit rate for downlink octet 5 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_mbr_dl, tvb, curr_offset, 1, octet, + "UE->NW Subscribed maximum bit rate for downlink/ NW->UE Reserved"); + }else{ + proto_tree_add_uint_format(tree, hf_nas_eps_mbr_dl, tvb, curr_offset, 1, octet, + "Maximum bit rate for downlink : %u kbps", calc_bitrate(octet)); + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Guaranteed bit rate for uplink octet 6 */ + octet = tvb_get_guint8(tvb,curr_offset); + proto_tree_add_uint_format(tree, hf_nas_eps_gbr_ul, tvb, curr_offset, 1, octet, + "Guaranteed bit rate for uplink : %u kbps", calc_bitrate(octet)); + + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Guaranteed bit rate for downlink octet 7 */ + octet = tvb_get_guint8(tvb,curr_offset); + proto_tree_add_uint_format(tree, hf_nas_eps_gbr_ul, tvb, curr_offset, 1, octet, + "Guaranteed bit rate for downlink : %u kbps", calc_bitrate(octet)); + + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Maximum bit rate for uplink (extended) octet 8 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Use the value indicated by the maximum bit rate for uplink in octet 4."); + }else{ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Maximum bit rate for uplink(extended) : %u %s", + calc_bitrate_ext(octet), + (octet > 0x4a) ? "Mbps" : "kbps"); + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Maximum bit rate for downlink (extended) octet 9 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Use the value indicated by the maximum bit rate for downlink in octet 5."); + }else{ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Maximum bit rate for downlink(extended) : %u %s", + calc_bitrate_ext(octet), + (octet > 0x4a) ? "Mbps" : "kbps"); + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Guaranteed bit rate for uplink (extended) octet 10 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Use the value indicated by the Guaranteed bit rate for uplink in octet 6."); + }else{ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Guaranteed bit rate for uplink(extended) : %u %s", + calc_bitrate_ext(octet), + (octet > 0x4a) ? "Mbps" : "kbps"); + } + curr_offset++; + if ((curr_offset - offset) >= len) + return(len); + /* Guaranteed bit rate for downlink (extended) octet 11 */ + octet = tvb_get_guint8(tvb,curr_offset); + if(octet==0){ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Use the value indicated by the Guaranteed bit rate for downlink in octet 7."); + }else{ + proto_tree_add_uint_format(tree, hf_nas_eps_embr_ul, tvb, curr_offset, 1, octet, + "Guaranteed bit rate for downlink(extended) : %u %s", + calc_bitrate_ext(octet), + (octet > 0x4a) ? "Mbps" : "kbps"); + } + curr_offset++; + + return(len); } /* * 9.9.4.4 ESM cause */ static const value_string nas_eps_esm_cause_vals[] = { - { 0x08, "Operator Determined Barring"}, - { 0x1a, "Insufficient resources"}, - { 0x1b, "Unknown or missing APN"}, - { 0x1c, "Unknown PDN type"}, - { 0x1d, "User authentication failed"}, - { 0x1e, "Request rejected by Serving GW or PDN GW"}, - { 0x1f, "Request rejected, unspecified"}, - { 0x20, "Service option not supported"}, - { 0x21, "Requested service option not subscribed"}, - { 0x22, "Service option temporarily out of order"}, - { 0x23, "PTI already in use"}, - { 0x24, "Regular deactivation"}, - { 0x25, "EPS QoS not accepted"}, - { 0x26, "Network failure"}, - { 0x27, "Reactivation requested"}, - { 0x29, "Semantic error in the TFT operation"}, - { 0x2a, "Syntactical error in the TFT operation"}, - { 0x2b, "Invalid EPS bearer identity"}, - { 0x2c, "Semantic errors in packet filter(s)"}, - { 0x2d, "Syntactical errors in packet filter(s)"}, - { 0x2e, "EPS bearer context without TFT already activated"}, - { 0x2f, "PTI mismatch"}, - { 0x31, "Last PDN disconnection not allowed"}, - { 0x32, "PDN type IPv4 only allowed"}, - { 0x33, "PDN type IPv6 only allowed"}, - { 0x34, "Single address bearers only allowed"}, - { 0x35, "ESM information not received"}, - { 0x36, "PDN connection does not exist"}, - { 0x37, "Multiple PDN connections for a given APN not allowed"}, - { 0x38, "Collision with network initiated request"}, - { 0x3b, "Unsupported QCI value"}, - { 0x51, "Invalid PTI value"}, - { 0x5f, "Semantically incorrect message"}, - { 0x60, "Invalid mandatory information"}, - { 0x61, "Message type non-existent or not implemented"}, - { 0x62, "Message type not compatible with the protocol state"}, - { 0x63, "Information element non-existent or not implemented"}, - { 0x64, "Conditional IE error"}, - { 0x65, "Message not compatible with the protocol state"}, - { 0x6f, "Protocol error, unspecified"}, - { 0x70, "APN restriction value incompatible with active EPS bearer context"}, - { 0, NULL } + { 0x08, "Operator Determined Barring"}, + { 0x1a, "Insufficient resources"}, + { 0x1b, "Unknown or missing APN"}, + { 0x1c, "Unknown PDN type"}, + { 0x1d, "User authentication failed"}, + { 0x1e, "Request rejected by Serving GW or PDN GW"}, + { 0x1f, "Request rejected, unspecified"}, + { 0x20, "Service option not supported"}, + { 0x21, "Requested service option not subscribed"}, + { 0x22, "Service option temporarily out of order"}, + { 0x23, "PTI already in use"}, + { 0x24, "Regular deactivation"}, + { 0x25, "EPS QoS not accepted"}, + { 0x26, "Network failure"}, + { 0x27, "Reactivation requested"}, + { 0x29, "Semantic error in the TFT operation"}, + { 0x2a, "Syntactical error in the TFT operation"}, + { 0x2b, "Invalid EPS bearer identity"}, + { 0x2c, "Semantic errors in packet filter(s)"}, + { 0x2d, "Syntactical errors in packet filter(s)"}, + { 0x2e, "EPS bearer context without TFT already activated"}, + { 0x2f, "PTI mismatch"}, + { 0x31, "Last PDN disconnection not allowed"}, + { 0x32, "PDN type IPv4 only allowed"}, + { 0x33, "PDN type IPv6 only allowed"}, + { 0x34, "Single address bearers only allowed"}, + { 0x35, "ESM information not received"}, + { 0x36, "PDN connection does not exist"}, + { 0x37, "Multiple PDN connections for a given APN not allowed"}, + { 0x38, "Collision with network initiated request"}, + { 0x3b, "Unsupported QCI value"}, + { 0x51, "Invalid PTI value"}, + { 0x5f, "Semantically incorrect message"}, + { 0x60, "Invalid mandatory information"}, + { 0x61, "Message type non-existent or not implemented"}, + { 0x62, "Message type not compatible with the protocol state"}, + { 0x63, "Information element non-existent or not implemented"}, + { 0x64, "Conditional IE error"}, + { 0x65, "Message not compatible with the protocol state"}, + { 0x6f, "Protocol error, unspecified"}, + { 0x70, "APN restriction value incompatible with active EPS bearer context"}, + { 0, NULL } }; static guint16 de_esm_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_esm_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_nas_eps_esm_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* * 9.9.4.5 ESM information transfer flag */ /* EIT (ESM information transfer) */ static const true_false_string nas_eps_emm_eit_vals = { - "Security protected ESM information transfer required", - "Security protected ESM information transfer not required" + "Security protected ESM information transfer required", + "Security protected ESM information transfer not required" }; static guint16 de_esm_inf_trf_flg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3)+4, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_nas_eps_esm_eit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - return(curr_offset-offset); + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, (curr_offset<<3)+4, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_esm_eit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + return(curr_offset-offset); } /* * 9.9.4.6 Linked EPS bearer identity @@ -2280,23 +2280,23 @@ de_esm_inf_trf_flg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin */ static const value_string nas_eps_esm_linked_bearer_id_vals[] = { - { 0x0, "Reserved"}, - { 0x1, "Reserved"}, - { 0x2, "Reserved"}, - { 0x3, "Reserved"}, - { 0x4, "Reserved"}, - { 0x5, "EPS bearer identity value 5"}, - { 0x6, "EPS bearer identity value 6"}, - { 0x7, "EPS bearer identity value 7"}, - { 0x8, "EPS bearer identity value 8"}, - { 0x9, "EPS bearer identity value 9"}, - { 0xa, "EPS bearer identity value 10"}, - { 0xb, "EPS bearer identity value 11"}, - { 0xc, "EPS bearer identity value 12"}, - { 0xd, "EPS bearer identity value 13"}, - { 0xe, "EPS bearer identity value 14"}, - { 0xf, "EPS bearer identity value 15"}, - { 0, NULL } + { 0x0, "Reserved"}, + { 0x1, "Reserved"}, + { 0x2, "Reserved"}, + { 0x3, "Reserved"}, + { 0x4, "Reserved"}, + { 0x5, "EPS bearer identity value 5"}, + { 0x6, "EPS bearer identity value 6"}, + { 0x7, "EPS bearer identity value 7"}, + { 0x8, "EPS bearer identity value 8"}, + { 0x9, "EPS bearer identity value 9"}, + { 0xa, "EPS bearer identity value 10"}, + { 0xb, "EPS bearer identity value 11"}, + { 0xc, "EPS bearer identity value 12"}, + { 0xd, "EPS bearer identity value 13"}, + { 0xe, "EPS bearer identity value 14"}, + { 0xf, "EPS bearer identity value 15"}, + { 0, NULL } }; @@ -2304,13 +2304,13 @@ static const value_string nas_eps_esm_linked_bearer_id_vals[] = { static guint16 de_esm_lnkd_eps_bearer_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_esm_lnkd_eps_bearer_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_esm_lnkd_eps_bearer_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - return(len); + return(len); } /* @@ -2322,21 +2322,21 @@ de_esm_lnkd_eps_bearer_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U * 9.9.4.7a Notification indicator */ static const value_string nas_eps_esm_notif_ind_vals[] = { - { 0x0, "Reserved"}, - { 0x1, "SRVCC handover cancelled, IMS session re-establishment required"}, - { 0, NULL } + { 0x0, "Reserved"}, + { 0x1, "SRVCC handover cancelled, IMS session re-establishment required"}, + { 0, NULL } }; static guint16 de_esm_notif_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_nas_eps_esm_notif_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_esm_notif_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - return(len); + return(len); } /* @@ -2349,50 +2349,50 @@ de_esm_notif_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3 static guint16 de_esm_pdn_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 pdn_type; - - curr_offset = offset; - - - pdn_type = tvb_get_guint8(tvb, offset) & 0x7; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, curr_offset<<3, 5, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_nas_eps_esm_pdn_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - - switch(pdn_type){ - case 1: - /* IPv4 */ - proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset+=4; - break; - case 2: - /* IPv6 3GPP TS 24.301 version 9.4.0 Release 9 - * If PDN type value indicates IPv6, the PDN address information in octet 4 to octet 11 - * contains an IPv6 interface identifier. Bit 8 of octet 4 represents the most significant bit - * of the IPv6 interface identifier and bit 1 of octet 11 the least significant bit. - */ - proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv6_if_id, tvb, curr_offset, 8, ENC_BIG_ENDIAN); - offset+=8; - break; - case 3: - /* IPv4/IPv6 3GPP TS 24.301 version 9.4.0 Release 9 - * If PDN type value indicates IPv4v6, the PDN address information in octet 4 to octet 15 - * contains an IPv6 interface identifier and an IPv4 address. Bit 8 of octet 4 represents - * the most significant bit of the IPv6 interface identifier and bit 1 of octet 11 the least - * significant bit. Bit 8 of octet 12 represents the most significant bit of the IPv4 address - * and bit 1 of octet 15 the least significant bit. - */ - proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv6_if_id, tvb, curr_offset, 8, ENC_BIG_ENDIAN); - curr_offset+=8; - proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset+=4; - break; - default: - break; - } - - return(curr_offset-offset); + guint32 curr_offset; + guint8 pdn_type; + + curr_offset = offset; + + + pdn_type = tvb_get_guint8(tvb, offset) & 0x7; + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, curr_offset<<3, 5, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_nas_eps_esm_pdn_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + + switch(pdn_type){ + case 1: + /* IPv4 */ + proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset+=4; + break; + case 2: + /* IPv6 3GPP TS 24.301 version 9.4.0 Release 9 + * If PDN type value indicates IPv6, the PDN address information in octet 4 to octet 11 + * contains an IPv6 interface identifier. Bit 8 of octet 4 represents the most significant bit + * of the IPv6 interface identifier and bit 1 of octet 11 the least significant bit. + */ + proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv6_if_id, tvb, curr_offset, 8, ENC_BIG_ENDIAN); + offset+=8; + break; + case 3: + /* IPv4/IPv6 3GPP TS 24.301 version 9.4.0 Release 9 + * If PDN type value indicates IPv4v6, the PDN address information in octet 4 to octet 15 + * contains an IPv6 interface identifier and an IPv4 address. Bit 8 of octet 4 represents + * the most significant bit of the IPv6 interface identifier and bit 1 of octet 11 the least + * significant bit. Bit 8 of octet 12 represents the most significant bit of the IPv4 address + * and bit 1 of octet 15 the least significant bit. + */ + proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv6_if_id, tvb, curr_offset, 8, ENC_BIG_ENDIAN); + curr_offset+=8; + proto_tree_add_item(tree, hf_nas_eps_esm_pdn_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset+=4; + break; + default: + break; + } + + return(curr_offset-offset); } /* @@ -2400,11 +2400,11 @@ de_esm_pdn_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 * Coded inline 1/2 octet */ static const value_string nas_eps_esm_pdn_type_values[] = { - { 0x1, "IPv4" }, - { 0x2, "IPv6" }, - { 0x3, "IPv4v6" }, - { 0x4, "Unused; shall be interpreted as IPv6 if received by the network" }, - { 0, NULL } + { 0x1, "IPv4" }, + { 0x2, "IPv6" }, + { 0x3, "IPv4v6" }, + { 0x4, "Unused; shall be interpreted as IPv6 if received by the network" }, + { 0, NULL } }; /* @@ -2442,840 +2442,840 @@ static const value_string nas_eps_esm_pdn_type_values[] = { */ guint16 (*emm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = { - /* 9.9.3 EPS Mobility Management (EMM) information elements */ - de_emm_add_upd_res, /* 9.9.3.0A Additional update result */ - de_emm_add_upd_type, /* 9.9.3.0B Additional update type */ - NULL, /* 9.9.3.1 Authentication failure parameter(dissected in packet-gsm_a_dtap.c) */ - NULL, /* 9.9.3.2 Authentication parameter AUTN(packet-gsm_a_dtap.c) */ - NULL, /* 9.9.3.3 Authentication parameter RAND */ - de_emm_auth_resp_par, /* 9.9.3.4 Authentication response parameter */ - de_emm_csfb_resp, /* 9.9.3.5 CSFB response */ - NULL, /* 9.9.3.6 Daylight saving time (packet-gsm_a_dtap.c)*/ - NULL, /* 9.9.3.7 Detach type */ - NULL, /* 9.9.3.8 DRX parameter */ - de_emm_cause, /* 9.9.3.9 EMM cause */ - NULL, /* 9.9.3.10 EPS attach result (coded inline) */ - NULL, /* 9.9.3.11 EPS attach type(Coded Inline) */ - de_emm_eps_mid, /* 9.9.3.12 EPS mobile identity */ - de_emm_eps_net_feature_sup, /* 9.9.3.12A EPS network feature support */ - NULL, /* 9.9.3.13 EPS update result (Coded Inline)*/ - NULL, /* 9.9.3.14 EPS update type (Inline)*/ - de_emm_esm_msg_cont, /* 9.9.3.15 ESM message conta */ - NULL, /* 9.9.3.16 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/ - NULL, /* 9.9.3.17 Identity type 2 ,See subclause 10.5.5.9 in 3GPP TS 24.008 [6]. */ - de_emm_nas_imeisv_req, /* 9.9.3.18 IMEISV request ,See subclause 10.5.5.10 in 3GPP TS 24.008 [6]. */ - de_emm_nas_ksi_and_seq_no, /* 9.9.3.19 KSI and sequence number */ - NULL, /* 9.9.3.20 MS network capability ,See subclause 10.5.5.12 in 3GPP TS 24.008 [6].(packet-gsm_a_gm.c) */ - de_emm_nas_key_set_id, /* 9.9.3.21 NAS key set identifier (Coded Inline) */ - de_emm_nas_msg_cont, /* 9.9.3.22 NAS message container */ - de_emm_nas_sec_alsgs, /* 9.9.3.23 NAS security algorithms */ - NULL, /* 9.9.3.24 Network name, See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/ - de_emm_nonce, /* 9.9.3.25 Nonce */ - de_emm_paging_id, /* 9.9.3.25A Paging identity */ - NULL, /* 9.9.3.26 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/ - NULL, /* 9.9.3.27 Service type */ - de_emm_nas_short_mac, /* 9.9.3.28 Short MAC */ - NULL, /* 9.9.3.29 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/ - NULL, /* 9.9.3.30 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/ - NULL, /* 9.9.3.31 TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/ - 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_sec_cap, /* 9.9.3.36 UE security capability */ - NULL, /* 9.9.3.37 Emergency Number List (packet-gsm_A_dtap.c) */ - NULL, /* 9.9.3.38 CLI */ - de_emm_ss_code, /* 9.9.3.39 SS Code */ - de_emm_lcs_ind, /* 9.9.3.40 LCS indicator */ - de_emm_lcs_client_id, /* 9.9.3.41 LCS client identity */ - de_emm_gen_msg_cont_type, /* 9.9.3.42 Generic message container type */ - de_emm_gen_msg_cont, /* 9.9.3.43 Generic message container */ - NULL, /* 9.9.3.44 Voice domain preference and UE's usage setting */ - NULL, /* NONE */ + /* 9.9.3 EPS Mobility Management (EMM) information elements */ + de_emm_add_upd_res, /* 9.9.3.0A Additional update result */ + de_emm_add_upd_type, /* 9.9.3.0B Additional update type */ + NULL, /* 9.9.3.1 Authentication failure parameter(dissected in packet-gsm_a_dtap.c) */ + NULL, /* 9.9.3.2 Authentication parameter AUTN(packet-gsm_a_dtap.c) */ + NULL, /* 9.9.3.3 Authentication parameter RAND */ + de_emm_auth_resp_par, /* 9.9.3.4 Authentication response parameter */ + de_emm_csfb_resp, /* 9.9.3.5 CSFB response */ + NULL, /* 9.9.3.6 Daylight saving time (packet-gsm_a_dtap.c)*/ + NULL, /* 9.9.3.7 Detach type */ + NULL, /* 9.9.3.8 DRX parameter */ + de_emm_cause, /* 9.9.3.9 EMM cause */ + NULL, /* 9.9.3.10 EPS attach result (coded inline) */ + NULL, /* 9.9.3.11 EPS attach type(Coded Inline) */ + de_emm_eps_mid, /* 9.9.3.12 EPS mobile identity */ + de_emm_eps_net_feature_sup, /* 9.9.3.12A EPS network feature support */ + NULL, /* 9.9.3.13 EPS update result (Coded Inline)*/ + NULL, /* 9.9.3.14 EPS update type (Inline)*/ + de_emm_esm_msg_cont, /* 9.9.3.15 ESM message conta */ + NULL, /* 9.9.3.16 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/ + NULL, /* 9.9.3.17 Identity type 2 ,See subclause 10.5.5.9 in 3GPP TS 24.008 [6]. */ + de_emm_nas_imeisv_req, /* 9.9.3.18 IMEISV request ,See subclause 10.5.5.10 in 3GPP TS 24.008 [6]. */ + de_emm_nas_ksi_and_seq_no, /* 9.9.3.19 KSI and sequence number */ + NULL, /* 9.9.3.20 MS network capability ,See subclause 10.5.5.12 in 3GPP TS 24.008 [6].(packet-gsm_a_gm.c) */ + de_emm_nas_key_set_id, /* 9.9.3.21 NAS key set identifier (Coded Inline) */ + de_emm_nas_msg_cont, /* 9.9.3.22 NAS message container */ + de_emm_nas_sec_alsgs, /* 9.9.3.23 NAS security algorithms */ + NULL, /* 9.9.3.24 Network name, See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/ + de_emm_nonce, /* 9.9.3.25 Nonce */ + de_emm_paging_id, /* 9.9.3.25A Paging identity */ + NULL, /* 9.9.3.26 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/ + NULL, /* 9.9.3.27 Service type */ + de_emm_nas_short_mac, /* 9.9.3.28 Short MAC */ + NULL, /* 9.9.3.29 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/ + NULL, /* 9.9.3.30 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/ + NULL, /* 9.9.3.31 TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/ + 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_sec_cap, /* 9.9.3.36 UE security capability */ + NULL, /* 9.9.3.37 Emergency Number List (packet-gsm_A_dtap.c) */ + NULL, /* 9.9.3.38 CLI */ + de_emm_ss_code, /* 9.9.3.39 SS Code */ + de_emm_lcs_ind, /* 9.9.3.40 LCS indicator */ + de_emm_lcs_client_id, /* 9.9.3.41 LCS client identity */ + de_emm_gen_msg_cont_type, /* 9.9.3.42 Generic message container type */ + de_emm_gen_msg_cont, /* 9.9.3.43 Generic message container */ + NULL, /* 9.9.3.44 Voice domain preference and UE's usage setting */ + NULL, /* NONE */ }; /* 9.9.4 EPS Session Management (ESM) information elements */ const value_string nas_esm_elem_strings[] = { - { 0x00, "Access point name" }, /* 9.9.4.1 Access point name */ - { 0x00, "APN aggregate maximum bit rate" }, /* 9.9.4.2 APN aggregate maximum bit rate */ - { 0x00, "EPS quality of service" }, /* 9.9.4.3 EPS quality of service */ - { 0x00, "ESM cause" }, /* 9.9.4.4 ESM cause */ - { 0x00, "ESM information transfer flag" }, /* 9.9.4.5 ESM information transfer flag */ - { 0x00, "Linked EPS bearer identity" }, /* 9.9.4.6 Linked EPS bearer identity */ - { 0x00, "LLC service access point identifier" }, /* 9.9.4.7 LLC service access point identifier */ - { 0x00, "Notification indicator" }, /* 9.9.4.7a Notification indicator */ - { 0x00, "Packet flow identifier" }, /* 9.9.4.8 Packet flow identifier */ - { 0x00, "PDN address" }, /* 9.9.4.9 PDN address */ - { 0x00, "PDN type" }, /* 9.9.4.10 PDN type */ - { 0x00, "Protocol configuration options" }, /* 9.9.4.11 Protocol configuration options */ - { 0x00, "Quality of service" }, /* 9.9.4.12 Quality of service */ - { 0x00, "Radio priority" }, /* 9.9.4.13 Radio priority */ - { 0x00, "Request type" }, /* 9.9.4.14 Request type */ - { 0x00, "Traffic flow aggregate description" }, /* 9.9.4.15 Traffic flow aggregate description */ - { 0x00, "Traffic flow templat" }, /* 9.9.4.16 Traffic flow template */ - { 0x00, "Transaction identifier" }, /* 9.9.4.17 Transaction identifier */ - { 0, NULL } + { 0x00, "Access point name" }, /* 9.9.4.1 Access point name */ + { 0x00, "APN aggregate maximum bit rate" }, /* 9.9.4.2 APN aggregate maximum bit rate */ + { 0x00, "EPS quality of service" }, /* 9.9.4.3 EPS quality of service */ + { 0x00, "ESM cause" }, /* 9.9.4.4 ESM cause */ + { 0x00, "ESM information transfer flag" }, /* 9.9.4.5 ESM information transfer flag */ + { 0x00, "Linked EPS bearer identity" }, /* 9.9.4.6 Linked EPS bearer identity */ + { 0x00, "LLC service access point identifier" }, /* 9.9.4.7 LLC service access point identifier */ + { 0x00, "Notification indicator" }, /* 9.9.4.7a Notification indicator */ + { 0x00, "Packet flow identifier" }, /* 9.9.4.8 Packet flow identifier */ + { 0x00, "PDN address" }, /* 9.9.4.9 PDN address */ + { 0x00, "PDN type" }, /* 9.9.4.10 PDN type */ + { 0x00, "Protocol configuration options" }, /* 9.9.4.11 Protocol configuration options */ + { 0x00, "Quality of service" }, /* 9.9.4.12 Quality of service */ + { 0x00, "Radio priority" }, /* 9.9.4.13 Radio priority */ + { 0x00, "Request type" }, /* 9.9.4.14 Request type */ + { 0x00, "Traffic flow aggregate description" }, /* 9.9.4.15 Traffic flow aggregate description */ + { 0x00, "Traffic flow templat" }, /* 9.9.4.16 Traffic flow template */ + { 0x00, "Transaction identifier" }, /* 9.9.4.17 Transaction identifier */ + { 0, NULL } }; -#define NUM_NAS_ESM_ELEM (sizeof(nas_esm_elem_strings)/sizeof(value_string)) +#define NUM_NAS_ESM_ELEM (sizeof(nas_esm_elem_strings)/sizeof(value_string)) gint ett_nas_eps_esm_elem[NUM_NAS_ESM_ELEM]; typedef enum { - DE_ESM_APN, /* 9.9.4.1 Access point name */ - DE_ESM_APN_AGR_MAX_BR, /* 9.9.4.2 APN aggregate maximum bit rate */ - DE_ESM_EPS_QOS, /* 9.9.4.3 EPS quality of service */ - DE_ESM_CAUSE, /* 9.9.4.4 ESM cause */ - DE_ESM_INF_TRF_FLG, /* 9.9.4.5 ESM information transfer flag */ - DE_ESM_LNKED_EPS_B_ID, /* 9.9.4.6 Linked EPS bearer identity */ - DE_ESM_LLC_SAPI, /* 9.9.4.7 LLC service access point identifier */ - DE_ESM_NOTIF_IND, /* 9.9.4.7a Notification indicator */ - DE_ESM_P_FLW_ID, /* 9.9.4.8 Packet flow identifier */ - DE_ESM_PDN_ADDR, /* 9.9.4.9 PDN address */ - DE_ESM_PDN_TYPE, /* 9.9.4.10 PDN type */ - DE_ESM_PROT_CONF_OPT, /* 9.9.4.11 Protocol configuration options */ - DE_ESM_QOS, /* 9.9.4.12 Quality of service */ - DE_ESM_RA_PRI, /* 9.9.4.13 Radio priority */ - DE_ESM_REQ_TYPE, /* 9.9.4.14 Request type */ - DE_ESM_TRAF_FLOW_AGR_DESC, /* 9.9.4.15 Traffic flow aggregate description */ - DE_ESM_TRAF_FLOW_TEMPL, /* 9.9.4.16 Traffic flow template */ - DE_ESM_TID, /* 9.9.4.17 Transaction identifier */ - DE_ESM_NONE /* NONE */ + DE_ESM_APN, /* 9.9.4.1 Access point name */ + DE_ESM_APN_AGR_MAX_BR, /* 9.9.4.2 APN aggregate maximum bit rate */ + DE_ESM_EPS_QOS, /* 9.9.4.3 EPS quality of service */ + DE_ESM_CAUSE, /* 9.9.4.4 ESM cause */ + DE_ESM_INF_TRF_FLG, /* 9.9.4.5 ESM information transfer flag */ + DE_ESM_LNKED_EPS_B_ID, /* 9.9.4.6 Linked EPS bearer identity */ + DE_ESM_LLC_SAPI, /* 9.9.4.7 LLC service access point identifier */ + DE_ESM_NOTIF_IND, /* 9.9.4.7a Notification indicator */ + DE_ESM_P_FLW_ID, /* 9.9.4.8 Packet flow identifier */ + DE_ESM_PDN_ADDR, /* 9.9.4.9 PDN address */ + DE_ESM_PDN_TYPE, /* 9.9.4.10 PDN type */ + DE_ESM_PROT_CONF_OPT, /* 9.9.4.11 Protocol configuration options */ + DE_ESM_QOS, /* 9.9.4.12 Quality of service */ + DE_ESM_RA_PRI, /* 9.9.4.13 Radio priority */ + DE_ESM_REQ_TYPE, /* 9.9.4.14 Request type */ + DE_ESM_TRAF_FLOW_AGR_DESC, /* 9.9.4.15 Traffic flow aggregate description */ + DE_ESM_TRAF_FLOW_TEMPL, /* 9.9.4.16 Traffic flow template */ + DE_ESM_TID, /* 9.9.4.17 Transaction identifier */ + DE_ESM_NONE /* NONE */ } nas_esm_elem_idx_t; guint16 (*esm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = { - NULL, /* 9.9.4.1 Access point name */ - de_esm_apn_aggr_max_br, /* 9.9.4.2 APN aggregate maximum bit rate */ - de_esm_qos, /* 9.9.4.3 EPS quality of service */ - de_esm_cause, /* 9.9.4.4 ESM cause */ - de_esm_inf_trf_flg, /* 9.9.4.5 ESM information transfer flag */ - de_esm_lnkd_eps_bearer_id, /* 9.9.4.6 Linked EPS bearer identity */ - NULL, /* 9.9.4.7 LLC service access point identifier */ - de_esm_notif_ind, /* 9.9.4.7a Notification indicator */ - NULL, /* 9.9.4.8 Packet flow identifier */ - de_esm_pdn_addr, /* 9.9.4.9 PDN address */ - NULL, /* 9.9.4.10 PDN type */ - NULL, /* 9.9.4.11 Protocol configuration options */ - NULL, /* 9.9.4.12 Quality of service */ - NULL, /* 9.9.4.13 Radio priority */ - NULL, /* 9.9.4.14 Request type */ - NULL, /* 9.9.4.15 Traffic flow aggregate description */ - NULL, /* 9.9.4.16 Traffic flow template */ - NULL, /* 9.9.4.17 Transaction identifier */ - NULL, /* NONE */ + NULL, /* 9.9.4.1 Access point name */ + de_esm_apn_aggr_max_br, /* 9.9.4.2 APN aggregate maximum bit rate */ + de_esm_qos, /* 9.9.4.3 EPS quality of service */ + de_esm_cause, /* 9.9.4.4 ESM cause */ + de_esm_inf_trf_flg, /* 9.9.4.5 ESM information transfer flag */ + de_esm_lnkd_eps_bearer_id, /* 9.9.4.6 Linked EPS bearer identity */ + NULL, /* 9.9.4.7 LLC service access point identifier */ + de_esm_notif_ind, /* 9.9.4.7a Notification indicator */ + NULL, /* 9.9.4.8 Packet flow identifier */ + de_esm_pdn_addr, /* 9.9.4.9 PDN address */ + NULL, /* 9.9.4.10 PDN type */ + NULL, /* 9.9.4.11 Protocol configuration options */ + NULL, /* 9.9.4.12 Quality of service */ + NULL, /* 9.9.4.13 Radio priority */ + NULL, /* 9.9.4.14 Request type */ + NULL, /* 9.9.4.15 Traffic flow aggregate description */ + NULL, /* 9.9.4.16 Traffic flow template */ + NULL, /* 9.9.4.17 Transaction identifier */ + NULL, /* NONE */ }; /* MESSAGE FUNCTIONS */ /* - * 8.2.1 Attach accept + * 8.2.1 Attach accept */ static void nas_emm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ - bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* EPS attach result EPS attach result 9.9.3.10 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_EPS_attach_result, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset+=3; - /* Fix up the lengths */ - curr_len--; - curr_offset++; - /* T3412 value GPRS timer 9.9.3.16 M V 1 */ - ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3412 value"); - /* Tracking area identity list 9.9.3.33 M LV 7-97 */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID_LST, " - TAI list"); - /* ESM message container 9.9.3.15 M LV-E 2-n */ - ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); - /* 50 GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ - ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI"); - /* 13 Location area identification Location area identification 9.9.2.2 O TV 6 */ - ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, NULL); - /* 23 MS identity Mobile identity 9.9.2.3 O TLV 7-10 */ - ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - MS identity"); - /* 53 EMM cause EMM cause 9.9.3.9 O TV 2 */ - ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - /* 17 T3402 value GPRS timer 9.9.3.16 O TV 2 */ - ELEM_OPT_TV(0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3402 value"); - /* 59 T3423 value GPRS timer 9.9.3.16 O TV 2 */ - ELEM_OPT_TV(0x59, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3423 value"); - /* 4A Equivalent PLMNs PLMN list 9.9.2.8 O TLV 5-47 */ - ELEM_OPT_TLV(0x4a, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_PLM_LST, " - Equivalent PLMNs"); - /* 34 Emergency Number List 9.9.3.37 O TLV 5-50 */ - ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL); - /* 64 EPS network feature support EPS network feature support 9.9.3.12A O TLV 3 */ - ELEM_OPT_TLV(0x64, NAS_PDU_TYPE_EMM, DE_EMM_EPS_NET_FEATURE_SUP, NULL); - /* F- Additional update result Additional update result 9.9.3.0A O TV 1 */ - ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_RES, NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ + bit_offset = curr_offset<<3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* EPS attach result EPS attach result 9.9.3.10 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_EPS_attach_result, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset+=3; + /* Fix up the lengths */ + curr_len--; + curr_offset++; + /* T3412 value GPRS timer 9.9.3.16 M V 1 */ + ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3412 value"); + /* Tracking area identity list 9.9.3.33 M LV 7-97 */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID_LST, " - TAI list"); + /* ESM message container 9.9.3.15 M LV-E 2-n */ + ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); + /* 50 GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ + ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI"); + /* 13 Location area identification Location area identification 9.9.2.2 O TV 6 */ + ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, NULL); + /* 23 MS identity Mobile identity 9.9.2.3 O TLV 7-10 */ + ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - MS identity"); + /* 53 EMM cause EMM cause 9.9.3.9 O TV 2 */ + ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* 17 T3402 value GPRS timer 9.9.3.16 O TV 2 */ + ELEM_OPT_TV(0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3402 value"); + /* 59 T3423 value GPRS timer 9.9.3.16 O TV 2 */ + ELEM_OPT_TV(0x59, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3423 value"); + /* 4A Equivalent PLMNs PLMN list 9.9.2.8 O TLV 5-47 */ + ELEM_OPT_TLV(0x4a, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_PLM_LST, " - Equivalent PLMNs"); + /* 34 Emergency Number List 9.9.3.37 O TLV 5-50 */ + ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL); + /* 64 EPS network feature support EPS network feature support 9.9.3.12A O TLV 3 */ + ELEM_OPT_TLV(0x64, NAS_PDU_TYPE_EMM, DE_EMM_EPS_NET_FEATURE_SUP, NULL); + /* F- Additional update result Additional update result 9.9.3.0A O TV 1 */ + ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_RES, NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.2 Attach complete + * 8.2.2 Attach complete */ static void nas_emm_attach_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* ESM message container ESM message container 9.9.3.15 M LV-E 2-n */ - ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); + /* ESM message container ESM message container 9.9.3.15 M LV-E 2-n */ + ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.3 Attach reject + * 8.2.3 Attach reject */ static void nas_emm_attach_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* * EMM cause EMM cause 9.9.3.9 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - /* 78 ESM message container ESM message container 9.9.3.15 O TLV-E 4-n */ - ELEM_OPT_TLV_E(0x78, NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); + /* * EMM cause EMM cause 9.9.3.9 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* 78 ESM message container ESM message container 9.9.3.15 O TLV-E 4-n */ + ELEM_OPT_TLV_E(0x78, NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.4 Attach request + * 8.2.4 Attach request */ static void nas_emm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - bit_offset = curr_offset<<3; - - /* NAS key set identifier NAS key set identifier 9.9.3.21 M V 1/2 */ - de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, NULL); - bit_offset+=4; - - /* EPS attach type EPS attach type 9.9.3.11 M V 1/2 - * Inline: - */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_eps_att_type, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset+=3; - - /* Fix the lengths */ - curr_len--; - curr_offset++; - /* Old GUTI or IMSI EPS mobile identity 9.9.3.12 M LV 5-12 */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Old GUTI or IMSI"); - /* UE network capability UE network capability 9.9.3.34 M LV 3-14 */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL); - /* ESM message container ESM message container 9.9.3.15 M LV-E 2-n */ - ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); - /* 19 Old P-TMSI signature P-TMSI signature 10.5.5.8 O TV 4 */ - ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - Old P-TMSI Signature"); - /* 50 Additional GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ - ELEM_OPT_TLV( 0x50 , NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Additional GUTI"); - /* 52 Last visited registered TAI Tracking area identity 9.9.3.32 O TV 6 */ - ELEM_OPT_TV(0x52, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, " - Last visited registered TAI"); - /* 5c DRX parameter DRX parameter 9.9.3.8 O TV 3 */ - ELEM_OPT_TV(0x5c, GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL ); - /* 31 MS network capability MS network capability 9.9.3.20 M LV 3-9 */ - ELEM_OPT_TLV( 0x31, GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP , NULL ); - /* 13 Old location area identification Location area identification 9.9.2.2 O TV 6 */ - ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, " - Old location area identification"); - /* 9- TMSI status TMSI status 9.9.3.31 O TV 1 */ - ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM, DE_TMSI_STAT , NULL ); - /* 11 Mobile station classmark 2 Mobile station classmark 2 9.9.2.5 O TLV 5 */ - ELEM_OPT_TLV( 0x11, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_2 , NULL ); - /* 20 Mobile station classmark 3 Mobile station classmark 3 9.9.2.5 O TLV 2-34 */ - ELEM_OPT_TLV( 0x20, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_3 , NULL ); - /* 40 Supported Codecs Supported Codec List 9.9.2.10 O TLV 5-n */ - ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, " - Supported Codecs"); - /* F- Additional update type Additional update type 9.9.3.0B O TV 1 */ - ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_TYPE, NULL ); - /* 5D Voice domain preference and UE's usage setting Voice domain preference and UE's usage setting 9.9.3.44 O TLV 3 */ - ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + bit_offset = curr_offset<<3; + + /* NAS key set identifier NAS key set identifier 9.9.3.21 M V 1/2 */ + de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, NULL); + bit_offset+=4; + + /* EPS attach type EPS attach type 9.9.3.11 M V 1/2 + * Inline: + */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_eps_att_type, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset+=3; + + /* Fix the lengths */ + curr_len--; + curr_offset++; + /* Old GUTI or IMSI EPS mobile identity 9.9.3.12 M LV 5-12 */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Old GUTI or IMSI"); + /* UE network capability UE network capability 9.9.3.34 M LV 3-14 */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL); + /* ESM message container ESM message container 9.9.3.15 M LV-E 2-n */ + ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, NULL); + /* 19 Old P-TMSI signature P-TMSI signature 10.5.5.8 O TV 4 */ + ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - Old P-TMSI Signature"); + /* 50 Additional GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ + ELEM_OPT_TLV( 0x50 , NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Additional GUTI"); + /* 52 Last visited registered TAI Tracking area identity 9.9.3.32 O TV 6 */ + ELEM_OPT_TV(0x52, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, " - Last visited registered TAI"); + /* 5c DRX parameter DRX parameter 9.9.3.8 O TV 3 */ + ELEM_OPT_TV(0x5c, GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL ); + /* 31 MS network capability MS network capability 9.9.3.20 M LV 3-9 */ + ELEM_OPT_TLV( 0x31, GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP , NULL ); + /* 13 Old location area identification Location area identification 9.9.2.2 O TV 6 */ + ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, " - Old location area identification"); + /* 9- TMSI status TMSI status 9.9.3.31 O TV 1 */ + ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM, DE_TMSI_STAT , NULL ); + /* 11 Mobile station classmark 2 Mobile station classmark 2 9.9.2.5 O TLV 5 */ + ELEM_OPT_TLV( 0x11, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_2 , NULL ); + /* 20 Mobile station classmark 3 Mobile station classmark 3 9.9.2.5 O TLV 2-34 */ + ELEM_OPT_TLV( 0x20, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_3 , NULL ); + /* 40 Supported Codecs Supported Codec List 9.9.2.10 O TLV 5-n */ + ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, " - Supported Codecs"); + /* F- Additional update type Additional update type 9.9.3.0B O TV 1 */ + ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_TYPE, NULL ); + /* 5D Voice domain preference and UE's usage setting Voice domain preference and UE's usage setting 9.9.3.44 O TLV 3 */ + ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.5 Authentication failure + * 8.2.5 Authentication failure */ static void nas_emm_attach_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* EMM cause EMM cause 9.9.3.9 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - /* 30 Authentication failure parameter Authentication failure parameter 9.9.3.1 O TLV 1 */ - ELEM_OPT_TLV(0x30, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, NULL); + /* EMM cause EMM cause 9.9.3.9 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* 30 Authentication failure parameter Authentication failure parameter 9.9.3.1 O TLV 1 */ + ELEM_OPT_TLV(0x30, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.6 Authentication reject + * 8.2.6 Authentication reject * No IE:s */ /* - * 8.2.7 Authentication request + * 8.2.7 Authentication request */ static void nas_emm_auth_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - bit_offset = curr_offset<<3; - /* H1 */ - /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* H0 */ - /* - * NAS key set identifierASME NAS key set identifier 9.9.3.21 M V 1/2 - */ - de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, " ASME"); - bit_offset+=4; - - /* Fix the lengths */ - curr_len--; - curr_offset++; - - /* - * Authentication parameter RAND (EPS challenge) 9.9.3.3 M V 16 - */ - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_RAND, " - EPS challenge"); - /* - * Authentication parameter AUTN (EPS challenge) 9.9.3.2 M LV 17 - */ - ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN, " - EPS challenge"); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + bit_offset = curr_offset<<3; + /* H1 */ + /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* H0 */ + /* + * NAS key set identifierASME NAS key set identifier 9.9.3.21 M V 1/2 + */ + de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, " ASME"); + bit_offset+=4; + + /* Fix the lengths */ + curr_len--; + curr_offset++; + + /* + * Authentication parameter RAND (EPS challenge) 9.9.3.3 M V 16 + */ + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_RAND, " - EPS challenge"); + /* + * Authentication parameter AUTN (EPS challenge) 9.9.3.2 M LV 17 + */ + ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN, " - EPS challenge"); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.8 Authentication response + * 8.2.8 Authentication response */ static void nas_emm_auth_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* - * Authentication response parameter 9.9.3.4 M LV 5-17 - */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_AUTH_RESP_PAR, NULL); + /* + * Authentication response parameter 9.9.3.4 M LV 5-17 + */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_AUTH_RESP_PAR, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.9 CS service notification + * 8.2.9 CS service notification */ static void nas_emm_cs_serv_not(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - consumed = 0; - - /* Paging identity Paging identity 9.9.3.25A M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_PAGING_ID, NULL); - /* 60 CLI CLI 9.9.3.38 O TLV 3-12 */ - ELEM_OPT_TLV(0x60, GSM_A_PDU_TYPE_DTAP, DE_CLD_PARTY_BCD_NUM, " - CLI"); - /* 61 SS Code SS Code 9.9.3.39 O TV 2 */ - ELEM_OPT_TV(0x61, NAS_PDU_TYPE_EMM, DE_EMM_SS_CODE, NULL); - /* 62 LCS indicator LCS indicator 9.9.3.40 O TV 2 */ - ELEM_OPT_TV(0x62, NAS_PDU_TYPE_EMM, DE_EMM_LCS_IND, NULL); - /* 63 LCS client identity LCS client identity 9.9.3.41 O TLV 3-257 */ - ELEM_OPT_TLV(0x63, NAS_PDU_TYPE_EMM, DE_EMM_LCS_CLIENT_ID, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + consumed = 0; + + /* Paging identity Paging identity 9.9.3.25A M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_PAGING_ID, NULL); + /* 60 CLI CLI 9.9.3.38 O TLV 3-12 */ + ELEM_OPT_TLV(0x60, GSM_A_PDU_TYPE_DTAP, DE_CLD_PARTY_BCD_NUM, " - CLI"); + /* 61 SS Code SS Code 9.9.3.39 O TV 2 */ + ELEM_OPT_TV(0x61, NAS_PDU_TYPE_EMM, DE_EMM_SS_CODE, NULL); + /* 62 LCS indicator LCS indicator 9.9.3.40 O TV 2 */ + ELEM_OPT_TV(0x62, NAS_PDU_TYPE_EMM, DE_EMM_LCS_IND, NULL); + /* 63 LCS client identity LCS client identity 9.9.3.41 O TLV 3-257 */ + ELEM_OPT_TLV(0x63, NAS_PDU_TYPE_EMM, DE_EMM_LCS_CLIENT_ID, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.10 Detach accept - * 8.2.10.1 Detach accept (UE originating detach) + * 8.2.10 Detach accept + * 8.2.10.1 Detach accept (UE originating detach) * No further IE's - * 8.2.10.2 Detach accept (UE terminated detach) + * 8.2.10.2 Detach accept (UE terminated detach) * No further IE's */ /* - * 8.2.11 Detach request - * 8.2.11.1 Detach request (UE originating detach) + * 8.2.11 Detach request + * 8.2.11.1 Detach request (UE originating detach) */ static void nas_emm_detach_req_UL(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset,bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - proto_tree_add_text(tree, tvb, curr_offset, len,"Up link"); - /* NAS key set identifier NAS key set identifier 9.9.3.21 M V 1/2 */ - bit_offset = curr_offset<<3; - de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, NULL); - bit_offset+=4; - /* Detach type Detach type 9.9.3.6 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_emm_switch_off, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_detach_type_UL, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset+=3; - - /* Fix the lengths */ - curr_len--; - curr_offset++; - - /* GUTI or IMSI EPS mobile identity 9.9.3.12 M LV 5-12 */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI or IMSI"); - - return; + guint32 curr_offset,bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + proto_tree_add_text(tree, tvb, curr_offset, len,"Up link"); + /* NAS key set identifier NAS key set identifier 9.9.3.21 M V 1/2 */ + bit_offset = curr_offset<<3; + de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, NULL); + bit_offset+=4; + /* Detach type Detach type 9.9.3.6 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_emm_switch_off, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_detach_type_UL, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset+=3; + + /* Fix the lengths */ + curr_len--; + curr_offset++; + + /* GUTI or IMSI EPS mobile identity 9.9.3.12 M LV 5-12 */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI or IMSI"); + + return; } /* - * 8.2.11.2 Detach request (UE terminated detach) + * 8.2.11.2 Detach request (UE terminated detach) */ static void nas_emm_detach_req_DL(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - proto_tree_add_text(tree, tvb, curr_offset, len,"Down link"); - /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ - bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Detach type Detach type 9.9.3.6 M V 1/2 */ - /* In the network to UE direction bit 4 is spare. The network shall set this bit to zero. */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_detach_type_DL, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset+=3; - - /* Fix the lengths */ - curr_len--; - curr_offset++; - - /* No more mandatory elements */ - if (curr_len==0) - return; - - /* EMM cause EMM cause 9.9.3.9 O TV 2 */ - ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); - - return; + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + proto_tree_add_text(tree, tvb, curr_offset, len,"Down link"); + /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ + bit_offset = curr_offset<<3; + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Detach type Detach type 9.9.3.6 M V 1/2 */ + /* In the network to UE direction bit 4 is spare. The network shall set this bit to zero. */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_detach_type_DL, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset+=3; + + /* Fix the lengths */ + curr_len--; + curr_offset++; + + /* No more mandatory elements */ + if (curr_len==0) + return; + + /* EMM cause EMM cause 9.9.3.9 O TV 2 */ + ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); + + return; } static void nas_emm_detach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - if (pinfo){ - if(pinfo->link_dir==P2P_DIR_UL){ - nas_emm_detach_req_UL(tvb, tree, pinfo, offset, len); - return; - }else if(pinfo->link_dir==P2P_DIR_DL){ - nas_emm_detach_req_DL(tvb, tree, pinfo, offset, len); - return; - } - } - proto_tree_add_text(tree, tvb, curr_offset, len,"UL/DL not known, can't properly dissect"); - proto_tree_add_text(tree, tvb, curr_offset, len,"Trying to dissect as UE terminated detach"); - nas_emm_detach_req_DL(tvb, tree, pinfo, offset, len); - proto_tree_add_text(tree, tvb, curr_offset, len,"Trying to dissect as UE originating detach"); - nas_emm_detach_req_UL(tvb, tree, pinfo, offset, len); - - return; + guint32 curr_offset; + /*guint curr_len;*/ + + curr_offset = offset; + /*curr_len = len;*/ + + if (pinfo){ + if(pinfo->link_dir==P2P_DIR_UL){ + nas_emm_detach_req_UL(tvb, tree, pinfo, offset, len); + return; + }else if(pinfo->link_dir==P2P_DIR_DL){ + nas_emm_detach_req_DL(tvb, tree, pinfo, offset, len); + return; + } + } + proto_tree_add_text(tree, tvb, curr_offset, len,"UL/DL not known, can't properly dissect"); + proto_tree_add_text(tree, tvb, curr_offset, len,"Trying to dissect as UE terminated detach"); + nas_emm_detach_req_DL(tvb, tree, pinfo, offset, len); + proto_tree_add_text(tree, tvb, curr_offset, len,"Trying to dissect as UE originating detach"); + nas_emm_detach_req_UL(tvb, tree, pinfo, offset, len); + + return; } /* - * 8.2.12 Downlink NAS Transport + * 8.2.12 Downlink NAS Transport */ static void nas_emm_dl_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* NAS message container NAS message container 9.9.3.22 M LV 3-252 */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_NAS_MSG_CONT, NULL); + /* NAS message container NAS message container 9.9.3.22 M LV 3-252 */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_NAS_MSG_CONT, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.13 EMM information + * 8.2.13 EMM information */ static void nas_emm_emm_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* 43 Full name for network Network name 9.9.3.24 O TLV 3-? */ - ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Full name for network"); - /* 45 Short name for network Network name 9.9.3.24 O TLV 3-? */ - ELEM_OPT_TLV(0x45, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Short Name"); - /* 46 Local time zone Time zone 9.9.3.29 O TV 2 */ - ELEM_OPT_TV(0x46, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE, " - Local"); - /* 47 Universal time and local time zone Time zone and time 9.9.3.30 O TV 8 */ - ELEM_OPT_TV(0x47, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE_TIME, " - Universal Time and Local Time Zone"); - /* 49 Network daylight saving time Daylight saving time 9.9.3.6 O TLV 3 */ - ELEM_OPT_TLV(0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* 43 Full name for network Network name 9.9.3.24 O TLV 3-? */ + ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Full name for network"); + /* 45 Short name for network Network name 9.9.3.24 O TLV 3-? */ + ELEM_OPT_TLV(0x45, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Short Name"); + /* 46 Local time zone Time zone 9.9.3.29 O TV 2 */ + ELEM_OPT_TV(0x46, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE, " - Local"); + /* 47 Universal time and local time zone Time zone and time 9.9.3.30 O TV 8 */ + ELEM_OPT_TV(0x47, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE_TIME, " - Universal Time and Local Time Zone"); + /* 49 Network daylight saving time Daylight saving time 9.9.3.6 O TLV 3 */ + ELEM_OPT_TLV(0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.14 EMM status + * 8.2.14 EMM status */ static void nas_emm_emm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* EMM cause EMM cause 9.9.3.9 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* EMM cause EMM cause 9.9.3.9 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.15 Extended service request + * 8.2.15 Extended service request */ static void nas_emm_ext_serv_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset,bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - bit_offset = curr_offset<<3; - - /* NAS key set identifier NAS key set identifier 9.9.3.21 M V 1/2 */ - de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, NULL); - bit_offset+=4; - /* Service type Service type 9.9.3.27 M V 1/2 Service type*/ - proto_tree_add_bits_item(tree, hf_nas_eps_service_type, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Fix up the lengths */ - curr_len--; - curr_offset++; - - /* M-TMSI Mobile identity 9.9.2.3 M LV 6 */ - ELEM_MAND_LV(NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - M-TMSI"); - /* B- CSFB response CSFB response 9.9.3.5 C TV 1 */ - ELEM_OPT_TV_SHORT(0xb0, NAS_PDU_TYPE_EMM, DE_EMM_CSFB_RESP, NULL); - /* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */ - ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset,bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + bit_offset = curr_offset<<3; + + /* NAS key set identifier NAS key set identifier 9.9.3.21 M V 1/2 */ + de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, NULL); + bit_offset+=4; + /* Service type Service type 9.9.3.27 M V 1/2 Service type*/ + proto_tree_add_bits_item(tree, hf_nas_eps_service_type, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Fix up the lengths */ + curr_len--; + curr_offset++; + + /* M-TMSI Mobile identity 9.9.2.3 M LV 6 */ + ELEM_MAND_LV(NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - M-TMSI"); + /* B- CSFB response CSFB response 9.9.3.5 C TV 1 */ + ELEM_OPT_TV_SHORT(0xb0, NAS_PDU_TYPE_EMM, DE_EMM_CSFB_RESP, NULL); + /* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */ + ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.16 GUTI reallocation command + * 8.2.16 GUTI reallocation command */ static void nas_emm_guti_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* GUTI EPS mobile identity 9.9.3.12 M LV 12 */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI"); + /* GUTI EPS mobile identity 9.9.3.12 M LV 12 */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI"); - /* 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); + /* 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); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.17 GUTI reallocation complete + * 8.2.17 GUTI reallocation complete * No more IE's */ /* - * 8.2.18 Identity request + * 8.2.18 Identity request */ static void nas_emm_id_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset, bit_offset; + /*guint32 consumed;*/ + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - bit_offset=curr_offset<<3; + bit_offset=curr_offset<<3; - /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; + /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; - /* Identity type Identity type 2 9.9.3.17 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_emm_id_type2, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - consumed = 1; + /* Identity type Identity type 2 9.9.3.17 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_emm_id_type2, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /*consumed = 1;*/ - /* Fix up the lengths */ - curr_len--; - curr_offset++; + /* Fix up the lengths */ + curr_len--; + curr_offset++; - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.19 Identity response + * 8.2.19 Identity response */ static void nas_emm_id_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Mobile identity Mobile identity 9.9.2.3 M LV 4-10 */ - ELEM_MAND_LV(NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, NULL); + /* Mobile identity Mobile identity 9.9.2.3 M LV 4-10 */ + ELEM_MAND_LV(NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.20 Security mode command + * 8.2.20 Security mode command */ static void nas_emm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* Selected NAS security algorithms NAS security algorithms 9.9.3.23 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_NAS_SEC_ALGS, " - Selected NAS security algorithms"); - - bit_offset = curr_offset<<3; - /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* NAS key set identifierASME NAS key set identifier 9.9.3.21 M V 1/2 */ - de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, " ASME"); - bit_offset+=4; - - /* Fix up the lengths */ - curr_len--; - curr_offset++; - - /* 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"); - /* 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 ); - /* 55 Replayed NonceUE Nonce 9.9.3.25 O TV 5 */ - ELEM_OPT_TV(0x55, GSM_A_PDU_TYPE_GM, DE_EMM_NONCE, " - Replayed NonceUE"); - /* 56 NonceMME Nonce 9.9.3.25 O TV 5 */ - ELEM_OPT_TV(0x56, GSM_A_PDU_TYPE_GM, DE_EMM_NONCE, " - NonceMME"); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* Selected NAS security algorithms NAS security algorithms 9.9.3.23 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_NAS_SEC_ALGS, " - Selected NAS security algorithms"); + + bit_offset = curr_offset<<3; + /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* NAS key set identifierASME NAS key set identifier 9.9.3.21 M V 1/2 */ + de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, " ASME"); + bit_offset+=4; + + /* Fix up the lengths */ + curr_len--; + curr_offset++; + + /* 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"); + /* 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 ); + /* 55 Replayed NonceUE Nonce 9.9.3.25 O TV 5 */ + ELEM_OPT_TV(0x55, GSM_A_PDU_TYPE_GM, DE_EMM_NONCE, " - Replayed NonceUE"); + /* 56 NonceMME Nonce 9.9.3.25 O TV 5 */ + ELEM_OPT_TV(0x56, GSM_A_PDU_TYPE_GM, DE_EMM_NONCE, " - NonceMME"); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.21 Security mode complete + * 8.2.21 Security mode complete */ static void nas_emm_sec_mode_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - if (curr_len == 0) - return; + if (curr_len == 0) + return; - /* 23 IMEISV Mobile identity 9.9.2.3 O TLV 11 */ - ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - IMEISV"); + /* 23 IMEISV Mobile identity 9.9.2.3 O TLV 11 */ + ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - IMEISV"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.22 Security mode reject + * 8.2.22 Security mode reject */ static void nas_emm_sec_mode_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* EMM cause EMM cause 9.9.3.9 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* EMM cause EMM cause 9.9.3.9 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.23 Security protected NAS message + * 8.2.23 Security protected NAS message */ #if 0 static int nas_emm_sec_prot_msg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint curr_len; - guint8 security_header_type; - - curr_offset = offset; - curr_len = len; - - /* Security header type Security header type 9.3.1 M V 1/2 */ - security_header_type = tvb_get_guint8(tvb,offset)>>4; - proto_tree_add_item(tree, hf_nas_eps_security_header_type, tvb, 0, 1, ENC_BIG_ENDIAN); - /* Protocol discriminator Protocol discriminator 9.2 M V 1/2 */ - proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN); - offset++; - /* Message authentication code Message authentication code 9.5 M V 4 */ - if (security_header_type !=0){ - /* Message authentication code */ - proto_tree_add_item(tree, hf_nas_eps_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - if ((security_header_type==2)||(security_header_type==4)){ - /* Integrity protected and ciphered = 2, Integrity protected and ciphered with new EPS security context = 4 */ - proto_tree_add_text(tree, tvb, offset, len-5,"Ciphered message"); - return offset; - } - }else{ - proto_tree_add_text(tree, tvb, offset, len,"Not a security protected message"); - return offset; - } - /* Sequence number Sequence number 9.6 M V 1 */ - proto_tree_add_item(tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - /* NAS message NAS message 9.7 M V 1-n */ - return offset; + guint32 curr_offset; + guint curr_len; + guint8 security_header_type; + + curr_offset = offset; + curr_len = len; + + /* Security header type Security header type 9.3.1 M V 1/2 */ + security_header_type = tvb_get_guint8(tvb,offset)>>4; + proto_tree_add_item(tree, hf_nas_eps_security_header_type, tvb, 0, 1, ENC_BIG_ENDIAN); + /* Protocol discriminator Protocol discriminator 9.2 M V 1/2 */ + proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN); + offset++; + /* Message authentication code Message authentication code 9.5 M V 4 */ + if (security_header_type !=0){ + /* Message authentication code */ + proto_tree_add_item(tree, hf_nas_eps_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + if ((security_header_type==2)||(security_header_type==4)){ + /* Integrity protected and ciphered = 2, Integrity protected and ciphered with new EPS security context = 4 */ + proto_tree_add_text(tree, tvb, offset, len-5,"Ciphered message"); + return offset; + } + }else{ + proto_tree_add_text(tree, tvb, offset, len,"Not a security protected message"); + return offset; + } + /* Sequence number Sequence number 9.6 M V 1 */ + proto_tree_add_item(tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + /* NAS message NAS message 9.7 M V 1-n */ + return offset; } #endif /* - * 8.2.24 Service reject + * 8.2.24 Service reject */ static void nas_emm_serv_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* EMM cause EMM cause 9.9.3.9 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* EMM cause EMM cause 9.9.3.9 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - /* 5B T3442 value GPRS timer 9.9.3.16 C TV 2 */ - ELEM_OPT_TV(0x5b, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3442 value"); + /* 5B T3442 value GPRS timer 9.9.3.16 C TV 2 */ + ELEM_OPT_TV(0x5b, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3442 value"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.25 Service request + * 8.2.25 Service request * This message is sent by the UE to the network to request the establishment * of a NAS signalling connection and of the radio and S1 bearers. * Its structure does not follow the structure of a standard layer 3 message. See table 8.2.25.1. @@ -3289,386 +3289,386 @@ nas_emm_serv_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3 static void nas_emm_service_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* KSI and sequence number 9.9.3.19 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_KSI_AND_SEQ_NO, NULL); + /* KSI and sequence number 9.9.3.19 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_KSI_AND_SEQ_NO, NULL); - /* Short MAC 9.9.3.28 M V 2 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_SHORT_MAC, " - Message authentication code (short)"); + /* Short MAC 9.9.3.28 M V 2 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_SHORT_MAC, " - Message authentication code (short)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.26 Tracking area update accept + * 8.2.26 Tracking area update accept */ static void nas_emm_trac_area_upd_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ - bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* EPS update result EPS update result 9.9.3.13 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - proto_tree_add_bits_item(tree, hf_nas_eps_eps_update_result_value, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset+=3; - /* Fix up the lengths */ - curr_len--; - curr_offset++; - /* No more mandatory elements */ - if (curr_len==0) - return; - /* 5A T3412 value GPRS timer 9.9.3.16 O TV 2 */ - ELEM_OPT_TV(0x5a, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3412 value"); - /* 50 GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ - ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI"); - /* 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); - /* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */ - ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL); - /* 13 Location area identification Location area identification 9.9.2.2 O TV 6 */ - ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, NULL); - /* 23 MS identity Mobile identity 9.9.2.3 O TLV 7-10 */ - ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - MS identity"); - /* 53 EMM cause EMM cause 9.9.3.9 O TV 2 */ - ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - /* 17 T3402 value GPRS timer 9.9.3.16 O TV 2 */ - ELEM_OPT_TV(0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3402 value"); - /* 59 T3423 value GPRS timer 9.9.3.16 O TV 2 */ - ELEM_OPT_TV(0x59, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3423 value"); - /* 4A Equivalent PLMNs PLMN list 9.9.2.8 O TLV 5-47 */ - ELEM_OPT_TLV(0x4a, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_PLM_LST, " - PLMN list"); - /* 34 Emergency Number List Emergency Number List 9.9.3.37 O TLV 5-50 */ - ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL); - /* 64 EPS network feature support EPS network feature support 9.9.3.12A O TLV 3 */ - ELEM_OPT_TLV(0x64, NAS_PDU_TYPE_EMM, DE_EMM_EPS_NET_FEATURE_SUP, NULL); - /* F- Additional update result Additional update result 9.9.3.0A O TV 1 */ - ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_RES, NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* Spare half octet Spare half octet 9.9.2.7 M V 1/2 */ + bit_offset = curr_offset<<3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* EPS update result EPS update result 9.9.3.13 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_eps_update_result_value, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset+=3; + /* Fix up the lengths */ + curr_len--; + curr_offset++; + /* No more mandatory elements */ + if (curr_len==0) + return; + /* 5A T3412 value GPRS timer 9.9.3.16 O TV 2 */ + ELEM_OPT_TV(0x5a, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3412 value"); + /* 50 GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ + ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI"); + /* 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); + /* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */ + ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL); + /* 13 Location area identification Location area identification 9.9.2.2 O TV 6 */ + ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, NULL); + /* 23 MS identity Mobile identity 9.9.2.3 O TLV 7-10 */ + ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, " - MS identity"); + /* 53 EMM cause EMM cause 9.9.3.9 O TV 2 */ + ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* 17 T3402 value GPRS timer 9.9.3.16 O TV 2 */ + ELEM_OPT_TV(0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3402 value"); + /* 59 T3423 value GPRS timer 9.9.3.16 O TV 2 */ + ELEM_OPT_TV(0x59, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - T3423 value"); + /* 4A Equivalent PLMNs PLMN list 9.9.2.8 O TLV 5-47 */ + ELEM_OPT_TLV(0x4a, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_PLM_LST, " - PLMN list"); + /* 34 Emergency Number List Emergency Number List 9.9.3.37 O TLV 5-50 */ + ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL); + /* 64 EPS network feature support EPS network feature support 9.9.3.12A O TLV 3 */ + ELEM_OPT_TLV(0x64, NAS_PDU_TYPE_EMM, DE_EMM_EPS_NET_FEATURE_SUP, NULL); + /* F- Additional update result Additional update result 9.9.3.0A O TV 1 */ + ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_RES, NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.27 Tracking area update complete + * 8.2.27 Tracking area update complete * No more IE's */ /* - * 8.2.28 Tracking area update reject + * 8.2.28 Tracking area update reject */ static void nas_emm_trac_area_upd_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* EMM cause EMM cause 9.9.3.9 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); + /* EMM cause EMM cause 9.9.3.9 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.29 Tracking area update request + * 8.2.29 Tracking area update request */ static void nas_emm_trac_area_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - bit_offset = curr_offset<<3; - - /* NAS key set identifierASME NAS key set identifier 9.9.3.21 M V 1/2 */ - de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, " ASME"); - bit_offset+=4; - - /* EPS update type EPS update type 9.9.3.14 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_active_flg, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - proto_tree_add_bits_item(tree, hf_nas_eps_eps_update_type_value, tvb, bit_offset, 3, ENC_BIG_ENDIAN); - bit_offset+=3; - - /* Fix the lengths */ - curr_len--; - curr_offset++; - /* Old GUTI EPS mobile identity 9.9.3.12 M LV 12 */ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Old GUTI"); - /* No more Mandatory elements */ - - /* B- NAS key set identifier Non-current native NAS key set identifier 9.9.3.21 O TV 1 */ - ELEM_OPT_TV_SHORT( 0xb0 , NAS_PDU_TYPE_EMM, DE_EMM_NAS_KEY_SET_ID , " - Non-current native NAS key set identifier" ); - /* 8- GPRS ciphering key sequence number Ciphering key sequence number 9.9.3.4a O TV 1 */ - ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, " - GPRS ciphering key sequence number"); - /* 19 Old P-TMSI signature P-TMSI signature 9.9.3.26 O TV 4 */ - ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - Old P-TMSI Signature"); - /* 50 Additional GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ - ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Additional GUTI"); - /* 55 NonceUE Nonce 9.9.3.25 O TV 5 */ - ELEM_OPT_TV(0x55, GSM_A_PDU_TYPE_GM, DE_EMM_NONCE, " - NonceUE"); - /* 58 UE network capability UE network capability 9.9.3.34 O TLV 4-15 */ - ELEM_OPT_TLV(0x58, NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL); - /* 52 Last visited registered TAI Tracking area identity 9.9.3.32 O TV 6 */ - ELEM_OPT_TV(0x52, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, " - Last visited registered TAI"); - /* 5C DRX parameter DRX parameter 9.9.3.8 O TV 3 */ - ELEM_OPT_TV(0x5c, GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL ); - /* A- UE radio capability information update needed UE radio capability information update needed 9.9.3.35 O TV 1 */ - ELEM_OPT_TV_SHORT( 0xA0 , NAS_PDU_TYPE_EMM, DE_EMM_UE_RA_CAP_INF_UPD_NEED , NULL ); - /* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */ - ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL); - /* 31 MS network capability MS network capability 9.9.3.20 O TLV 4-10 */ - ELEM_OPT_TLV( 0x31 , GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP , NULL ); - /* 13 Old location area identification Location area identification 9.9.2.2 O TV 6 */ - ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, " - Old location area identification"); - /* 9- TMSI status TMSI status 9.9.3.31 O TV 1 */ - ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM, DE_TMSI_STAT , NULL ); - /* 11 Mobile station classmark 2 Mobile station classmark 2 9.9.2.5 O TLV 5 */ - ELEM_OPT_TLV( 0x11, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_2 , NULL ); - /* 20 Mobile station classmark 3 Mobile station classmark 3 9.9.2.5 O TLV 2-34 */ - ELEM_OPT_TLV( 0x20, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_3 , NULL ); - /* 40 Supported Codecs Supported Codec List 9.9.2.10 O TLV 5-n */ - ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, " - Supported Codecs"); - /* F- Additional update type Additional update type 9.9.3.0B O TV 1 */ - ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_TYPE, NULL ); - /* 5D Voice domain preference and UE's usage setting Voice domain preference and UE's usage setting 9.9.3.44 O TLV 3 */ - ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + bit_offset = curr_offset<<3; + + /* NAS key set identifierASME NAS key set identifier 9.9.3.21 M V 1/2 */ + de_emm_nas_key_set_id_bits(tvb, tree, bit_offset, " ASME"); + bit_offset+=4; + + /* EPS update type EPS update type 9.9.3.14 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_active_flg, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + proto_tree_add_bits_item(tree, hf_nas_eps_eps_update_type_value, tvb, bit_offset, 3, ENC_BIG_ENDIAN); + bit_offset+=3; + + /* Fix the lengths */ + curr_len--; + curr_offset++; + /* Old GUTI EPS mobile identity 9.9.3.12 M LV 12 */ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Old GUTI"); + /* No more Mandatory elements */ + + /* B- NAS key set identifier Non-current native NAS key set identifier 9.9.3.21 O TV 1 */ + ELEM_OPT_TV_SHORT( 0xb0 , NAS_PDU_TYPE_EMM, DE_EMM_NAS_KEY_SET_ID , " - Non-current native NAS key set identifier" ); + /* 8- GPRS ciphering key sequence number Ciphering key sequence number 9.9.3.4a O TV 1 */ + ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, " - GPRS ciphering key sequence number"); + /* 19 Old P-TMSI signature P-TMSI signature 9.9.3.26 O TV 4 */ + ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - Old P-TMSI Signature"); + /* 50 Additional GUTI EPS mobile identity 9.9.3.12 O TLV 13 */ + ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Additional GUTI"); + /* 55 NonceUE Nonce 9.9.3.25 O TV 5 */ + ELEM_OPT_TV(0x55, GSM_A_PDU_TYPE_GM, DE_EMM_NONCE, " - NonceUE"); + /* 58 UE network capability UE network capability 9.9.3.34 O TLV 4-15 */ + ELEM_OPT_TLV(0x58, NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL); + /* 52 Last visited registered TAI Tracking area identity 9.9.3.32 O TV 6 */ + ELEM_OPT_TV(0x52, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, " - Last visited registered TAI"); + /* 5C DRX parameter DRX parameter 9.9.3.8 O TV 3 */ + ELEM_OPT_TV(0x5c, GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL ); + /* A- UE radio capability information update needed UE radio capability information update needed 9.9.3.35 O TV 1 */ + ELEM_OPT_TV_SHORT( 0xA0 , NAS_PDU_TYPE_EMM, DE_EMM_UE_RA_CAP_INF_UPD_NEED , NULL ); + /* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */ + ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL); + /* 31 MS network capability MS network capability 9.9.3.20 O TLV 4-10 */ + ELEM_OPT_TLV( 0x31 , GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP , NULL ); + /* 13 Old location area identification Location area identification 9.9.2.2 O TV 6 */ + ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, " - Old location area identification"); + /* 9- TMSI status TMSI status 9.9.3.31 O TV 1 */ + ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM, DE_TMSI_STAT , NULL ); + /* 11 Mobile station classmark 2 Mobile station classmark 2 9.9.2.5 O TLV 5 */ + ELEM_OPT_TLV( 0x11, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_2 , NULL ); + /* 20 Mobile station classmark 3 Mobile station classmark 3 9.9.2.5 O TLV 2-34 */ + ELEM_OPT_TLV( 0x20, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_3 , NULL ); + /* 40 Supported Codecs Supported Codec List 9.9.2.10 O TLV 5-n */ + ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, " - Supported Codecs"); + /* F- Additional update type Additional update type 9.9.3.0B O TV 1 */ + ELEM_OPT_TV_SHORT( 0xF0 , NAS_PDU_TYPE_EMM, DE_EMM_ADD_UPD_TYPE, NULL ); + /* 5D Voice domain preference and UE's usage setting Voice domain preference and UE's usage setting 9.9.3.44 O TLV 3 */ + ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.30 Uplink NAS Transport + * 8.2.30 Uplink NAS Transport */ static void nas_emm_ul_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* NAS message container NAS message container 9.9.3.22 M LV 3-252*/ - ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_NAS_MSG_CONT, NULL); + /* NAS message container NAS message container 9.9.3.22 M LV 3-252*/ + ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_NAS_MSG_CONT, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.31 Downlink generic NAS transport + * 8.2.31 Downlink generic NAS transport */ static void nas_emm_dl_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Generic message container type Generic message container type 9.9.3.42 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); - /* Generic message container Generic message container 9.9.3.43 M LV-E 3-n */ - ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) - /* 65 Additional information Additional information 9.9.2.0 O TLV 3-n */ - ELEM_OPT_TLV(0x65, NAS_PDU_TYPE_EMM, DE_EPS_CMN_ADD_INFO, NULL); + /* Generic message container type Generic message container type 9.9.3.42 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); + /* Generic message container Generic message container 9.9.3.43 M LV-E 3-n */ + ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) + /* 65 Additional information Additional information 9.9.2.0 O TLV 3-n */ + ELEM_OPT_TLV(0x65, NAS_PDU_TYPE_EMM, DE_EPS_CMN_ADD_INFO, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2.32 Uplink generic NAS transport + * 8.2.32 Uplink generic NAS transport */ static void nas_emm_ul_gen_nas_trans(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Generic message container type Generic message container type 9.9.3.42 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); - /* Generic message container Generic message container 9.9.3.43 M LV-E 3-n */ - ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) - /* 65 Additional information Additional information 9.9.2.0 O TLV 3-n */ - ELEM_OPT_TLV(0x65, NAS_PDU_TYPE_EMM, DE_EPS_CMN_ADD_INFO, NULL); + /* Generic message container type Generic message container type 9.9.3.42 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT_TYPE, NULL); + /* Generic message container Generic message container 9.9.3.43 M LV-E 3-n */ + ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_GEN_MSG_CONT, NULL) + /* 65 Additional information Additional information 9.9.2.0 O TLV 3-n */ + ELEM_OPT_TLV(0x65, NAS_PDU_TYPE_EMM, DE_EPS_CMN_ADD_INFO, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3 EPS session management messages + * 8.3 EPS session management messages */ /* - * 8.3.1 Activate dedicated EPS bearer context accept + * 8.3.1 Activate dedicated EPS bearer context accept */ static void nas_esm_act_ded_eps_bearer_ctx_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - if(len==0) - return; + if(len==0) + return; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This message is sent by the UE to the network */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by the UE to the network */ + pinfo->link_dir = P2P_DIR_UL; - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.2 Activate dedicated EPS bearer context reject + * 8.3.2 Activate dedicated EPS bearer context reject */ static void nas_esm_act_ded_eps_bearer_ctx_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This message is sent by UE to the network to reject activation of a dedicated EPS bearer context */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by UE to the network to reject activation of a dedicated EPS bearer context */ + pinfo->link_dir = P2P_DIR_UL; - /* ESM cause ESM cause 9.9.4.2 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.2 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.3 Activate dedicated EPS bearer context request + * 8.3.3 Activate dedicated EPS bearer context request */ static void nas_esm_act_ded_eps_bearer_ctx_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This message is sent by the network to the UE to request activation of a dedicated EPS bearer context... */ - pinfo->link_dir = P2P_DIR_DL; - - - /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ - bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Linked EPS bearer identity Linked EPS bearer identity 9.9.4.6 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Fix the lengths */ - curr_len--; - curr_offset++; - - /* EPS QoS EPS quality of service 9.9.4.3 M LV 2-10 */ - ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS, NULL); - /* TFT Traffic flow template 9.9.4.16 M LV 2-256 */ - ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , NULL ); - /* 5D Transaction identifier Transaction identifier 9.9.4.17 O TLV 3-4 */ - ELEM_OPT_TLV( 0x5d , GSM_A_PDU_TYPE_GM, DE_LINKED_TI , " - Transaction identifier" ); - /* 30 Negotiated QoS Quality of service 9.9.4.12 O TLV 14-18 */ - ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_GM, DE_QOS , " - Negotiated QoS" ); - /* 32 Negotiated LLC SAPI LLC service access point identifier 9.9.4.7 O TV 2 */ - ELEM_OPT_TV( 0x32 , GSM_A_PDU_TYPE_GM, DE_LLC_SAPI , " - Negotiated LLC SAPI" ); - /* 8- Radio priority Radio priority 9.9.4.13 O TV 1 */ - ELEM_OPT_TV_SHORT ( 0x80 , GSM_A_PDU_TYPE_GM , DE_RAD_PRIO , NULL ); - /* 34 Packet flow Identifier Packet flow Identifier 9.9.4.8 O TLV 3 */ - ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL ); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This message is sent by the network to the UE to request activation of a dedicated EPS bearer context... */ + pinfo->link_dir = P2P_DIR_DL; + + + /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ + bit_offset = curr_offset<<3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Linked EPS bearer identity Linked EPS bearer identity 9.9.4.6 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Fix the lengths */ + curr_len--; + curr_offset++; + + /* EPS QoS EPS quality of service 9.9.4.3 M LV 2-10 */ + ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS, NULL); + /* TFT Traffic flow template 9.9.4.16 M LV 2-256 */ + ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , NULL ); + /* 5D Transaction identifier Transaction identifier 9.9.4.17 O TLV 3-4 */ + ELEM_OPT_TLV( 0x5d , GSM_A_PDU_TYPE_GM, DE_LINKED_TI , " - Transaction identifier" ); + /* 30 Negotiated QoS Quality of service 9.9.4.12 O TLV 14-18 */ + ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_GM, DE_QOS , " - Negotiated QoS" ); + /* 32 Negotiated LLC SAPI LLC service access point identifier 9.9.4.7 O TV 2 */ + ELEM_OPT_TV( 0x32 , GSM_A_PDU_TYPE_GM, DE_LLC_SAPI , " - Negotiated LLC SAPI" ); + /* 8- Radio priority Radio priority 9.9.4.13 O TV 1 */ + ELEM_OPT_TV_SHORT ( 0x80 , GSM_A_PDU_TYPE_GM , DE_RAD_PRIO , NULL ); + /* 34 Packet flow Identifier Packet flow Identifier 9.9.4.8 O TLV 3 */ + ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.4 Activate default EPS bearer context accept + * 8.3.4 Activate default EPS bearer context accept */ static void nas_esm_act_def_eps_bearer_ctx_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - if(len==0) - return; + if(len==0) + return; - /* This message is sent by the UE to the network to acknowledge activation of a default EPS bearer context */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by the UE to the network to acknowledge activation of a default EPS bearer context */ + pinfo->link_dir = P2P_DIR_UL; - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.5 Activate default EPS bearer context reject + * 8.3.5 Activate default EPS bearer context reject */ static void nas_esm_act_def_eps_bearer_ctx_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This message is sent by UE to the network to reject activation of a default EPS bearer context. */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by UE to the network to reject activation of a default EPS bearer context. */ + pinfo->link_dir = P2P_DIR_UL; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -3677,161 +3677,161 @@ nas_esm_act_def_eps_bearer_ctx_rej(tvbuff_t *tvb, proto_tree *tree, packet_info static void nas_esm_act_def_eps_bearer_ctx_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This message is sent by the network to the UE to request activation of a default EPS bearer context. */ - pinfo->link_dir = P2P_DIR_DL; - - /* EPS QoS EPS quality of service 9.9.4.3 M LV 2-10 */ - ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS, NULL); - /* Access point name Access point name 9.9.4.1 M LV 2-101 */ - ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME , NULL ); - /* PDN address PDN address 9.9.4.9 M LV 6-14 DE_ESM_PDN_ADDR*/ - ELEM_MAND_LV( NAS_PDU_TYPE_ESM, DE_ESM_PDN_ADDR , NULL ); - /* 5D Transaction identifier Transaction identifier 9.9.4.17 O TLV 3-4 */ - ELEM_OPT_TLV( 0x5d , GSM_A_PDU_TYPE_GM, DE_LINKED_TI , " - Transaction identifier" ); - /* 30 Negotiated QoS Quality of service 9.9.4.12 O TLV 14-18 */ - ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_GM, DE_QOS , " - Negotiated QoS" ); - /* 32 Negotiated LLC SAPI LLC service access point identifier 9.9.4.7 O TV 2 */ - ELEM_OPT_TV( 0x32 , GSM_A_PDU_TYPE_GM, DE_LLC_SAPI , " - Negotiated LLC SAPI" ); - /* 8- Radio priority Radio priority 9.9.4.13 O TV 1 */ - ELEM_OPT_TV_SHORT ( 0x80 , GSM_A_PDU_TYPE_GM , DE_RAD_PRIO , NULL ); - /* 34 Packet flow Identifier Packet flow Identifier 9.9.4.8 O TLV 3 */ - ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL ); - /* 5E APN-AMBR APN aggregate maximum bit rate 9.9.4.2 O TLV 4-8 DE_ESM_APN_AGR_MAX_BR*/ - ELEM_OPT_TLV( 0x5e , NAS_PDU_TYPE_ESM, DE_ESM_APN_AGR_MAX_BR , NULL ); - /* 58 ESM cause ESM cause 9.9.4.4 O TV 2 */ - ELEM_OPT_TV( 0x58 , NAS_PDU_TYPE_ESM, DE_ESM_CAUSE , NULL ); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This message is sent by the network to the UE to request activation of a default EPS bearer context. */ + pinfo->link_dir = P2P_DIR_DL; + + /* EPS QoS EPS quality of service 9.9.4.3 M LV 2-10 */ + ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS, NULL); + /* Access point name Access point name 9.9.4.1 M LV 2-101 */ + ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME , NULL ); + /* PDN address PDN address 9.9.4.9 M LV 6-14 DE_ESM_PDN_ADDR*/ + ELEM_MAND_LV( NAS_PDU_TYPE_ESM, DE_ESM_PDN_ADDR , NULL ); + /* 5D Transaction identifier Transaction identifier 9.9.4.17 O TLV 3-4 */ + ELEM_OPT_TLV( 0x5d , GSM_A_PDU_TYPE_GM, DE_LINKED_TI , " - Transaction identifier" ); + /* 30 Negotiated QoS Quality of service 9.9.4.12 O TLV 14-18 */ + ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_GM, DE_QOS , " - Negotiated QoS" ); + /* 32 Negotiated LLC SAPI LLC service access point identifier 9.9.4.7 O TV 2 */ + ELEM_OPT_TV( 0x32 , GSM_A_PDU_TYPE_GM, DE_LLC_SAPI , " - Negotiated LLC SAPI" ); + /* 8- Radio priority Radio priority 9.9.4.13 O TV 1 */ + ELEM_OPT_TV_SHORT ( 0x80 , GSM_A_PDU_TYPE_GM , DE_RAD_PRIO , NULL ); + /* 34 Packet flow Identifier Packet flow Identifier 9.9.4.8 O TLV 3 */ + ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL ); + /* 5E APN-AMBR APN aggregate maximum bit rate 9.9.4.2 O TLV 4-8 DE_ESM_APN_AGR_MAX_BR*/ + ELEM_OPT_TLV( 0x5e , NAS_PDU_TYPE_ESM, DE_ESM_APN_AGR_MAX_BR , NULL ); + /* 58 ESM cause ESM cause 9.9.4.4 O TV 2 */ + ELEM_OPT_TV( 0x58 , NAS_PDU_TYPE_ESM, DE_ESM_CAUSE , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.7 Bearer resource allocation reject + * 8.3.7 Bearer resource allocation reject */ static void nas_esm_bearer_res_all_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This message is sent by the network to the UE to reject the allocation of a dedicated bearer resource. */ - pinfo->link_dir = P2P_DIR_DL; + /* This message is sent by the network to the UE to reject the allocation of a dedicated bearer resource. */ + pinfo->link_dir = P2P_DIR_DL; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.8 Bearer resource allocation request + * 8.3.8 Bearer resource allocation request */ static void nas_esm_bearer_res_all_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This message is sent by the UE to the network to request the allocation of a dedicated bearer resource. */ - pinfo->link_dir = P2P_DIR_UL; - - /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ - bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Linked EPS bearer identity Linked EPS bearer identity 9.9.4.6 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Fix the lengths */ - curr_len--; - curr_offset++; - - /* Traffic flow aggregate Traffic flow aggregate description 9.9.4.15 M LV 2-256 */ - ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , " - Traffic flow aggregate" ); - /* Required traffic flow QoS EPS quality of service 9.9.4.3 M LV 2-10 */ - ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS, " - Required traffic flow QoS"); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This message is sent by the UE to the network to request the allocation of a dedicated bearer resource. */ + pinfo->link_dir = P2P_DIR_UL; + + /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ + bit_offset = curr_offset<<3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Linked EPS bearer identity Linked EPS bearer identity 9.9.4.6 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Fix the lengths */ + curr_len--; + curr_offset++; + + /* Traffic flow aggregate Traffic flow aggregate description 9.9.4.15 M LV 2-256 */ + ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , " - Traffic flow aggregate" ); + /* Required traffic flow QoS EPS quality of service 9.9.4.3 M LV 2-10 */ + ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS, " - Required traffic flow QoS"); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.9 Bearer resource modification reject + * 8.3.9 Bearer resource modification reject */ static void nas_esm_bearer_res_mod_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This message is sent by the network to the UE to reject the modification of a dedicated bearer resource. */ - pinfo->link_dir = P2P_DIR_DL; + /* This message is sent by the network to the UE to reject the modification of a dedicated bearer resource. */ + pinfo->link_dir = P2P_DIR_DL; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3.10 Bearer resource modification request + * 8.3.10 Bearer resource modification request */ static void nas_esm_bearer_res_mod_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This message is sent by the UE to the network to request the modification of a dedicated bearer resource. */ - pinfo->link_dir = P2P_DIR_UL; - - /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ - bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* EPS bearer identity for packet filter Linked EPS bearer identity 9.9.4.6 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Fix the lengths */ - curr_len--; - curr_offset++; - /* Traffic flow aggregate Traffic flow aggregate description 9.9.4.15 M LV 2-256 */ - ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , " - Traffic flow aggregate" ); - /* 5B Required traffic flow QoS EPS quality of service 9.9.4.3 O TLV 3-11 */ - ELEM_OPT_TLV( 0x5B , NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS , " - Required traffic flow QoS" ); - /* 58 ESM cause ESM cause 9.9.4.4 O TV 2 */ - ELEM_OPT_TV( 0x58 , NAS_PDU_TYPE_ESM, DE_ESM_CAUSE , NULL ); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This message is sent by the UE to the network to request the modification of a dedicated bearer resource. */ + pinfo->link_dir = P2P_DIR_UL; + + /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ + bit_offset = curr_offset<<3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* EPS bearer identity for packet filter Linked EPS bearer identity 9.9.4.6 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Fix the lengths */ + curr_len--; + curr_offset++; + /* Traffic flow aggregate Traffic flow aggregate description 9.9.4.15 M LV 2-256 */ + ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , " - Traffic flow aggregate" ); + /* 5B Required traffic flow QoS EPS quality of service 9.9.4.3 O TLV 3-11 */ + ELEM_OPT_TLV( 0x5B , NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS , " - Required traffic flow QoS" ); + /* 58 ESM cause ESM cause 9.9.4.4 O TV 2 */ + ELEM_OPT_TV( 0x58 , NAS_PDU_TYPE_ESM, DE_ESM_CAUSE , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.11 Deactivate EPS bearer context accept @@ -3839,23 +3839,23 @@ nas_esm_bearer_res_mod_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, static void nas_esm_deact_eps_bearer_ctx_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - if(len==0) - return; + if(len==0) + return; - /* This message is sent by the UE to acknowledge deactivation of the EPS bearer context... */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by the UE to acknowledge deactivation of the EPS bearer context... */ + pinfo->link_dir = P2P_DIR_UL; - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.12 Deactivate EPS bearer context request @@ -3863,22 +3863,22 @@ nas_esm_deact_eps_bearer_ctx_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *p static void nas_esm_deact_eps_bearer_ctx_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This message is sent by the network to request deactivation of an active EPS bearer context. */ - pinfo->link_dir = P2P_DIR_DL; + /* This message is sent by the network to request deactivation of an active EPS bearer context. */ + pinfo->link_dir = P2P_DIR_DL; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -3888,13 +3888,13 @@ nas_esm_deact_eps_bearer_ctx_req(tvbuff_t *tvb, proto_tree *tree, packet_info *p static void nas_esm_inf_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint curr_len; + guint32 curr_offset; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.14 ESM information response @@ -3902,25 +3902,25 @@ nas_esm_inf_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 static void nas_esm_inf_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - if(len==0) - return; + if(len==0) + return; - /* This message is sent by the UE to the network in response to an ESM INFORMATION REQUEST... */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by the UE to the network in response to an ESM INFORMATION REQUEST... */ + pinfo->link_dir = P2P_DIR_UL; - /* 28 Access point name Access point name 9.9.4.1 O TLV 3-102 */ - ELEM_OPT_TLV( 0x28 , GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME , NULL ); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* 28 Access point name Access point name 9.9.4.1 O TLV 3-102 */ + ELEM_OPT_TLV( 0x28 , GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.15 ESM status @@ -3928,17 +3928,17 @@ nas_esm_inf_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of static void nas_esm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.16 Modify EPS bearer context accept @@ -3946,23 +3946,23 @@ nas_esm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 static void nas_esm_mod_eps_bearer_ctx_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - if(len==0) - return; + if(len==0) + return; - /* This message is sent by the UE to the network to acknowledge the modification of an active EPS bearer context. */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by the UE to the network to acknowledge the modification of an active EPS bearer context. */ + pinfo->link_dir = P2P_DIR_UL; - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.17 Modify EPS bearer context reject @@ -3970,22 +3970,22 @@ nas_esm_mod_eps_bearer_ctx_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pin static void nas_esm_mod_eps_bearer_ctx_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This message is sent by the UE or the network to reject a modification of an active EPS bearer context. */ - pinfo->link_dir = P2P_DIR_UL; + /* This message is sent by the UE or the network to reject a modification of an active EPS bearer context. */ + pinfo->link_dir = P2P_DIR_UL; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.18 Modify EPS bearer context request @@ -3993,37 +3993,37 @@ nas_esm_mod_eps_bearer_ctx_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pin static void nas_esm_mod_eps_bearer_ctx_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - if(len==0) - return; - - /*This message is sent by the network to inform the UE about events which are relevant for the upper layer... */ - pinfo->link_dir = P2P_DIR_DL; - - /* 5B New EPS QoS EPS quality of service 9.9.4.3 O TLV 3-11 */ - ELEM_OPT_TLV( 0x5B , NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS , " - New EPS QoS" ); - /* 36 TFT Traffic flow template 9.9.4.16 O TLV 3-257 */ - ELEM_OPT_TLV( 0x36 , GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , NULL ); - /* 30 New QoS Quality of service 9.9.4.12 O TLV 14-18 */ - ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_GM, DE_QOS , " - New QoS" ); - /* 32 Negotiated LLC SAPI LLC service access point identifier 9.9.4.7 O TV 2 */ - ELEM_OPT_TV( 0x32 , GSM_A_PDU_TYPE_GM, DE_LLC_SAPI , " - Negotiated LLC SAPI" ); - /* 8- Radio priority Radio priority 9.9.4.13 O TV 1 */ - ELEM_OPT_TV_SHORT ( 0x80 , GSM_A_PDU_TYPE_GM , DE_RAD_PRIO , NULL ); - /* 34 Packet flow Identifier Packet flow Identifier 9.9.4.8 O TLV 3 */ - ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL ); - /* 5E APN-AMBR APN aggregate maximum bit rate 9.9.4.2 O TLV 4-8 */ - ELEM_OPT_TLV( 0x5E , NAS_PDU_TYPE_ESM, DE_ESM_APN_AGR_MAX_BR , NULL ); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + if(len==0) + return; + + /*This message is sent by the network to inform the UE about events which are relevant for the upper layer... */ + pinfo->link_dir = P2P_DIR_DL; + + /* 5B New EPS QoS EPS quality of service 9.9.4.3 O TLV 3-11 */ + ELEM_OPT_TLV( 0x5B , NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS , " - New EPS QoS" ); + /* 36 TFT Traffic flow template 9.9.4.16 O TLV 3-257 */ + ELEM_OPT_TLV( 0x36 , GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE , NULL ); + /* 30 New QoS Quality of service 9.9.4.12 O TLV 14-18 */ + ELEM_OPT_TLV( 0x30 , GSM_A_PDU_TYPE_GM, DE_QOS , " - New QoS" ); + /* 32 Negotiated LLC SAPI LLC service access point identifier 9.9.4.7 O TV 2 */ + ELEM_OPT_TV( 0x32 , GSM_A_PDU_TYPE_GM, DE_LLC_SAPI , " - Negotiated LLC SAPI" ); + /* 8- Radio priority Radio priority 9.9.4.13 O TV 1 */ + ELEM_OPT_TV_SHORT ( 0x80 , GSM_A_PDU_TYPE_GM , DE_RAD_PRIO , NULL ); + /* 34 Packet flow Identifier Packet flow Identifier 9.9.4.8 O TLV 3 */ + ELEM_OPT_TLV( 0x34 , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL ); + /* 5E APN-AMBR APN aggregate maximum bit rate 9.9.4.2 O TLV 4-8 */ + ELEM_OPT_TLV( 0x5E , NAS_PDU_TYPE_ESM, DE_ESM_APN_AGR_MAX_BR , NULL ); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.18A Notification @@ -4031,17 +4031,17 @@ nas_esm_mod_eps_bearer_ctx_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pin static void nas_esm_notification(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Notification indicator Notification indicator 9.9.4.7A M LV 2 */ - ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_NOTIF_IND, NULL); + /* Notification indicator Notification indicator 9.9.4.7A M LV 2 */ + ELEM_MAND_LV(NAS_PDU_TYPE_ESM, DE_ESM_NOTIF_IND, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4050,22 +4050,22 @@ nas_esm_notification(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu static void nas_esm_pdn_con_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /*This message is sent by the network to the UE to reject establishment of a PDN connection. */ - pinfo->link_dir = P2P_DIR_DL; + /*This message is sent by the network to the UE to reject establishment of a PDN connection. */ + pinfo->link_dir = P2P_DIR_DL; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4074,30 +4074,30 @@ nas_esm_pdn_con_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 static void nas_esm_pdn_con_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /*This message is sent by the UE to the network to initiate establishment of a PDN connection. */ - pinfo->link_dir = P2P_DIR_UL; + /*This message is sent by the UE to the network to initiate establishment of a PDN connection. */ + pinfo->link_dir = P2P_DIR_UL; - /* PDN type PDN type 9.9.4.10 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_esm_pdn_type, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN); + /* PDN type PDN type 9.9.4.10 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_esm_pdn_type, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN); - /* Request type 9.9.4.14 M V 1/2 */ - ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_REQ_TYPE, NULL); + /* Request type 9.9.4.14 M V 1/2 */ + ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_REQ_TYPE, NULL); - /* D- ESM information transfer flag 9.9.4.5 O TV 1 */ - ELEM_OPT_TV_SHORT( 0xd0 , NAS_PDU_TYPE_ESM, DE_ESM_INF_TRF_FLG , NULL ); - /* 28 Access point name 9.9.4.1 O TLV 3-102 */ - ELEM_OPT_TLV( 0x28 , GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME , NULL ); - /* 27 Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* D- ESM information transfer flag 9.9.4.5 O TV 1 */ + ELEM_OPT_TV_SHORT( 0xd0 , NAS_PDU_TYPE_ESM, DE_ESM_INF_TRF_FLG , NULL ); + /* 28 Access point name 9.9.4.1 O TLV 3-102 */ + ELEM_OPT_TLV( 0x28 , GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME , NULL ); + /* 27 Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.20 PDN disconnect reject @@ -4105,22 +4105,22 @@ nas_esm_pdn_con_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 static void nas_esm_pdn_disc_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /*This message is sent by the UE to the network to initiate establishment of a PDN connection. */ - pinfo->link_dir = P2P_DIR_UL; + /*This message is sent by the UE to the network to initiate establishment of a PDN connection. */ + pinfo->link_dir = P2P_DIR_UL; - /* ESM cause ESM cause 9.9.4.4 M V 1 */ - ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + /* ESM cause ESM cause 9.9.4.4 M V 1 */ + ELEM_MAND_V(NAS_PDU_TYPE_ESM, DE_ESM_CAUSE, NULL); + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 8.3.21 PDN disconnect request @@ -4128,132 +4128,132 @@ nas_esm_pdn_disc_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 static void nas_esm_pdn_disc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset, bit_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This message is sent by the network to the UE to reject release of a PDN connection. */ - pinfo->link_dir = P2P_DIR_DL; - - /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ - bit_offset = curr_offset<<3; - proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Linked EPS bearer identity Linked EPS bearer identity 9.9.4.6 M V 1/2 */ - proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); - bit_offset+=4; - /* Fix the lengths */ - curr_len--; - curr_offset++; - if (curr_len == 0) - return; - /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ - ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset, bit_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This message is sent by the network to the UE to reject release of a PDN connection. */ + pinfo->link_dir = P2P_DIR_DL; + + /* Spare half octet Spare half octet 9.9.2.9 M V 1/2 */ + bit_offset = curr_offset<<3; + proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Linked EPS bearer identity Linked EPS bearer identity 9.9.4.6 M V 1/2 */ + proto_tree_add_bits_item(tree, hf_nas_eps_esm_linked_bearer_id, tvb, bit_offset, 4, ENC_BIG_ENDIAN); + bit_offset+=4; + /* Fix the lengths */ + curr_len--; + curr_offset++; + if (curr_len == 0) + return; + /* 27 Protocol configuration options Protocol configuration options 9.9.4.11 O TLV 3-253 */ + ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , NULL ); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } -#define NUM_NAS_MSG_ESM (sizeof(nas_msg_esm_strings)/sizeof(value_string)) +#define NUM_NAS_MSG_ESM (sizeof(nas_msg_esm_strings)/sizeof(value_string)) static gint ett_nas_msg_esm[NUM_NAS_MSG_ESM]; static void (*nas_msg_esm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = { - nas_esm_act_def_eps_bearer_ctx_req, /* Activate default EPS bearer context request*/ - nas_esm_act_def_eps_bearer_ctx_acc, /* Activate default EPS bearer context accept*/ - nas_esm_act_def_eps_bearer_ctx_rej, /* Activate default EPS bearer context reject*/ - nas_esm_act_ded_eps_bearer_ctx_req, /* Activate dedicated EPS bearer context request*/ - nas_esm_act_ded_eps_bearer_ctx_acc, /* Activate dedicated EPS bearer context accept*/ - nas_esm_act_ded_eps_bearer_ctx_rej, /* Activate dedicated EPS bearer context reject*/ - nas_esm_mod_eps_bearer_ctx_req, /* Modify EPS bearer context request*/ - nas_esm_mod_eps_bearer_ctx_acc, /* Modify EPS bearer context accept*/ - nas_esm_mod_eps_bearer_ctx_rej, /* Modify EPS bearer context reject*/ - nas_esm_deact_eps_bearer_ctx_req, /* Deactivate EPS bearer context request*/ - nas_esm_deact_eps_bearer_ctx_acc, /* Deactivate EPS bearer context accept*/ - nas_esm_pdn_con_req, /* 8.3.18 PDN connectivity request */ - nas_esm_pdn_con_rej, /* PDN connectivity reject*/ - nas_esm_pdn_disc_req, /* PDN disconnect request*/ - nas_esm_pdn_disc_rej, /* PDN disconnect reject*/ - nas_esm_bearer_res_all_req, /* Bearer resource allocation request*/ - nas_esm_bearer_res_all_rej, /* Bearer resource allocation reject*/ - nas_esm_bearer_res_mod_req, /* Bearer resource modification request*/ - nas_esm_bearer_res_mod_rej, /* Bearer resource modification reject*/ - nas_esm_inf_req, /* ESM information request, No IE:s*/ - nas_esm_inf_resp, /* ESM information response*/ - nas_esm_notification, /* Notification */ - nas_esm_status, /* ESM status */ - - NULL, /* NONE */ + nas_esm_act_def_eps_bearer_ctx_req, /* Activate default EPS bearer context request*/ + nas_esm_act_def_eps_bearer_ctx_acc, /* Activate default EPS bearer context accept*/ + nas_esm_act_def_eps_bearer_ctx_rej, /* Activate default EPS bearer context reject*/ + nas_esm_act_ded_eps_bearer_ctx_req, /* Activate dedicated EPS bearer context request*/ + nas_esm_act_ded_eps_bearer_ctx_acc, /* Activate dedicated EPS bearer context accept*/ + nas_esm_act_ded_eps_bearer_ctx_rej, /* Activate dedicated EPS bearer context reject*/ + nas_esm_mod_eps_bearer_ctx_req, /* Modify EPS bearer context request*/ + nas_esm_mod_eps_bearer_ctx_acc, /* Modify EPS bearer context accept*/ + nas_esm_mod_eps_bearer_ctx_rej, /* Modify EPS bearer context reject*/ + nas_esm_deact_eps_bearer_ctx_req, /* Deactivate EPS bearer context request*/ + nas_esm_deact_eps_bearer_ctx_acc, /* Deactivate EPS bearer context accept*/ + nas_esm_pdn_con_req, /* 8.3.18 PDN connectivity request */ + nas_esm_pdn_con_rej, /* PDN connectivity reject*/ + nas_esm_pdn_disc_req, /* PDN disconnect request*/ + nas_esm_pdn_disc_rej, /* PDN disconnect reject*/ + nas_esm_bearer_res_all_req, /* Bearer resource allocation request*/ + nas_esm_bearer_res_all_rej, /* Bearer resource allocation reject*/ + nas_esm_bearer_res_mod_req, /* Bearer resource modification request*/ + nas_esm_bearer_res_mod_rej, /* Bearer resource modification reject*/ + nas_esm_inf_req, /* ESM information request, No IE:s*/ + nas_esm_inf_resp, /* ESM information response*/ + nas_esm_notification, /* Notification */ + nas_esm_status, /* ESM status */ + + NULL, /* NONE */ }; static void get_nas_esm_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p) { - gint idx; + gint idx; - *msg_str = match_strval_idx((guint32) (oct & 0xff), nas_msg_esm_strings, &idx); - *ett_tree = ett_nas_msg_esm[idx]; - *hf_idx = hf_nas_eps_msg_esm_type; - *msg_fcn_p = nas_msg_esm_fcn[idx]; + *msg_str = match_strval_idx((guint32) (oct & 0xff), nas_msg_esm_strings, &idx); + *ett_tree = ett_nas_msg_esm[idx]; + *hf_idx = hf_nas_eps_msg_esm_type; + *msg_fcn_p = nas_msg_esm_fcn[idx]; - return; + return; } -#define NUM_NAS_MSG_EMM (sizeof(nas_msg_emm_strings)/sizeof(value_string)) +#define NUM_NAS_MSG_EMM (sizeof(nas_msg_emm_strings)/sizeof(value_string)) static gint ett_nas_msg_emm[NUM_NAS_MSG_EMM]; static void (*nas_msg_emm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = { - nas_emm_attach_req, /* Attach request */ - nas_emm_attach_acc, /* Attach accept */ - nas_emm_attach_comp, /* Attach complete */ - nas_emm_attach_rej, /* Attach reject */ - nas_emm_detach_req, /* Detach request */ - NULL, /* 8.2.10 Detach accept */ - - nas_emm_trac_area_upd_req, /* Tracking area update request */ - nas_emm_trac_area_upd_acc, /* Tracking area update accept */ - NULL, /* Tracking area update complete (No IE's)*/ - nas_emm_trac_area_upd_rej, /* Tracking area update reject */ - - nas_emm_ext_serv_req, /* Extended service request */ - nas_emm_serv_rej, /* Service reject */ - - nas_emm_guti_realloc_cmd, /* GUTI reallocation command */ - NULL, /* GUTI reallocation complete (No IE's) */ - nas_emm_auth_req, /* Authentication request */ - nas_emm_auth_resp, /* Authentication response */ - NULL, /* Authentication reject (No IE:s)*/ - nas_emm_attach_fail, /* Authentication failure */ - nas_emm_id_req, /* Identity request */ - nas_emm_id_res, /* Identity response */ - nas_emm_sec_mode_cmd, /* Security mode command */ - nas_emm_sec_mode_comp, /* Security mode complete */ - nas_emm_sec_mode_rej, /* Security mode reject */ - - nas_emm_emm_status, /* EMM status */ - nas_emm_emm_inf, /* EMM information */ - nas_emm_dl_nas_trans, /* Downlink NAS transport */ - nas_emm_ul_nas_trans, /* Uplink NAS transport */ - nas_emm_cs_serv_not, /* 8.2.9 CS service notification */ - nas_emm_dl_gen_nas_trans, /* Downlink generic NAS transport */ - nas_emm_ul_gen_nas_trans, /* Uplink generic NAS transport */ - NULL, /* NONE */ + nas_emm_attach_req, /* Attach request */ + nas_emm_attach_acc, /* Attach accept */ + nas_emm_attach_comp, /* Attach complete */ + nas_emm_attach_rej, /* Attach reject */ + nas_emm_detach_req, /* Detach request */ + NULL, /* 8.2.10 Detach accept */ + + nas_emm_trac_area_upd_req, /* Tracking area update request */ + nas_emm_trac_area_upd_acc, /* Tracking area update accept */ + NULL, /* Tracking area update complete (No IE's)*/ + nas_emm_trac_area_upd_rej, /* Tracking area update reject */ + + nas_emm_ext_serv_req, /* Extended service request */ + nas_emm_serv_rej, /* Service reject */ + + nas_emm_guti_realloc_cmd, /* GUTI reallocation command */ + NULL, /* GUTI reallocation complete (No IE's) */ + nas_emm_auth_req, /* Authentication request */ + nas_emm_auth_resp, /* Authentication response */ + NULL, /* Authentication reject (No IE:s)*/ + nas_emm_attach_fail, /* Authentication failure */ + nas_emm_id_req, /* Identity request */ + nas_emm_id_res, /* Identity response */ + nas_emm_sec_mode_cmd, /* Security mode command */ + nas_emm_sec_mode_comp, /* Security mode complete */ + nas_emm_sec_mode_rej, /* Security mode reject */ + + nas_emm_emm_status, /* EMM status */ + nas_emm_emm_inf, /* EMM information */ + nas_emm_dl_nas_trans, /* Downlink NAS transport */ + nas_emm_ul_nas_trans, /* Uplink NAS transport */ + nas_emm_cs_serv_not, /* 8.2.9 CS service notification */ + nas_emm_dl_gen_nas_trans, /* Downlink generic NAS transport */ + nas_emm_ul_gen_nas_trans, /* Uplink generic NAS transport */ + NULL, /* NONE */ }; static void get_nas_emm_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p) { - gint idx; + gint idx; - *msg_str = match_strval_idx((guint32) (oct & 0xff), nas_msg_emm_strings, &idx); - *ett_tree = ett_nas_msg_emm[idx]; - *hf_idx = hf_nas_eps_msg_emm_type; - *msg_fcn_p = nas_msg_emm_fcn[idx]; + *msg_str = match_strval_idx((guint32) (oct & 0xff), nas_msg_emm_strings, &idx); + *ett_tree = ett_nas_msg_emm[idx]; + *hf_idx = hf_nas_eps_msg_emm_type; + *msg_fcn_p = nas_msg_emm_fcn[idx]; - return; + return; } /* @@ -4263,63 +4263,63 @@ get_nas_emm_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf static void disect_nas_eps_esm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) { - const gchar *msg_str; - guint32 len; - gint ett_tree; - int hf_idx; - void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len); - guint8 oct; - - len = tvb_length(tvb); - /* - * EPS bearer identity 9.3.2 - */ - proto_tree_add_item(tree, hf_nas_eps_bearer_id, tvb, offset, 1, ENC_BIG_ENDIAN); - /* Protocol discriminator 9.2 */ - proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - - /* Procedure transaction identity 9.4 - * The procedure transaction identity and its use are defined in 3GPP TS 24.007 - */ - proto_tree_add_item(tree, hf_nas_eps_esm_proc_trans_id, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - - /*messge type IE*/ - oct = tvb_get_guint8(tvb,offset); - msg_fcn_p = NULL; - ett_tree = -1; - hf_idx = -1; - msg_str = NULL; - - get_nas_esm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p); - - if(msg_str){ - col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", msg_str); - }else{ - proto_tree_add_text(tree, tvb, offset, 1,"Unknown message 0x%x",oct); - return; - } - - /* - * Add NAS message name - */ - proto_tree_add_item(tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - - - /* - * decode elements - */ - if (msg_fcn_p == NULL) - { - proto_tree_add_text(tree, tvb, offset, len - offset, - "Message Elements"); - } - else - { - (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset); - } + const gchar *msg_str; + guint32 len; + gint ett_tree; + int hf_idx; + void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len); + guint8 oct; + + len = tvb_length(tvb); + /* + * EPS bearer identity 9.3.2 + */ + proto_tree_add_item(tree, hf_nas_eps_bearer_id, tvb, offset, 1, ENC_BIG_ENDIAN); + /* Protocol discriminator 9.2 */ + proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* Procedure transaction identity 9.4 + * The procedure transaction identity and its use are defined in 3GPP TS 24.007 + */ + proto_tree_add_item(tree, hf_nas_eps_esm_proc_trans_id, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /*messge type IE*/ + oct = tvb_get_guint8(tvb,offset); + msg_fcn_p = NULL; + ett_tree = -1; + hf_idx = -1; + msg_str = NULL; + + get_nas_esm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p); + + if(msg_str){ + col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", msg_str); + }else{ + proto_tree_add_text(tree, tvb, offset, 1,"Unknown message 0x%x",oct); + return; + } + + /* + * Add NAS message name + */ + proto_tree_add_item(tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + + /* + * decode elements + */ + if (msg_fcn_p == NULL) + { + proto_tree_add_text(tree, tvb, offset, len - offset, + "Message Elements"); + } + else + { + (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset); + } } /* @@ -4328,90 +4328,90 @@ disect_nas_eps_esm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int static void dissect_nas_eps_emm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean second_header) { - const gchar *msg_str; - guint32 len; - gint ett_tree; - int hf_idx; - void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len); - guint8 security_header_type, oct; - - len = tvb_length(tvb); - - /* 9.3.1 Security header type */ - if(second_header){ - security_header_type = tvb_get_guint8(tvb,offset)>>4; - proto_tree_add_item(tree, hf_nas_eps_security_header_type, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - if (security_header_type !=0){ - /* Message authentication code */ - proto_tree_add_item(tree, hf_nas_eps_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - /* Sequence number */ - proto_tree_add_item(tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - if ((security_header_type==2)||(security_header_type==4)) - /* Integrity protected and ciphered = 2, Integrity protected and ciphered with new EPS security context = 4 */ - return; - proto_tree_add_item(tree, hf_nas_eps_security_header_type, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - } - } - /* Messge type IE*/ - oct = tvb_get_guint8(tvb,offset); - msg_fcn_p = NULL; - ett_tree = -1; - hf_idx = -1; - msg_str = NULL; - - get_nas_emm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p); - - if(msg_str){ - col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", msg_str); - }else{ - proto_tree_add_text(tree, tvb, offset, 1,"Unknown message 0x%x",oct); - return; - } - - /* - * Add NAS message name - */ - proto_tree_add_item(tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - - - /* - * decode elements - */ - if (msg_fcn_p == NULL) - { - proto_tree_add_text(tree, tvb, offset, len - offset, - "Message Elements"); - } - else - { - (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset); - } + const gchar *msg_str; + guint32 len; + gint ett_tree; + int hf_idx; + void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len); + guint8 security_header_type, oct; + + len = tvb_length(tvb); + + /* 9.3.1 Security header type */ + if(second_header){ + security_header_type = tvb_get_guint8(tvb,offset)>>4; + proto_tree_add_item(tree, hf_nas_eps_security_header_type, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + if (security_header_type !=0){ + /* Message authentication code */ + proto_tree_add_item(tree, hf_nas_eps_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + /* Sequence number */ + proto_tree_add_item(tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + if ((security_header_type==2)||(security_header_type==4)) + /* Integrity protected and ciphered = 2, Integrity protected and ciphered with new EPS security context = 4 */ + return; + proto_tree_add_item(tree, hf_nas_eps_security_header_type, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + } + } + /* Messge type IE*/ + oct = tvb_get_guint8(tvb,offset); + msg_fcn_p = NULL; + ett_tree = -1; + hf_idx = -1; + msg_str = NULL; + + get_nas_emm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p); + + if(msg_str){ + col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", msg_str); + }else{ + proto_tree_add_text(tree, tvb, offset, 1,"Unknown message 0x%x",oct); + return; + } + + /* + * Add NAS message name + */ + proto_tree_add_item(tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + + /* + * decode elements + */ + if (msg_fcn_p == NULL) + { + proto_tree_add_text(tree, tvb, offset, len - offset, + "Message Elements"); + } + else + { + (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset); + } } /* TS 24.301 8.2.1 - * 9 General message format and information elements coding - * 9.1 Overview + * 9 General message format and information elements coding + * 9.1 Overview * Within the protocols defined in the present document, every message, except the SERVICE REQUEST message, * is a standard L3 message as defined in 3GPP TS 24.007 [12]. This means that the message consists of the following parts: - * 1) if the message is a plain NAS message: - * a) protocol discriminator; - * b) EPS bearer identity or security header type; - * c) procedure transaction identity; - * d) message type; - * e) other information elements, as required. - * 2) if the message is a security protected NAS message: - * a) protocol discriminator; - * b) security header type; - * c) message authentication code; - * d) sequence number; - * e) plain NAS message, as defined in item 1. + * 1) if the message is a plain NAS message: + * a) protocol discriminator; + * b) EPS bearer identity or security header type; + * c) procedure transaction identity; + * d) message type; + * e) other information elements, as required. + * 2) if the message is a security protected NAS message: + * a) protocol discriminator; + * b) security header type; + * c) message authentication code; + * d) sequence number; + * e) plain NAS message, as defined in item 1. * * The EPS bearer identity and the procedure transaction identity are only used in messages * with protocol discriminator EPS session management. Octet 1a with the procedure transaction @@ -4421,932 +4421,930 @@ dissect_nas_eps_emm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int /* * All messages recived here will have the security header: * Figure 9.1.2: General message organization example for a security protected NAS message - * 9.3.1 Bits 5 to 8 of the first octet of every EPS Mobility Management (EMM) - * message contain the Security header type IE. - * 4.4.4.2 All ESM messages are integrity protected. + * 9.3.1 Bits 5 to 8 of the first octet of every EPS Mobility Management (EMM) + * message contain the Security header type IE. + * 4.4.4.2 All ESM messages are integrity protected. */ static void dissect_nas_eps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - proto_item *item; - proto_tree *nas_eps_tree; - guint8 pd, security_header_type; - int offset = 0; - guint32 len; - guint32 msg_auth_code; - - /* Save pinfo */ - gpinfo = pinfo; - len = tvb_length(tvb); - - /* make entry in the Protocol column on summary display */ - col_append_str(pinfo->cinfo, COL_PROTOCOL, "/NAS-EPS"); - - item = proto_tree_add_item(tree, proto_nas_eps, tvb, 0, -1, ENC_BIG_ENDIAN); - nas_eps_tree = proto_item_add_subtree(item, ett_nas_eps); - - /* Security header type Security header type 9.3.1 M V 1/2 */ - security_header_type = tvb_get_guint8(tvb,offset)>>4; - proto_tree_add_item(nas_eps_tree, hf_nas_eps_security_header_type, tvb, 0, 1, ENC_BIG_ENDIAN); - /* Protocol discriminator Protocol discriminator 9.2 M V 1/2 */ - proto_tree_add_item(nas_eps_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN); - pd = tvb_get_guint8(tvb,offset)&0x0f; - offset++; - /* Message authentication code Message authentication code 9.5 M V 4 */ - if (security_header_type == 0){ - if(pd==7){ - /* Plain EPS mobility management messages. */ - dissect_nas_eps_emm_msg(tvb, pinfo, nas_eps_tree, offset, ENC_BIG_ENDIAN); - return; - }else{ - proto_tree_add_text(tree, tvb, offset, len, "All ESM messages should be integrity protected"); - return; - } - }else{ - /* SERVICE REQUEST (12) is not a plain NAS message treat separately */ - if (security_header_type == 12){ - col_append_fstr(pinfo->cinfo, COL_INFO, " SERVICE REQUEST "); - nas_emm_service_req(tvb, nas_eps_tree, pinfo, offset, len-offset); - return; - } - /* Message authentication code */ - proto_tree_add_item(nas_eps_tree, hf_nas_eps_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN); - msg_auth_code = tvb_get_ntohl(tvb, offset); - offset+=4; - if ((security_header_type==2)||(security_header_type==4)){ - /* Possible ciphered message */ - if(msg_auth_code!=0){ - /* Sequence number Sequence number 9.6 M V 1 */ - proto_tree_add_item(nas_eps_tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - /* Integrity protected and ciphered = 2, Integrity protected and ciphered with new EPS security context = 4 */ - pd = tvb_get_guint8(tvb,offset)&0x0f; - /* If pd is in plaintext this message probably isn't ciphered */ - if((pd!=7)&&(pd!=2)&&(pd!=15)){ - proto_tree_add_text(nas_eps_tree, tvb, offset, len-6,"Ciphered message"); - return; - } - }else{ - /* msg_auth_code == 0, probably not ciphered */ - /* Sequence number Sequence number 9.6 M V 1 */ - proto_tree_add_item(nas_eps_tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - } - }else{ - /* Sequence number Sequence number 9.6 M V 1 */ - proto_tree_add_item(nas_eps_tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - } - } - /* NAS message NAS message 9.7 M V 1-n */ - - pd = tvb_get_guint8(tvb,offset)&0x0f; - switch (pd){ - case 2: - /* EPS session management messages. - * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values - */ - disect_nas_eps_esm_msg(tvb, pinfo, nas_eps_tree, offset); - break; - case 7: - /* EPS mobility management messages. - * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values - */ - dissect_nas_eps_emm_msg(tvb, pinfo, nas_eps_tree, offset, TRUE); - break; - case 15: - /* Special conformance testing functions for User Equipment messages. - * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values - */ - if (gsm_a_dtap_handle){ - tvbuff_t *new_tvb = tvb_new_subset(tvb, offset, -1, -1); - call_dissector(gsm_a_dtap_handle, new_tvb, pinfo, nas_eps_tree); - break; - } /* else fall through default */ - default: - proto_tree_add_text(nas_eps_tree, tvb, offset, -1, "Not a NAS EPS PD %u(%s)",pd,val_to_str(pd, protocol_discriminator_vals,"unknown")); - break; - } + proto_item *item; + proto_tree *nas_eps_tree; + guint8 pd, security_header_type; + int offset = 0; + guint32 len; + guint32 msg_auth_code; + + /* Save pinfo */ + gpinfo = pinfo; + len = tvb_length(tvb); + + /* make entry in the Protocol column on summary display */ + col_append_str(pinfo->cinfo, COL_PROTOCOL, "/NAS-EPS"); + + item = proto_tree_add_item(tree, proto_nas_eps, tvb, 0, -1, ENC_BIG_ENDIAN); + nas_eps_tree = proto_item_add_subtree(item, ett_nas_eps); + + /* Security header type Security header type 9.3.1 M V 1/2 */ + security_header_type = tvb_get_guint8(tvb,offset)>>4; + proto_tree_add_item(nas_eps_tree, hf_nas_eps_security_header_type, tvb, 0, 1, ENC_BIG_ENDIAN); + /* Protocol discriminator Protocol discriminator 9.2 M V 1/2 */ + proto_tree_add_item(nas_eps_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN); + pd = tvb_get_guint8(tvb,offset)&0x0f; + offset++; + /* Message authentication code Message authentication code 9.5 M V 4 */ + if (security_header_type == 0){ + if(pd==7){ + /* Plain EPS mobility management messages. */ + dissect_nas_eps_emm_msg(tvb, pinfo, nas_eps_tree, offset, ENC_BIG_ENDIAN); + return; + }else{ + proto_tree_add_text(tree, tvb, offset, len, "All ESM messages should be integrity protected"); + return; + } + }else{ + /* SERVICE REQUEST (12) is not a plain NAS message treat separately */ + if (security_header_type == 12){ + col_append_fstr(pinfo->cinfo, COL_INFO, " SERVICE REQUEST "); + nas_emm_service_req(tvb, nas_eps_tree, pinfo, offset, len-offset); + return; + } + /* Message authentication code */ + proto_tree_add_item(nas_eps_tree, hf_nas_eps_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN); + msg_auth_code = tvb_get_ntohl(tvb, offset); + offset+=4; + if ((security_header_type==2)||(security_header_type==4)){ + /* Possible ciphered message */ + if(msg_auth_code!=0){ + /* Sequence number Sequence number 9.6 M V 1 */ + proto_tree_add_item(nas_eps_tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + /* Integrity protected and ciphered = 2, Integrity protected and ciphered with new EPS security context = 4 */ + pd = tvb_get_guint8(tvb,offset)&0x0f; + /* If pd is in plaintext this message probably isn't ciphered */ + if((pd!=7)&&(pd!=2)&&(pd!=15)){ + proto_tree_add_text(nas_eps_tree, tvb, offset, len-6,"Ciphered message"); + return; + } + }else{ + /* msg_auth_code == 0, probably not ciphered */ + /* Sequence number Sequence number 9.6 M V 1 */ + proto_tree_add_item(nas_eps_tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + } + }else{ + /* Sequence number Sequence number 9.6 M V 1 */ + proto_tree_add_item(nas_eps_tree, hf_nas_eps_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + } + } + /* NAS message NAS message 9.7 M V 1-n */ + + pd = tvb_get_guint8(tvb,offset)&0x0f; + switch (pd){ + case 2: + /* EPS session management messages. + * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values + */ + disect_nas_eps_esm_msg(tvb, pinfo, nas_eps_tree, offset); + break; + case 7: + /* EPS mobility management messages. + * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values + */ + dissect_nas_eps_emm_msg(tvb, pinfo, nas_eps_tree, offset, TRUE); + break; + case 15: + /* Special conformance testing functions for User Equipment messages. + * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values + */ + if (gsm_a_dtap_handle){ + tvbuff_t *new_tvb = tvb_new_subset(tvb, offset, -1, -1); + call_dissector(gsm_a_dtap_handle, new_tvb, pinfo, nas_eps_tree); + break; + } /* else fall through default */ + default: + proto_tree_add_text(nas_eps_tree, tvb, offset, -1, "Not a NAS EPS PD %u(%s)",pd,val_to_str(pd, protocol_discriminator_vals,"unknown")); + break; + } } static void dissect_nas_eps_plain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - proto_item *item; - proto_tree *nas_eps_tree; - guint8 pd; - int offset = 0; - guint32 len; - - /* Save pinfo */ - gpinfo = pinfo; - len = tvb_length(tvb); - - /* make entry in the Protocol column on summary display */ - col_append_str(pinfo->cinfo, COL_PROTOCOL, "/NAS-EPS"); - - item = proto_tree_add_item(tree, proto_nas_eps, tvb, 0, -1, ENC_BIG_ENDIAN); - nas_eps_tree = proto_item_add_subtree(item, ett_nas_eps); - - pd = tvb_get_guint8(tvb,offset)&0x0f; - switch (pd){ - case 2: - /* EPS session management messages. - * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values - */ - disect_nas_eps_esm_msg(tvb, pinfo, nas_eps_tree, offset); - break; - case 7: - /* EPS mobility management messages. - * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values - */ - dissect_nas_eps_emm_msg(tvb, pinfo, nas_eps_tree, offset, TRUE); - break; - case 15: - /* Special conformance testing functions for User Equipment messages. - * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values - */ - if (gsm_a_dtap_handle){ - tvbuff_t *new_tvb = tvb_new_subset(tvb, offset, -1, -1); - call_dissector(gsm_a_dtap_handle, new_tvb,pinfo, nas_eps_tree); - break; - } /* else fall through default */ - default: - proto_tree_add_text(nas_eps_tree, tvb, offset, -1, "Not a NAS EPS PD %u(%s)",pd,val_to_str(pd, protocol_discriminator_vals,"unknown")); - break; - } + proto_item *item; + proto_tree *nas_eps_tree; + guint8 pd; + int offset = 0; + + /* Save pinfo */ + gpinfo = pinfo; + + /* make entry in the Protocol column on summary display */ + col_append_str(pinfo->cinfo, COL_PROTOCOL, "/NAS-EPS"); + + item = proto_tree_add_item(tree, proto_nas_eps, tvb, 0, -1, ENC_BIG_ENDIAN); + nas_eps_tree = proto_item_add_subtree(item, ett_nas_eps); + + pd = tvb_get_guint8(tvb,offset)&0x0f; + switch (pd){ + case 2: + /* EPS session management messages. + * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values + */ + disect_nas_eps_esm_msg(tvb, pinfo, nas_eps_tree, offset); + break; + case 7: + /* EPS mobility management messages. + * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values + */ + dissect_nas_eps_emm_msg(tvb, pinfo, nas_eps_tree, offset, TRUE); + break; + case 15: + /* Special conformance testing functions for User Equipment messages. + * Ref 3GPP TS 24.007 version 8.0.0 Release 8, Table 11.2: Protocol discriminator values + */ + if (gsm_a_dtap_handle){ + tvbuff_t *new_tvb = tvb_new_subset(tvb, offset, -1, -1); + call_dissector(gsm_a_dtap_handle, new_tvb,pinfo, nas_eps_tree); + break; + } /* else fall through default */ + default: + proto_tree_add_text(nas_eps_tree, tvb, offset, -1, "Not a NAS EPS PD %u(%s)",pd,val_to_str(pd, protocol_discriminator_vals,"unknown")); + break; + } } void proto_register_nas_eps(void) { - guint i; - guint last_offset; + guint i; + guint last_offset; - /* List of fields */ + /* List of fields */ static hf_register_info hf[] = { - { &hf_nas_eps_msg_emm_type, - { "NAS EPS Mobility Management Message Type", "nas_eps.nas_msg_emm_type", - FT_UINT8, BASE_HEX, VALS(nas_msg_emm_strings), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_common_elem_id, - { "Element ID", "nas_eps.common.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_elem_id, - { "Element ID", "nas_eps.emm.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL } - }, - { &hf_nas_eps_bearer_id, - { "EPS bearer identity", "nas_eps.bearer_id", - FT_UINT8, BASE_HEX, NULL, 0xf0, - NULL, HFILL } - }, - { &hf_nas_eps_spare_bits, - { "Spare bit(s)", "nas_eps.spare_bits", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_security_header_type, - { "Security header type","nas_eps.security_header_type", - FT_UINT8,BASE_DEC|BASE_EXT_STRING, &security_header_type_vals_ext, 0xf0, - NULL, HFILL } - }, - { &hf_nas_eps_msg_auth_code, - { "Message authentication code","nas_eps.msg_auth_code", - FT_UINT32,BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_seq_no, - { "Sequence number","nas_eps.seq_no", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_seq_no_short, - { "Sequence number (short)","nas_eps.seq_no_short", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi0, - { "EBI(0) spare","nas_eps.emm.ebi0", - FT_BOOLEAN, 8, NULL, 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi1, - { "EBI(1) spare","nas_eps.emm.ebi1", - FT_BOOLEAN, 8, NULL, 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi2, - { "EBI(2) spare","nas_eps.emm.ebi2", - FT_BOOLEAN, 8, NULL, 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi3, - { "EBI(3) spare","nas_eps.emm.ebi3", - FT_BOOLEAN, 8, NULL, 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi4, - { "EBI(4) spare","nas_eps.emm.ebi4", - FT_BOOLEAN, 8, NULL, 0x10, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi5, - { "EBI(5)","nas_eps.emm.ebi5", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x20, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi6, - { "EBI(6)","nas_eps.emm.ebi6", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x40, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi7, - { "EBI(7)","nas_eps.emm.ebi7", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x80, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi8, - { "EBI(8)","nas_eps.emm.ebi8", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi9, - { "EBI(9)","nas_eps.emm.ebi9", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi10, - { "EBI(10)","nas_eps.emm.ebi10", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi11, - { "EBI(11)","nas_eps.emm.ebi11", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi12, - { "EBI(12)","nas_eps.emm.ebi12", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x10, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi13, - { "EBI(13)","nas_eps.emm.ebi13", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x20, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi14, - { "EBI(14)","nas_eps.emm.ebi14", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x40, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ebi15, - { "EBI(15)","nas_eps.emm.ebi15", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x80, - NULL, HFILL } - }, - { &hf_nas_eps_emm_dl_nas_cnt, - { "DL NAS COUNT value","nas_eps.emm.dl_nas_cnt", - FT_UINT8,BASE_DEC, NULL, 0x0f, - NULL, HFILL } - }, - {&hf_nas_eps_emm_nonce_mme, - { "NonceMME","nas_eps.emm.nonce_mme", - FT_UINT32,BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - {&hf_nas_eps_emm_nonce, - { "Nonce","nas_eps.emm.nonce", - FT_UINT32,BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_paging_id, - { "Paging identity value","nas_eps.emm.paging_id", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_paging_id_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eps_att_type, - { "EPS attach type","nas_eps.emm.eps_att_type", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_att_type_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_cs_lcs_type, - { "CS-LCS","nas_eps.emm.cs_lcs", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_cs_lcs_vals), 0x0, - "Location services indicator in CS", HFILL } - }, - { &hf_nas_eps_emm_epc_lcs_type, - { "EPC-LCS","nas_eps.emm.epc_lcs", - FT_BOOLEAN ,BASE_NONE, TFS(&nas_eps_emm_epc_lcs_value), 0x0, - "Location services indicator in EPC", HFILL } - }, - { &hf_nas_eps_emm_emc_bs_type, - { "EMC BS","nas_eps.emm.emc_bs", - FT_BOOLEAN, BASE_NONE, TFS(&nas_eps_emm_emc_bs_value), 0x0, - "Emergency bearer services indicator", HFILL } - }, - { &hf_nas_eps_emm_ims_vops_type, - { "IMS VoPS","nas_eps.emm.ims_vops", - FT_BOOLEAN, BASE_NONE, TFS(&nas_eps_emm_ims_vops_value), 0x0, - "IMS voice over PS session indicator", HFILL } - }, - { &hf_nas_eps_tsc, - { "Type of security context flag (TSC)","nas_eps.emm.tsc", - FT_UINT8,BASE_DEC, VALS(nas_eps_tsc_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_nas_key_set_id, - { "NAS key set identifier","nas_eps.emm.nas_key_set_id", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_NAS_key_set_identifier_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_odd_even, - { "odd/even indic","nas_eps.emm.odd_even", - FT_UINT8,BASE_DEC, NULL, 0x8, - NULL, HFILL } - }, - { &hf_nas_eps_emm_type_of_id, - { "Type of identity","nas_eps.emm.type_of_id", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_type_of_id_vals), 0x07, - NULL, HFILL } - }, - { &hf_nas_eps_emm_mme_grp_id, - { "MME Group ID","nas_eps.emm.mme_grp_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_imsi, + { &hf_nas_eps_msg_emm_type, + { "NAS EPS Mobility Management Message Type", "nas_eps.nas_msg_emm_type", + FT_UINT8, BASE_HEX, VALS(nas_msg_emm_strings), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_common_elem_id, + { "Element ID", "nas_eps.common.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_elem_id, + { "Element ID", "nas_eps.emm.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_nas_eps_bearer_id, + { "EPS bearer identity", "nas_eps.bearer_id", + FT_UINT8, BASE_HEX, NULL, 0xf0, + NULL, HFILL } + }, + { &hf_nas_eps_spare_bits, + { "Spare bit(s)", "nas_eps.spare_bits", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_security_header_type, + { "Security header type","nas_eps.security_header_type", + FT_UINT8,BASE_DEC|BASE_EXT_STRING, &security_header_type_vals_ext, 0xf0, + NULL, HFILL } + }, + { &hf_nas_eps_msg_auth_code, + { "Message authentication code","nas_eps.msg_auth_code", + FT_UINT32,BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_seq_no, + { "Sequence number","nas_eps.seq_no", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_seq_no_short, + { "Sequence number (short)","nas_eps.seq_no_short", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi0, + { "EBI(0) spare","nas_eps.emm.ebi0", + FT_BOOLEAN, 8, NULL, 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi1, + { "EBI(1) spare","nas_eps.emm.ebi1", + FT_BOOLEAN, 8, NULL, 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi2, + { "EBI(2) spare","nas_eps.emm.ebi2", + FT_BOOLEAN, 8, NULL, 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi3, + { "EBI(3) spare","nas_eps.emm.ebi3", + FT_BOOLEAN, 8, NULL, 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi4, + { "EBI(4) spare","nas_eps.emm.ebi4", + FT_BOOLEAN, 8, NULL, 0x10, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi5, + { "EBI(5)","nas_eps.emm.ebi5", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x20, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi6, + { "EBI(6)","nas_eps.emm.ebi6", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x40, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi7, + { "EBI(7)","nas_eps.emm.ebi7", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x80, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi8, + { "EBI(8)","nas_eps.emm.ebi8", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi9, + { "EBI(9)","nas_eps.emm.ebi9", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi10, + { "EBI(10)","nas_eps.emm.ebi10", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi11, + { "EBI(11)","nas_eps.emm.ebi11", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi12, + { "EBI(12)","nas_eps.emm.ebi12", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x10, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi13, + { "EBI(13)","nas_eps.emm.ebi13", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x20, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi14, + { "EBI(14)","nas_eps.emm.ebi14", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x40, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ebi15, + { "EBI(15)","nas_eps.emm.ebi15", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ebi_vals), 0x80, + NULL, HFILL } + }, + { &hf_nas_eps_emm_dl_nas_cnt, + { "DL NAS COUNT value","nas_eps.emm.dl_nas_cnt", + FT_UINT8,BASE_DEC, NULL, 0x0f, + NULL, HFILL } + }, + {&hf_nas_eps_emm_nonce_mme, + { "NonceMME","nas_eps.emm.nonce_mme", + FT_UINT32,BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + {&hf_nas_eps_emm_nonce, + { "Nonce","nas_eps.emm.nonce", + FT_UINT32,BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_paging_id, + { "Paging identity value","nas_eps.emm.paging_id", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_paging_id_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eps_att_type, + { "EPS attach type","nas_eps.emm.eps_att_type", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_att_type_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_cs_lcs_type, + { "CS-LCS","nas_eps.emm.cs_lcs", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_cs_lcs_vals), 0x0, + "Location services indicator in CS", HFILL } + }, + { &hf_nas_eps_emm_epc_lcs_type, + { "EPC-LCS","nas_eps.emm.epc_lcs", + FT_BOOLEAN ,BASE_NONE, TFS(&nas_eps_emm_epc_lcs_value), 0x0, + "Location services indicator in EPC", HFILL } + }, + { &hf_nas_eps_emm_emc_bs_type, + { "EMC BS","nas_eps.emm.emc_bs", + FT_BOOLEAN, BASE_NONE, TFS(&nas_eps_emm_emc_bs_value), 0x0, + "Emergency bearer services indicator", HFILL } + }, + { &hf_nas_eps_emm_ims_vops_type, + { "IMS VoPS","nas_eps.emm.ims_vops", + FT_BOOLEAN, BASE_NONE, TFS(&nas_eps_emm_ims_vops_value), 0x0, + "IMS voice over PS session indicator", HFILL } + }, + { &hf_nas_eps_tsc, + { "Type of security context flag (TSC)","nas_eps.emm.tsc", + FT_UINT8,BASE_DEC, VALS(nas_eps_tsc_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_nas_key_set_id, + { "NAS key set identifier","nas_eps.emm.nas_key_set_id", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_NAS_key_set_identifier_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_odd_even, + { "odd/even indic","nas_eps.emm.odd_even", + FT_UINT8,BASE_DEC, NULL, 0x8, + NULL, HFILL } + }, + { &hf_nas_eps_emm_type_of_id, + { "Type of identity","nas_eps.emm.type_of_id", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_type_of_id_vals), 0x07, + NULL, HFILL } + }, + { &hf_nas_eps_emm_mme_grp_id, + { "MME Group ID","nas_eps.emm.mme_grp_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_imsi, { "IMSI", "nas_eps.emm.imsi", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } - }, - { &hf_nas_eps_emm_imei, + }, + { &hf_nas_eps_emm_imei, { "IMEI", "nas_eps.emm.imei", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } - }, - { &hf_nas_eps_emm_mme_code, - { "MME Code","nas_eps.emm.mme_code", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_m_tmsi, - { "M-TMSI","nas_eps.emm.m_tmsi", - FT_UINT32, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_msg_cont, - { "ESM message container contents","nas_eps.emm.esm_msg_cont", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_imeisv_req, - { "IMEISV request","nas_eps.emm.imeisv_req", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_imeisv_req_vals), 0x07, - NULL, HFILL } - }, - { &hf_nas_eps_emm_toi, - { "Type of integrity protection algorithm","nas_eps.emm.toi", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_toi_vals), 0x07, - NULL, HFILL } - }, - { &hf_nas_eps_emm_toc, - { "Type of ciphering algorithm","nas_eps.emm.toc", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_toc_vals), 0x70, - NULL, HFILL } - }, - { &hf_nas_eps_emm_EPS_attach_result, - { "Attach result","nas_eps.emm.EPS_attach_result", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_EPS_attach_result_values), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_spare_half_octet, - { "Spare half octet","nas_eps.emm.EPS_attach_result", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_add_upd_res, - { "AURV","nas_eps.emm.add_upd_res", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_add_upd_res_vals), 0x0, - "Additional update result value", HFILL } - }, - { &hf_nas_eps_emm_add_upd_type, - { "AUTV","nas_eps.emm.add_upd_type", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_add_upd_type_vals), 0x0, - "Additional update type value", HFILL } - }, - { &hf_nas_eps_emm_res, - { "RES","nas_eps.emm.res", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_csfb_resp, - { "CSFB response","nas_eps.emm.csfb_resp", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_csfb_resp_vals), 0x03, - NULL, HFILL } - }, - { &hf_nas_eps_emm_cause, - { "Cause","nas_eps.emm.cause", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_cause_values), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_id_type2, - { "Identity type 2","nas_eps.emm.id_type2", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_id_type2_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_short_mac, - { "Message authentication code (short)","nas_eps.emm.short_mac", - FT_UINT16, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_tai_tol, - { "Type of list","nas_eps.emm.tai_tol", - FT_UINT8, BASE_DEC, VALS(nas_eps_emm_tai_tol_vals), 0x60, - NULL, HFILL } - }, - { &hf_nas_eps_emm_tai_n_elem, - { "Number of elements","nas_eps.emm.tai_n_elem", - FT_UINT8, BASE_DEC, NULL, 0x1f, - NULL, HFILL } - }, - { &hf_nas_eps_emm_tai_tac, - { "Tracking area code(TAC)","nas_eps.emm.tai_tac", - FT_UINT16, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eea0, - { "EEA0","nas_eps.emm.eea0", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x80, - NULL, HFILL } - }, - { &hf_nas_eps_emm_128eea1, - { "128-EEA1","nas_eps.emm.128eea1", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, - NULL, HFILL } - }, - { &hf_nas_eps_emm_128eea2, - { "128-EEA2","nas_eps.emm.128eea2", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eea3, - { "EEA3","nas_eps.emm.eea3", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eea4, - { "EEA4","nas_eps.emm.eea4", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eea5, - { "EEA5","nas_eps.emm.eea5", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eea6, - { "EEA6","nas_eps.emm.eea6", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eea7, - { "EEA7","nas_eps.emm.eea7", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eia0, - { "EIA0","nas_eps.emm.eia0", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x80, - NULL, HFILL } - }, - { &hf_nas_eps_emm_128eia1, - { "128-EIA1","nas_eps.emm.128eia1", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, - NULL, HFILL } - }, - { &hf_nas_eps_emm_128eia2, - { "128-EIA2","nas_eps.emm.128eia2", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eia3, - { "EIA3","nas_eps.emm.eia3", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eia4, - { "EIA4","nas_eps.emm.eia4", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eia5, - { "EIA5","nas_eps.emm.eia5", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eia6, - { "EIA6","nas_eps.emm.eia6", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_eia7, - { "EIA7","nas_eps.emm.eia7", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, - NULL, HFILL } - }, - - - { &hf_nas_eps_emm_uea0, - { "UEA0","nas_eps.emm.uea0", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x80, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uea1, - { "UEA1","nas_eps.emm.uea1", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uea2, - { "UEA2","nas_eps.emm.uea2", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uea3, - { "UEA3","nas_eps.emm.uea3", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uea4, - { "UEA4","nas_eps.emm.uea4", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uea5, - { "UEA5","nas_eps.emm.uea5", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uea6, - { "UEA6","nas_eps.emm.uea6", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uea7, - { "UEA7","nas_eps.emm.uea7", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ucs2_supp, - { "UCS2 support (UCS2)","nas_eps.emm.emm_ucs2_supp", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_ucs2_supp_flg_value), 0x80, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uia1, - { "UMTS integrity algorithm UIA1","nas_eps.emm.uia1", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uia2, - { "UMTS integrity algorithm UIA2","nas_eps.emm.uia2", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uia3, - { "UMTS integrity algorithm UIA3","nas_eps.emm.uia3", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uia4, - { "UMTS integrity algorithm UIA4","nas_eps.emm.uia4", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uia5, - { "UMTS integrity algorithm UIA5","nas_eps.emm.uia5", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uia6, - { "UMTS integrity algorithm UIA6","nas_eps.emm.uia6", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_uia7, - { "UMTS integrity algorithm UIA7","nas_eps.emm.uia7", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gea1, - { "GPRS encryption algorithm GEA1","nas_eps.emm.gea1", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gea2, - { "GPRS encryption algorithm GEA2","nas_eps.emm.gea2", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gea3, - { "GPRS encryption algorithm GEA3","nas_eps.emm.gea3", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gea4, - { "GPRS encryption algorithm GEA4","nas_eps.emm.gea4", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gea5, - { "GPRS encryption algorithm GEA5","nas_eps.emm.gea5", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gea6, - { "GPRS encryption algorithm GEA6","nas_eps.emm.gea6", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gea7, - { "GPRS encryption algorithm GEA7","nas_eps.emm.gea7", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_emm_lpp_cap, - { "LPP capability","nas_eps.emm.lpp_cap", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_lpp_cap_flg), 0x08, - NULL, HFILL } - }, - { &hf_nas_eps_emm_lcs_cap, - { "LCS capability","nas_eps.emm.lcs_cap", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_lcs_cap_flg), 0x04, - NULL, HFILL } - }, - { &hf_nas_eps_emm_1xsrvcc_cap, - { "1xSRVCC capability","nas_eps.emm.1xsrvcc_cap", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_1xsrvcc_cap_flg), 0x02, - NULL, HFILL } - }, - { &hf_nas_eps_emm_nf_cap, - { "NF capability","nas_eps.emm.nf_cap", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_nf_cap_flg), 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg, - { "1xSRVCC capability","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, - NULL, HFILL } - }, - { &hf_nas_eps_emm_ss_code, - { "SS Code","nas_eps.emm.eps_update_result_value", - FT_UINT8,BASE_DEC, VALS(ssCode_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_lcs_ind, - { "LCS indicator","nas_eps.emm.emm_lcs_ind", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_lcs_ind_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_gen_msg_cont_type, - { "Container type","nas_eps.emm.gen_msg_cont_type", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_gen_msg_cont_type_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_apn_ambr_ul, - { "APN-AMBR for uplink","nas_eps.emm.apn_ambr_ul", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_apn_ambr_dl, - { "APN-AMBR for downlink","nas_eps.emm.apn_ambr_dl", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_apn_ambr_ul_ext, - { "APN-AMBR for uplink(Extended)","nas_eps.emm.apn_ambr_ul_ext", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_apn_ambr_dl_ext, - { "APN-AMBR for downlink(Extended)","nas_eps.emm.apn_ambr_dl_ext", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_apn_ambr_ul_ext2, - { "APN-AMBR for uplink(Extended-2)","nas_eps.emm.apn_ambr_ul_ext2", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_apn_ambr_dl_ext2, - { "APN-AMBR for downlink(Extended-2)","nas_eps.emm.apn_ambr_dl_ext2", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_switch_off, - { "Switch off","nas_eps.emm.switch_off", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_switch_off_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_detach_type_UL, - { "Detach Type","nas_eps.emm.detach_type_ul", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_type_of_dtatch_UL_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_emm_detach_type_DL, - { "Detach Type","nas_eps.emm.detach_type_dl", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_type_of_dtatch_DL_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_qci, - { "Quality of Service Class Identifier (QCI)","nas_eps.emm.qci", - FT_UINT8,BASE_DEC, VALS(nas_eps_qci_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_mbr_ul, - { "Maximum bit rate for uplink","nas_eps.emm.mbr_ul", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_mbr_dl, - { "Maximum bit rate for downlink","nas_eps.emm.mbr_dl", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_gbr_ul, - { "Guaranteed bit rate for uplink","nas_eps.emm.gbr_ul", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_gbr_dl, - { "Guaranteed bit rate for downlink","nas_eps.emm.gbr_dl", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_embr_ul, - { "Maximum bit rate for uplink(ext)","nas_eps.emm.embr_ul", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_embr_dl, - { "Maximum bit rate for downlink(ext)","nas_eps.emm.embr_dl", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_egbr_ul, - { "Guaranteed bit rate for uplink(ext)","nas_eps.emm.egbr_ul", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_egbr_dl, - { "Guaranteed bit rate for downlink(ext)","nas_eps.emm.egbr_dl", - FT_UINT8,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_cause, - { "Cause","nas_eps.esm.cause", - FT_UINT8,BASE_DEC, VALS(nas_eps_esm_cause_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_eit, - { "EIT (ESM information transfer)", "nas_eps.emm.eit", - FT_BOOLEAN, 8, TFS(&nas_eps_emm_active_flg_value), 0x01, - NULL, HFILL } - }, - { &hf_nas_eps_esm_lnkd_eps_bearer_id, - { "Linked EPS bearer identity","nas_eps.esm.lnkd_eps_bearer_id", - FT_UINT8,BASE_DEC, VALS(nas_eps_esm_linked_bearer_id_vals), 0x0f, - NULL, HFILL } - }, - { &hf_nas_eps_esm_notif_ind, - { "Notification indicator value","nas_eps.esm.notif_ind", - FT_UINT8,BASE_DEC, VALS(nas_eps_esm_notif_ind_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_pdn_ipv4, - {"PDN IPv4", "nas_eps.esm.pdn_ipv4", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - { &hf_nas_eps_esm_pdn_ipv6_if_id, - {"PDN IPv6 if id", "nas_eps.esm.pdn_ipv6_if_id", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - { &hf_nas_eps_esm_linked_bearer_id, - { "Linked EPS bearer identity","nas_eps.esm.linked_bearer_id", - FT_UINT8,BASE_DEC, VALS(nas_eps_esm_linked_bearer_id_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_active_flg, - { "Active flag", "nas_eps.emm.active_flg", - FT_BOOLEAN, BASE_NONE, TFS(&nas_eps_emm_active_flg_value), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_eps_update_result_value, - { "EPS update result value","nas_eps.emm.eps_update_result_value", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_update_result_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_eps_update_type_value, - { "EPS update type value", "nas_eps.emm.update_type_value", - FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_update_type_vals), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_service_type, - { "Service type", "nas_eps.emm.service_type", - FT_UINT8,BASE_DEC, VALS(nas_eps_service_type_vals), 0x0, - NULL, HFILL } - }, - /* ESM hf cvariables */ - { &hf_nas_eps_msg_esm_type, - { "NAS EPS session management messages", "nas_eps.nas_msg_esm_type", - FT_UINT8, BASE_HEX, VALS(nas_msg_esm_strings), 0x0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_elem_id, - { "Element ID", "nas_eps.esm.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_proc_trans_id, - { "Procedure transaction identity", "nas_eps.esm.proc_trans_id", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL } - }, - { &hf_nas_eps_esm_pdn_type, - { "PDN type", "nas_eps.nas_eps_esm_pdn_type", - FT_UINT8, BASE_DEC, VALS(nas_eps_esm_pdn_type_values), 0x0, - NULL, HFILL } - }, + }, + { &hf_nas_eps_emm_mme_code, + { "MME Code","nas_eps.emm.mme_code", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_m_tmsi, + { "M-TMSI","nas_eps.emm.m_tmsi", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_msg_cont, + { "ESM message container contents","nas_eps.emm.esm_msg_cont", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_imeisv_req, + { "IMEISV request","nas_eps.emm.imeisv_req", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_imeisv_req_vals), 0x07, + NULL, HFILL } + }, + { &hf_nas_eps_emm_toi, + { "Type of integrity protection algorithm","nas_eps.emm.toi", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_toi_vals), 0x07, + NULL, HFILL } + }, + { &hf_nas_eps_emm_toc, + { "Type of ciphering algorithm","nas_eps.emm.toc", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_toc_vals), 0x70, + NULL, HFILL } + }, + { &hf_nas_eps_emm_EPS_attach_result, + { "Attach result","nas_eps.emm.EPS_attach_result", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_EPS_attach_result_values), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_spare_half_octet, + { "Spare half octet","nas_eps.emm.EPS_attach_result", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_add_upd_res, + { "AURV","nas_eps.emm.add_upd_res", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_add_upd_res_vals), 0x0, + "Additional update result value", HFILL } + }, + { &hf_nas_eps_emm_add_upd_type, + { "AUTV","nas_eps.emm.add_upd_type", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_add_upd_type_vals), 0x0, + "Additional update type value", HFILL } + }, + { &hf_nas_eps_emm_res, + { "RES","nas_eps.emm.res", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_csfb_resp, + { "CSFB response","nas_eps.emm.csfb_resp", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_csfb_resp_vals), 0x03, + NULL, HFILL } + }, + { &hf_nas_eps_emm_cause, + { "Cause","nas_eps.emm.cause", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_cause_values), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_id_type2, + { "Identity type 2","nas_eps.emm.id_type2", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_id_type2_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_short_mac, + { "Message authentication code (short)","nas_eps.emm.short_mac", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_tai_tol, + { "Type of list","nas_eps.emm.tai_tol", + FT_UINT8, BASE_DEC, VALS(nas_eps_emm_tai_tol_vals), 0x60, + NULL, HFILL } + }, + { &hf_nas_eps_emm_tai_n_elem, + { "Number of elements","nas_eps.emm.tai_n_elem", + FT_UINT8, BASE_DEC, NULL, 0x1f, + NULL, HFILL } + }, + { &hf_nas_eps_emm_tai_tac, + { "Tracking area code(TAC)","nas_eps.emm.tai_tac", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eea0, + { "EEA0","nas_eps.emm.eea0", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x80, + NULL, HFILL } + }, + { &hf_nas_eps_emm_128eea1, + { "128-EEA1","nas_eps.emm.128eea1", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, + NULL, HFILL } + }, + { &hf_nas_eps_emm_128eea2, + { "128-EEA2","nas_eps.emm.128eea2", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eea3, + { "EEA3","nas_eps.emm.eea3", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eea4, + { "EEA4","nas_eps.emm.eea4", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eea5, + { "EEA5","nas_eps.emm.eea5", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eea6, + { "EEA6","nas_eps.emm.eea6", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eea7, + { "EEA7","nas_eps.emm.eea7", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eia0, + { "EIA0","nas_eps.emm.eia0", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x80, + NULL, HFILL } + }, + { &hf_nas_eps_emm_128eia1, + { "128-EIA1","nas_eps.emm.128eia1", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, + NULL, HFILL } + }, + { &hf_nas_eps_emm_128eia2, + { "128-EIA2","nas_eps.emm.128eia2", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eia3, + { "EIA3","nas_eps.emm.eia3", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eia4, + { "EIA4","nas_eps.emm.eia4", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eia5, + { "EIA5","nas_eps.emm.eia5", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eia6, + { "EIA6","nas_eps.emm.eia6", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_eia7, + { "EIA7","nas_eps.emm.eia7", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, + NULL, HFILL } + }, + + + { &hf_nas_eps_emm_uea0, + { "UEA0","nas_eps.emm.uea0", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x80, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uea1, + { "UEA1","nas_eps.emm.uea1", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uea2, + { "UEA2","nas_eps.emm.uea2", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uea3, + { "UEA3","nas_eps.emm.uea3", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uea4, + { "UEA4","nas_eps.emm.uea4", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uea5, + { "UEA5","nas_eps.emm.uea5", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uea6, + { "UEA6","nas_eps.emm.uea6", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uea7, + { "UEA7","nas_eps.emm.uea7", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ucs2_supp, + { "UCS2 support (UCS2)","nas_eps.emm.emm_ucs2_supp", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_ucs2_supp_flg_value), 0x80, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uia1, + { "UMTS integrity algorithm UIA1","nas_eps.emm.uia1", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uia2, + { "UMTS integrity algorithm UIA2","nas_eps.emm.uia2", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uia3, + { "UMTS integrity algorithm UIA3","nas_eps.emm.uia3", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uia4, + { "UMTS integrity algorithm UIA4","nas_eps.emm.uia4", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uia5, + { "UMTS integrity algorithm UIA5","nas_eps.emm.uia5", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uia6, + { "UMTS integrity algorithm UIA6","nas_eps.emm.uia6", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_uia7, + { "UMTS integrity algorithm UIA7","nas_eps.emm.uia7", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gea1, + { "GPRS encryption algorithm GEA1","nas_eps.emm.gea1", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x40, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gea2, + { "GPRS encryption algorithm GEA2","nas_eps.emm.gea2", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x20, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gea3, + { "GPRS encryption algorithm GEA3","nas_eps.emm.gea3", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x10, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gea4, + { "GPRS encryption algorithm GEA4","nas_eps.emm.gea4", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gea5, + { "GPRS encryption algorithm GEA5","nas_eps.emm.gea5", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gea6, + { "GPRS encryption algorithm GEA6","nas_eps.emm.gea6", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gea7, + { "GPRS encryption algorithm GEA7","nas_eps.emm.gea7", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_supported_flg_value), 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_emm_lpp_cap, + { "LPP capability","nas_eps.emm.lpp_cap", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_lpp_cap_flg), 0x08, + NULL, HFILL } + }, + { &hf_nas_eps_emm_lcs_cap, + { "LCS capability","nas_eps.emm.lcs_cap", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_lcs_cap_flg), 0x04, + NULL, HFILL } + }, + { &hf_nas_eps_emm_1xsrvcc_cap, + { "1xSRVCC capability","nas_eps.emm.1xsrvcc_cap", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_1xsrvcc_cap_flg), 0x02, + NULL, HFILL } + }, + { &hf_nas_eps_emm_nf_cap, + { "NF capability","nas_eps.emm.nf_cap", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_nf_cap_flg), 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg, + { "1xSRVCC capability","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, + NULL, HFILL } + }, + { &hf_nas_eps_emm_ss_code, + { "SS Code","nas_eps.emm.eps_update_result_value", + FT_UINT8,BASE_DEC, VALS(ssCode_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_lcs_ind, + { "LCS indicator","nas_eps.emm.emm_lcs_ind", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_lcs_ind_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_gen_msg_cont_type, + { "Container type","nas_eps.emm.gen_msg_cont_type", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_gen_msg_cont_type_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_apn_ambr_ul, + { "APN-AMBR for uplink","nas_eps.emm.apn_ambr_ul", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_apn_ambr_dl, + { "APN-AMBR for downlink","nas_eps.emm.apn_ambr_dl", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_apn_ambr_ul_ext, + { "APN-AMBR for uplink(Extended)","nas_eps.emm.apn_ambr_ul_ext", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_apn_ambr_dl_ext, + { "APN-AMBR for downlink(Extended)","nas_eps.emm.apn_ambr_dl_ext", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_apn_ambr_ul_ext2, + { "APN-AMBR for uplink(Extended-2)","nas_eps.emm.apn_ambr_ul_ext2", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_apn_ambr_dl_ext2, + { "APN-AMBR for downlink(Extended-2)","nas_eps.emm.apn_ambr_dl_ext2", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_switch_off, + { "Switch off","nas_eps.emm.switch_off", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_switch_off_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_detach_type_UL, + { "Detach Type","nas_eps.emm.detach_type_ul", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_type_of_dtatch_UL_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_emm_detach_type_DL, + { "Detach Type","nas_eps.emm.detach_type_dl", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_type_of_dtatch_DL_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_qci, + { "Quality of Service Class Identifier (QCI)","nas_eps.emm.qci", + FT_UINT8,BASE_DEC, VALS(nas_eps_qci_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_mbr_ul, + { "Maximum bit rate for uplink","nas_eps.emm.mbr_ul", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_mbr_dl, + { "Maximum bit rate for downlink","nas_eps.emm.mbr_dl", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_gbr_ul, + { "Guaranteed bit rate for uplink","nas_eps.emm.gbr_ul", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_gbr_dl, + { "Guaranteed bit rate for downlink","nas_eps.emm.gbr_dl", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_embr_ul, + { "Maximum bit rate for uplink(ext)","nas_eps.emm.embr_ul", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_embr_dl, + { "Maximum bit rate for downlink(ext)","nas_eps.emm.embr_dl", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_egbr_ul, + { "Guaranteed bit rate for uplink(ext)","nas_eps.emm.egbr_ul", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_egbr_dl, + { "Guaranteed bit rate for downlink(ext)","nas_eps.emm.egbr_dl", + FT_UINT8,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_cause, + { "Cause","nas_eps.esm.cause", + FT_UINT8,BASE_DEC, VALS(nas_eps_esm_cause_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_eit, + { "EIT (ESM information transfer)", "nas_eps.emm.eit", + FT_BOOLEAN, 8, TFS(&nas_eps_emm_active_flg_value), 0x01, + NULL, HFILL } + }, + { &hf_nas_eps_esm_lnkd_eps_bearer_id, + { "Linked EPS bearer identity","nas_eps.esm.lnkd_eps_bearer_id", + FT_UINT8,BASE_DEC, VALS(nas_eps_esm_linked_bearer_id_vals), 0x0f, + NULL, HFILL } + }, + { &hf_nas_eps_esm_notif_ind, + { "Notification indicator value","nas_eps.esm.notif_ind", + FT_UINT8,BASE_DEC, VALS(nas_eps_esm_notif_ind_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_pdn_ipv4, + {"PDN IPv4", "nas_eps.esm.pdn_ipv4", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + { &hf_nas_eps_esm_pdn_ipv6_if_id, + {"PDN IPv6 if id", "nas_eps.esm.pdn_ipv6_if_id", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + { &hf_nas_eps_esm_linked_bearer_id, + { "Linked EPS bearer identity","nas_eps.esm.linked_bearer_id", + FT_UINT8,BASE_DEC, VALS(nas_eps_esm_linked_bearer_id_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_active_flg, + { "Active flag", "nas_eps.emm.active_flg", + FT_BOOLEAN, BASE_NONE, TFS(&nas_eps_emm_active_flg_value), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_eps_update_result_value, + { "EPS update result value","nas_eps.emm.eps_update_result_value", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_update_result_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_eps_update_type_value, + { "EPS update type value", "nas_eps.emm.update_type_value", + FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_update_type_vals), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_service_type, + { "Service type", "nas_eps.emm.service_type", + FT_UINT8,BASE_DEC, VALS(nas_eps_service_type_vals), 0x0, + NULL, HFILL } + }, + /* ESM hf cvariables */ + { &hf_nas_eps_msg_esm_type, + { "NAS EPS session management messages", "nas_eps.nas_msg_esm_type", + FT_UINT8, BASE_HEX, VALS(nas_msg_esm_strings), 0x0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_elem_id, + { "Element ID", "nas_eps.esm.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_proc_trans_id, + { "Procedure transaction identity", "nas_eps.esm.proc_trans_id", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_nas_eps_esm_pdn_type, + { "PDN type", "nas_eps.nas_eps_esm_pdn_type", + FT_UINT8, BASE_DEC, VALS(nas_eps_esm_pdn_type_values), 0x0, + NULL, HFILL } + }, }; - /* Setup protocol subtree array */ -#define NUM_INDIVIDUAL_ELEMS 2 - gint *ett[NUM_INDIVIDUAL_ELEMS + - NUM_NAS_EPS_COMMON_ELEM + - NUM_NAS_MSG_EMM + NUM_NAS_EMM_ELEM+ - NUM_NAS_MSG_ESM + NUM_NAS_ESM_ELEM]; - - ett[0] = &ett_nas_eps; - ett[1] = &ett_nas_eps_esm_msg_cont; - - last_offset = NUM_INDIVIDUAL_ELEMS; - - for (i=0; i < NUM_NAS_EPS_COMMON_ELEM; i++, last_offset++) - { - ett_nas_eps_common_elem[i] = -1; - ett[last_offset] = &ett_nas_eps_common_elem[i]; - } - - /* EMM */ - for (i=0; i < NUM_NAS_MSG_EMM; i++, last_offset++) - { - ett_nas_msg_emm[i] = -1; - ett[last_offset] = &ett_nas_msg_emm[i]; - } - - for (i=0; i < NUM_NAS_EMM_ELEM; i++, last_offset++) - { - ett_nas_eps_emm_elem[i] = -1; - ett[last_offset] = &ett_nas_eps_emm_elem[i]; - } - /* EPS */ - for (i=0; i < NUM_NAS_MSG_ESM; i++, last_offset++) - { - ett_nas_msg_esm[i] = -1; - ett[last_offset] = &ett_nas_msg_esm[i]; - } - - for (i=0; i < NUM_NAS_ESM_ELEM; i++, last_offset++) - { - ett_nas_eps_esm_elem[i] = -1; - ett[last_offset] = &ett_nas_eps_esm_elem[i]; - } - - /* Register protocol */ - proto_nas_eps = proto_register_protocol(PNAME, PSNAME, PFNAME); - /* Register fields and subtrees */ - proto_register_field_array(proto_nas_eps, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - - /* Register dissector */ - register_dissector(PFNAME, dissect_nas_eps, proto_nas_eps); - - /* Register dissector */ - register_dissector("nas-eps_plain", dissect_nas_eps_plain, proto_nas_eps); + /* Setup protocol subtree array */ +#define NUM_INDIVIDUAL_ELEMS 2 + gint *ett[NUM_INDIVIDUAL_ELEMS + + NUM_NAS_EPS_COMMON_ELEM + + NUM_NAS_MSG_EMM + NUM_NAS_EMM_ELEM+ + NUM_NAS_MSG_ESM + NUM_NAS_ESM_ELEM]; + + ett[0] = &ett_nas_eps; + ett[1] = &ett_nas_eps_esm_msg_cont; + + last_offset = NUM_INDIVIDUAL_ELEMS; + + for (i=0; i < NUM_NAS_EPS_COMMON_ELEM; i++, last_offset++) + { + ett_nas_eps_common_elem[i] = -1; + ett[last_offset] = &ett_nas_eps_common_elem[i]; + } + + /* EMM */ + for (i=0; i < NUM_NAS_MSG_EMM; i++, last_offset++) + { + ett_nas_msg_emm[i] = -1; + ett[last_offset] = &ett_nas_msg_emm[i]; + } + + for (i=0; i < NUM_NAS_EMM_ELEM; i++, last_offset++) + { + ett_nas_eps_emm_elem[i] = -1; + ett[last_offset] = &ett_nas_eps_emm_elem[i]; + } + /* EPS */ + for (i=0; i < NUM_NAS_MSG_ESM; i++, last_offset++) + { + ett_nas_msg_esm[i] = -1; + ett[last_offset] = &ett_nas_msg_esm[i]; + } + + for (i=0; i < NUM_NAS_ESM_ELEM; i++, last_offset++) + { + ett_nas_eps_esm_elem[i] = -1; + ett[last_offset] = &ett_nas_eps_esm_elem[i]; + } + + /* Register protocol */ + proto_nas_eps = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_nas_eps, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + /* Register dissector */ + register_dissector(PFNAME, dissect_nas_eps, proto_nas_eps); + + /* Register dissector */ + register_dissector("nas-eps_plain", dissect_nas_eps_plain, proto_nas_eps); } void proto_reg_handoff_nas_eps(void) { - gsm_a_dtap_handle = find_dissector("gsm_a_dtap"); + gsm_a_dtap_handle = find_dissector("gsm_a_dtap"); } |