2008-11-27 21:45:42 +00:00
/* packet-nas_eps.c
* Routines for Non - Access - Stratum ( NAS ) protocol for Evolved Packet System ( EPS ) dissection
*
2010-07-06 13:21:34 +00:00
* Copyright 2008 - 2010 , Anders Broman < anders . broman @ ericsson . com >
2008-11-27 21:45:42 +00:00
*
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
* Copyright 1998 Gerald Combs
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2012-06-28 22:56:06 +00:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
2008-11-27 21:45:42 +00:00
*
2015-07-01 19:16:53 +00:00
* References : 3 GPP TS 24.301 V12 .9 .0 ( 2015 - 06 )
2008-11-27 21:45:42 +00:00
*/
2012-09-20 02:03:38 +00:00
# include "config.h"
2008-11-27 21:45:42 +00:00
# include <epan/packet.h>
2009-03-20 20:15:46 +00:00
# include <epan/asn1.h>
2012-04-24 12:33:00 +00:00
# include <epan/prefs.h>
2015-01-02 17:19:10 +00:00
# include <epan/expert.h>
2009-03-20 20:15:46 +00:00
# include "packet-gsm_map.h"
2008-11-27 21:45:42 +00:00
# include "packet-gsm_a_common.h"
2009-03-18 19:40:54 +00:00
# include "packet-e212.h"
2011-10-16 16:02:26 +00:00
# include "packet-lcsap.h"
2008-11-27 21:45:42 +00:00
2013-12-14 16:09:57 +00:00
void proto_register_nas_eps ( void ) ;
void proto_reg_handoff_nas_eps ( void ) ;
2008-11-27 21:45:42 +00:00
# define PNAME "Non-Access-Stratum (NAS)PDU"
2008-12-17 23:16:57 +00:00
# define PSNAME "NAS-EPS"
# define PFNAME "nas-eps"
2008-11-27 21:45:42 +00:00
/* Initialize the protocol and registered fields */
static int proto_nas_eps = - 1 ;
2009-04-26 16:17:00 +00:00
/* Dissector handles */
static dissector_handle_t gsm_a_dtap_handle ;
2011-10-16 16:02:26 +00:00
static dissector_handle_t lpp_handle ;
2009-04-26 16:17:00 +00:00
2009-04-24 20:06:00 +00:00
/* Forward declaration */
static void disect_nas_eps_esm_msg ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , int offset ) ;
2008-11-27 21:45:42 +00:00
static int hf_nas_eps_msg_emm_type = - 1 ;
2009-01-01 22:54:30 +00:00
int hf_nas_eps_common_elem_id = - 1 ;
2009-03-18 19:40:54 +00:00
int hf_nas_eps_emm_elem_id = - 1 ;
static int hf_nas_eps_bearer_id = - 1 ;
2008-12-01 22:31:17 +00:00
static int hf_nas_eps_spare_bits = - 1 ;
2008-11-27 21:45:42 +00:00
static int hf_nas_eps_security_header_type = - 1 ;
2009-03-30 22:38:56 +00:00
static int hf_nas_eps_msg_auth_code = - 1 ;
static int hf_nas_eps_seq_no = - 1 ;
2015-04-05 14:37:06 +00:00
static int hf_nas_eps_ciphered_msg = - 1 ;
static int hf_nas_eps_msg_elems = - 1 ;
2010-03-06 20:32:27 +00:00
static int hf_nas_eps_seq_no_short = - 1 ;
2009-04-25 17:46:16 +00:00
static int hf_nas_eps_emm_ebi0 = - 1 ;
static int hf_nas_eps_emm_ebi1 = - 1 ;
static int hf_nas_eps_emm_ebi2 = - 1 ;
static int hf_nas_eps_emm_ebi3 = - 1 ;
static int hf_nas_eps_emm_ebi4 = - 1 ;
static int hf_nas_eps_emm_ebi5 = - 1 ;
static int hf_nas_eps_emm_ebi6 = - 1 ;
static int hf_nas_eps_emm_ebi7 = - 1 ;
static int hf_nas_eps_emm_ebi8 = - 1 ;
static int hf_nas_eps_emm_ebi9 = - 1 ;
static int hf_nas_eps_emm_ebi10 = - 1 ;
static int hf_nas_eps_emm_ebi11 = - 1 ;
static int hf_nas_eps_emm_ebi12 = - 1 ;
static int hf_nas_eps_emm_ebi13 = - 1 ;
static int hf_nas_eps_emm_ebi14 = - 1 ;
static int hf_nas_eps_emm_ebi15 = - 1 ;
static int hf_nas_eps_emm_dl_nas_cnt = - 1 ;
2011-04-27 22:18:00 +00:00
static int hf_nas_eps_emm_nonce_mme = - 1 ;
static int hf_nas_eps_emm_nonce = - 1 ;
static int hf_nas_eps_emm_paging_id = - 1 ;
2014-12-04 13:38:35 +00:00
static int hf_nas_eps_emm_ext_emm_cause = - 1 ;
2008-11-27 21:45:42 +00:00
static int hf_nas_eps_emm_eps_att_type = - 1 ;
2012-05-20 09:50:34 +00:00
static int hf_nas_eps_emm_esr_ps = - 1 ;
static int hf_nas_eps_emm_cs_lcs = - 1 ;
static int hf_nas_eps_emm_epc_lcs = - 1 ;
static int hf_nas_eps_emm_emc_bs = - 1 ;
static int hf_nas_eps_emm_ims_vops = - 1 ;
2008-12-01 22:31:17 +00:00
static int hf_nas_eps_emm_nas_key_set_id = - 1 ;
2009-03-20 20:15:46 +00:00
static int hf_nas_eps_tsc = - 1 ;
2008-12-01 22:31:17 +00:00
static int hf_nas_eps_emm_odd_even = - 1 ;
static int hf_nas_eps_emm_type_of_id = - 1 ;
2009-03-18 19:40:54 +00:00
static int hf_nas_eps_emm_mme_grp_id = - 1 ;
2009-10-02 09:23:46 +00:00
static int hf_nas_eps_emm_imei = - 1 ;
2009-03-18 19:40:54 +00:00
static int hf_nas_eps_emm_mme_code = - 1 ;
static int hf_nas_eps_emm_m_tmsi = - 1 ;
2009-03-04 19:51:55 +00:00
static int hf_nas_eps_esm_msg_cont = - 1 ;
2009-03-30 20:03:04 +00:00
static int hf_nas_eps_esm_imeisv_req = - 1 ;
static int hf_nas_eps_emm_toi = - 1 ;
static int hf_nas_eps_emm_toc = - 1 ;
2008-12-01 22:31:17 +00:00
static int hf_nas_eps_emm_EPS_attach_result = - 1 ;
2008-12-03 06:47:06 +00:00
static int hf_nas_eps_emm_spare_half_octet = - 1 ;
2010-09-23 14:07:32 +00:00
static int hf_nas_eps_emm_add_upd_res = - 1 ;
static int hf_nas_eps_emm_add_upd_type = - 1 ;
2008-12-16 05:41:39 +00:00
static int hf_nas_eps_emm_res = - 1 ;
2009-03-23 17:32:39 +00:00
static int hf_nas_eps_emm_csfb_resp = - 1 ;
2009-01-01 22:54:30 +00:00
static int hf_nas_eps_emm_cause = - 1 ;
2009-03-19 22:03:33 +00:00
static int hf_nas_eps_emm_id_type2 = - 1 ;
2009-01-01 22:54:30 +00:00
static int hf_nas_eps_emm_short_mac = - 1 ;
2009-04-20 20:31:33 +00:00
static int hf_nas_eps_emm_tai_tol = - 1 ;
static int hf_nas_eps_emm_tai_n_elem = - 1 ;
static int hf_nas_eps_emm_tai_tac = - 1 ;
2009-09-17 13:53:52 +00:00
static int hf_nas_eps_emm_eea0 = - 1 ;
2009-03-19 22:03:33 +00:00
static int hf_nas_eps_emm_128eea1 = - 1 ;
static int hf_nas_eps_emm_128eea2 = - 1 ;
2009-03-23 17:32:39 +00:00
static int hf_nas_eps_emm_eea3 = - 1 ;
static int hf_nas_eps_emm_eea4 = - 1 ;
static int hf_nas_eps_emm_eea5 = - 1 ;
static int hf_nas_eps_emm_eea6 = - 1 ;
static int hf_nas_eps_emm_eea7 = - 1 ;
2010-06-01 07:26:08 +00:00
static int hf_nas_eps_emm_eia0 = - 1 ;
2009-03-19 22:03:33 +00:00
static int hf_nas_eps_emm_128eia1 = - 1 ;
static int hf_nas_eps_emm_128eia2 = - 1 ;
2009-03-23 17:32:39 +00:00
static int hf_nas_eps_emm_eia3 = - 1 ;
static int hf_nas_eps_emm_eia4 = - 1 ;
static int hf_nas_eps_emm_eia5 = - 1 ;
static int hf_nas_eps_emm_eia6 = - 1 ;
static int hf_nas_eps_emm_eia7 = - 1 ;
static int hf_nas_eps_emm_uea0 = - 1 ;
static int hf_nas_eps_emm_uea1 = - 1 ;
static int hf_nas_eps_emm_uea2 = - 1 ;
static int hf_nas_eps_emm_uea3 = - 1 ;
static int hf_nas_eps_emm_uea4 = - 1 ;
static int hf_nas_eps_emm_uea5 = - 1 ;
static int hf_nas_eps_emm_uea6 = - 1 ;
static int hf_nas_eps_emm_uea7 = - 1 ;
2009-03-22 21:20:56 +00:00
static int hf_nas_eps_emm_ucs2_supp = - 1 ;
static int hf_nas_eps_emm_uia1 = - 1 ;
static int hf_nas_eps_emm_uia2 = - 1 ;
static int hf_nas_eps_emm_uia3 = - 1 ;
static int hf_nas_eps_emm_uia4 = - 1 ;
static int hf_nas_eps_emm_uia5 = - 1 ;
static int hf_nas_eps_emm_uia6 = - 1 ;
static int hf_nas_eps_emm_uia7 = - 1 ;
2009-04-26 16:17:00 +00:00
static int hf_nas_eps_emm_gea1 = - 1 ;
static int hf_nas_eps_emm_gea2 = - 1 ;
static int hf_nas_eps_emm_gea3 = - 1 ;
static int hf_nas_eps_emm_gea4 = - 1 ;
static int hf_nas_eps_emm_gea5 = - 1 ;
static int hf_nas_eps_emm_gea6 = - 1 ;
static int hf_nas_eps_emm_gea7 = - 1 ;
2014-12-04 13:38:35 +00:00
static int hf_nas_eps_emm_prose_dd_cap = - 1 ;
static int hf_nas_eps_emm_prose_cap = - 1 ;
2012-10-02 12:46:21 +00:00
static int hf_nas_eps_emm_h245_ash_cap = - 1 ;
2012-05-20 09:50:34 +00:00
static int hf_nas_eps_emm_acc_csfb_cap = - 1 ;
2011-04-27 22:18:00 +00:00
static int hf_nas_eps_emm_lpp_cap = - 1 ;
static int hf_nas_eps_emm_lcs_cap = - 1 ;
2009-03-22 21:20:56 +00:00
static int hf_nas_eps_emm_1xsrvcc_cap = - 1 ;
2011-04-27 22:18:00 +00:00
static int hf_nas_eps_emm_nf_cap = - 1 ;
2014-12-04 13:38:35 +00:00
static int hf_nas_eps_emm_prose_dc_cap = - 1 ;
2012-05-20 09:50:34 +00:00
static int hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg = - 1 ;
2009-03-20 20:15:46 +00:00
static int hf_nas_eps_emm_ss_code = - 1 ;
2009-04-25 17:46:16 +00:00
static int hf_nas_eps_emm_lcs_ind = - 1 ;
2011-04-27 22:18:00 +00:00
static int hf_nas_eps_emm_gen_msg_cont_type = - 1 ;
2009-04-26 16:17:00 +00:00
static int hf_nas_eps_emm_apn_ambr_ul = - 1 ;
static int hf_nas_eps_emm_apn_ambr_dl = - 1 ;
static int hf_nas_eps_emm_apn_ambr_ul_ext = - 1 ;
static int hf_nas_eps_emm_apn_ambr_dl_ext = - 1 ;
static int hf_nas_eps_emm_apn_ambr_ul_ext2 = - 1 ;
static int hf_nas_eps_emm_apn_ambr_dl_ext2 = - 1 ;
2015-04-05 14:37:06 +00:00
static int hf_nas_eps_emm_apn_ambr_ul_total = - 1 ;
static int hf_nas_eps_emm_apn_ambr_dl_total = - 1 ;
2012-05-20 09:50:34 +00:00
static int hf_nas_eps_emm_guti_type = - 1 ;
2015-04-05 14:37:06 +00:00
static int hf_nas_eps_emm_detach_req_UL = - 1 ;
static int hf_nas_eps_emm_detach_req_DL = - 1 ;
2009-06-06 17:03:34 +00:00
static int hf_nas_eps_emm_switch_off = - 1 ;
static int hf_nas_eps_emm_detach_type_UL = - 1 ;
static int hf_nas_eps_emm_detach_type_DL = - 1 ;
2009-04-20 20:31:33 +00:00
static int hf_nas_eps_qci = - 1 ;
static int hf_nas_eps_mbr_ul = - 1 ;
static int hf_nas_eps_mbr_dl = - 1 ;
static int hf_nas_eps_gbr_ul = - 1 ;
static int hf_nas_eps_gbr_dl = - 1 ;
static int hf_nas_eps_embr_ul = - 1 ;
static int hf_nas_eps_embr_dl = - 1 ;
static int hf_nas_eps_egbr_ul = - 1 ;
static int hf_nas_eps_egbr_dl = - 1 ;
2009-03-19 22:03:33 +00:00
2009-03-22 21:20:56 +00:00
static int hf_nas_eps_esm_cause = - 1 ;
2009-04-26 16:17:00 +00:00
static int hf_nas_eps_esm_eit = - 1 ;
2011-04-27 22:18:00 +00:00
static int hf_nas_eps_esm_notif_ind = - 1 ;
2009-04-14 18:11:41 +00:00
static int hf_nas_eps_esm_pdn_type = - 1 ;
static int hf_nas_eps_esm_pdn_ipv4 = - 1 ;
2010-11-16 20:46:21 +00:00
static int hf_nas_eps_esm_pdn_ipv6_if_id = - 1 ;
2015-04-03 14:57:42 +00:00
static int hf_nas_eps_esm_ratc = - 1 ;
2009-03-22 21:20:56 +00:00
static int hf_nas_eps_esm_linked_bearer_id = - 1 ;
2009-01-01 22:54:30 +00:00
static int hf_nas_eps_active_flg = - 1 ;
static int hf_nas_eps_eps_update_result_value = - 1 ;
static int hf_nas_eps_eps_update_type_value = - 1 ;
2009-01-07 21:14:25 +00:00
static int hf_nas_eps_service_type = - 1 ;
2008-11-27 21:45:42 +00:00
2011-10-12 21:17:23 +00:00
static int hf_nas_eps_nas_msg_cont = - 1 ;
static int hf_nas_eps_gen_msg_cont = - 1 ;
2011-10-16 16:02:26 +00:00
static int hf_nas_eps_cmn_add_info = - 1 ;
2011-12-19 16:57:17 +00:00
static int hf_nas_eps_esm_request_type = - 1 ;
2011-10-12 21:17:23 +00:00
2009-03-04 19:51:55 +00:00
/* ESM */
static int hf_nas_eps_msg_esm_type = - 1 ;
2009-03-18 19:40:54 +00:00
int hf_nas_eps_esm_elem_id = - 1 ;
static int hf_nas_eps_esm_proc_trans_id = - 1 ;
2009-03-04 19:51:55 +00:00
2008-11-27 21:45:42 +00:00
/* Initialize the subtree pointers */
static int ett_nas_eps = - 1 ;
2009-03-04 19:51:55 +00:00
static int ett_nas_eps_esm_msg_cont = - 1 ;
2011-10-12 21:17:23 +00:00
static int ett_nas_eps_nas_msg_cont = - 1 ;
static int ett_nas_eps_gen_msg_cont = - 1 ;
2011-10-16 16:02:26 +00:00
static int ett_nas_eps_cmn_add_info = - 1 ;
2009-03-04 19:51:55 +00:00
2015-01-02 17:19:10 +00:00
static expert_field ei_nas_eps_extraneous_data = EI_INIT ;
2015-04-05 14:37:06 +00:00
static expert_field ei_nas_eps_unknown_identity = EI_INIT ;
static expert_field ei_nas_eps_unknown_type_of_list = EI_INIT ;
static expert_field ei_nas_eps_wrong_nb_of_elems = EI_INIT ;
static expert_field ei_nas_eps_unknown_msg_type = EI_INIT ;
static expert_field ei_nas_eps_unknown_pd = EI_INIT ;
static expert_field ei_nas_eps_esm_tp_not_integ_prot = EI_INIT ;
2015-01-02 17:19:10 +00:00
2009-03-04 19:51:55 +00:00
/* Global variables */
2012-04-24 12:33:00 +00:00
static gboolean g_nas_eps_dissect_plain = FALSE ;
2009-03-04 19:51:55 +00:00
2011-10-12 21:17:23 +00:00
guint8 eps_nas_gen_msg_cont_type = 0 ;
2008-11-27 21:45:42 +00:00
/* Table 9.8.1: Message types for EPS mobility management
2010-06-09 17:40:03 +00:00
* 0 1 - - - - - - EPS mobility management messages
*/
2010-10-10 20:07:06 +00:00
static const value_string nas_msg_emm_strings [ ] = {
2010-06-09 17:40:03 +00:00
{ 0x41 , " Attach request " } ,
{ 0x42 , " Attach accept " } ,
{ 0x43 , " Attach complete " } ,
{ 0x44 , " Attach reject " } ,
{ 0x45 , " Detach request " } ,
{ 0x46 , " Detach accept " } ,
2010-10-10 20:07:06 +00:00
2010-06-09 17:40:03 +00:00
{ 0x48 , " Tracking area update request " } ,
{ 0x49 , " Tracking area update accept " } ,
{ 0x4a , " Tracking area update complete " } ,
{ 0x4b , " Tracking area update reject " } ,
2010-10-10 20:07:06 +00:00
2010-06-09 17:40:03 +00:00
{ 0x4c , " Extended service request " } ,
{ 0x4e , " Service reject " } ,
2010-10-10 20:07:06 +00:00
2010-06-09 17:40:03 +00:00
{ 0x50 , " GUTI reallocation command " } ,
{ 0x51 , " GUTI reallocation complete " } ,
{ 0x52 , " Authentication request " } ,
{ 0x53 , " Authentication response " } ,
{ 0x54 , " Authentication reject " } ,
{ 0x55 , " Identity request " } ,
{ 0x56 , " Identity response " } ,
2012-05-04 07:34:06 +00:00
{ 0x5c , " Authentication failure " } ,
2010-06-09 17:40:03 +00:00
{ 0x5d , " Security mode command " } ,
{ 0x5e , " Security mode complete " } ,
{ 0x5f , " Security mode reject " } ,
2010-10-10 20:07:06 +00:00
2010-06-09 17:40:03 +00:00
{ 0x60 , " EMM status " } ,
{ 0x61 , " EMM information " } ,
{ 0x62 , " Downlink NAS transport " } ,
{ 0x63 , " Uplink NAS transport " } ,
2014-02-23 22:36:11 +00:00
{ 0x64 , " CS service notification " } ,
2010-06-09 17:40:03 +00:00
{ 0x68 , " Downlink generic NAS transport " } ,
{ 0x69 , " Uplink generic NAS transport " } ,
{ 0 , NULL }
2008-11-27 21:45:42 +00:00
} ;
2012-03-13 17:21:46 +00:00
static value_string_ext nas_msg_emm_strings_ext = VALUE_STRING_EXT_INIT ( nas_msg_emm_strings ) ;
2008-11-27 21:45:42 +00:00
2009-03-04 19:51:55 +00:00
/* Table 9.8.2: Message types for EPS session management */
2010-10-10 20:07:06 +00:00
static const value_string nas_msg_esm_strings [ ] = {
2010-06-09 17:40:03 +00:00
{ 0xc1 , " Activate default EPS bearer context request " } ,
{ 0xc2 , " Activate default EPS bearer context accept " } ,
{ 0xc3 , " Activate default EPS bearer context reject " } ,
{ 0xc5 , " Activate dedicated EPS bearer context request " } ,
{ 0xc6 , " Activate dedicated EPS bearer context accept " } ,
{ 0xc7 , " Activate dedicated EPS bearer context reject " } ,
{ 0xc9 , " Modify EPS bearer context request " } ,
{ 0xca , " Modify EPS bearer context accept " } ,
{ 0xcb , " Modify EPS bearer context reject " } ,
{ 0xcd , " Deactivate EPS bearer context request " } ,
{ 0xce , " Deactivate EPS bearer context accept " } ,
{ 0xd0 , " PDN connectivity request " } ,
{ 0xd1 , " PDN connectivity reject " } ,
{ 0xd2 , " PDN disconnect request " } ,
{ 0xd3 , " PDN disconnect reject " } ,
{ 0xd4 , " Bearer resource allocation request " } ,
{ 0xd5 , " Bearer resource allocation reject " } ,
{ 0xd6 , " Bearer resource modification request " } ,
{ 0xd7 , " Bearer resource modification reject " } ,
{ 0xd9 , " ESM information request " } ,
{ 0xda , " ESM information response " } ,
{ 0xdb , " Notification " } ,
{ 0xe8 , " ESM status " } ,
{ 0 , NULL }
2009-03-04 19:51:55 +00:00
} ;
2012-03-13 17:21:46 +00:00
static value_string_ext nas_msg_esm_strings_ext = VALUE_STRING_EXT_INIT ( nas_msg_esm_strings ) ;
2009-03-04 19:51:55 +00:00
2008-11-27 21:45:42 +00:00
static const value_string security_header_type_vals [ ] = {
2010-06-09 17:40:03 +00:00
{ 0 , " Plain NAS message, not security protected " } ,
{ 1 , " Integrity protected " } ,
{ 2 , " Integrity protected and ciphered " } ,
{ 3 , " Integrity protected with new EPS security context " } ,
{ 4 , " Integrity protected and ciphered with new EPS security context " } ,
{ 5 , " Reserved " } ,
{ 6 , " Reserved " } ,
{ 7 , " Reserved " } ,
{ 8 , " Reserved " } ,
{ 9 , " Reserved " } ,
{ 10 , " Reserved " } ,
{ 11 , " Reserved " } ,
2012-06-25 11:12:54 +00:00
{ 12 , " Security header for the SERVICE REQUEST message " } ,
2012-12-03 22:42:56 +00:00
{ 13 , " These values are not used in this version of the protocol. "
" If received they shall be interpreted as security header for the SERVICE REQUEST message " } ,
{ 14 , " These values are not used in this version of the protocol. "
" If received they shall be interpreted as Security header for the SERVICE REQUEST message " } ,
{ 15 , " These values are not used in this version of the protocol. "
" If received they shall be interpreted as Security header for the SERVICE REQUEST message " } ,
2010-06-09 17:40:03 +00:00
{ 0 , NULL }
2008-11-27 21:45:42 +00:00
} ;
2011-01-12 07:39:54 +00:00
static value_string_ext security_header_type_vals_ext = VALUE_STRING_EXT_INIT ( security_header_type_vals ) ;
2008-11-27 21:45:42 +00:00
2013-03-18 20:26:47 +00:00
typedef enum
{
DE_EPS_CMN_ADD_INFO , /* 9.9.2.0 Additional information */
DE_EPS_CMN_DEVICE_PROPERTIES , /* 9.9.2.0A Device properties */
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 */
DE_EPS_MS_CM_2 , /* 9.9.2.4 Mobile station classmark 2 */
DE_EPS_MS_CM_3 , /* 9.9.2.5 Mobile station classmark 3 */
DE_EPS_NAS_SEC_PAR_FROM_EUTRA , /* 9.9.2.6 NAS security parameters from E-UTRA */
DE_EPS_NAS_SEC_PAR_TO_EUTRA , /* 9.9.2.7 NAS security parameters to E-UTRA */
DE_EPS_CMN_PLM_LST , /* 9.9.2.8 PLMN list */
DE_EPS_CMN_SUP_CODEC_LST , /* 9.9.2.6 9.9.2.10 Supported codec list */
DE_EPS_COMMON_NONE /* NONE */
}
nas_eps_common_elem_idx_t ;
2013-03-18 22:21:53 +00:00
static const value_string nas_eps_common_elem_strings [ ] = {
2013-03-18 20:26:47 +00:00
{ DE_EPS_CMN_ADD_INFO , " Additional information " } , /* 9.9.2.0 Additional information */
{ DE_EPS_CMN_DEVICE_PROPERTIES , " Device properties " } , /* 9.9.2.0A Device properties */
{ DE_EPS_CMN_EPS_BE_CTX_STATUS , " EPS bearer context status " } , /* 9.9.2.1 EPS bearer context status */
{ DE_EPS_CMN_LOC_AREA_ID , " Location area identification " } , /* 9.9.2.2 Location area identification */
{ DE_EPS_CMN_MOB_ID , " Mobile identity " } , /* 9.9.2.3 Mobile identity */
{ DE_EPS_MS_CM_2 , " Mobile station classmark 2 " } , /* 9.9.2.4 Mobile station classmark 2 */
{ DE_EPS_MS_CM_3 , " Mobile station classmark 3 " } , /* 9.9.2.5 Mobile station classmark 3 */
{ DE_EPS_NAS_SEC_PAR_FROM_EUTRA , " NAS security parameters from E-UTRA " } , /* 9.9.2.6 NAS security parameters from E-UTRA */
{ DE_EPS_NAS_SEC_PAR_TO_EUTRA , " NAS security parameters to E-UTRA " } , /* 9.9.2.7 NAS security parameters to E-UTRA */
{ DE_EPS_CMN_PLM_LST , " PLMN list " } , /* 9.9.2.8 PLMN list */
/* 9.9.2.9 Spare half octet */
{ DE_EPS_CMN_SUP_CODEC_LST , " Supported codec list " } , /* 9.9.2.10 Supported codec list */
2010-06-09 17:40:03 +00:00
{ 0 , NULL }
2009-01-01 22:54:30 +00:00
} ;
2013-03-18 22:21:53 +00:00
value_string_ext nas_eps_common_elem_strings_ext = VALUE_STRING_EXT_INIT ( nas_eps_common_elem_strings ) ;
2012-03-13 17:21:46 +00:00
2009-04-26 16:17:00 +00:00
/* Utility functions */
2010-09-06 17:31:17 +00:00
static guint16
2012-05-07 22:11:34 +00:00
calc_bitrate ( guint8 value ) {
2010-09-06 17:31:17 +00:00
guint16 return_value = value ;
2009-04-26 16:17:00 +00:00
2012-05-07 22:11:34 +00:00
if ( ( value > 63 ) & & ( value < = 127 ) ) {
2010-09-06 17:31:17 +00:00
return_value = 64 + ( value - 64 ) * 8 ;
2010-06-09 17:40:03 +00:00
}
2012-05-07 22:11:34 +00:00
else if ( ( value > 127 ) & & ( value < = 254 ) ) {
2010-09-06 17:31:17 +00:00
return_value = 576 + ( value - 128 ) * 64 ;
2010-06-09 17:40:03 +00:00
}
2012-05-07 22:11:34 +00:00
else if ( value = = 0xff ) {
2010-09-06 17:31:17 +00:00
return_value = 0 ;
2010-06-09 17:40:03 +00:00
}
2010-09-06 17:31:17 +00:00
return return_value ;
2009-04-26 16:17:00 +00:00
}
2010-09-06 17:31:17 +00:00
static guint32
2012-05-07 22:11:34 +00:00
calc_bitrate_ext ( guint8 value ) {
2010-09-06 17:31:17 +00:00
guint32 return_value = 0 ;
2009-04-26 16:17:00 +00:00
2012-05-07 22:11:34 +00:00
if ( ( value > 0 ) & & ( value < = 0x4a ) ) {
2010-09-06 17:31:17 +00:00
return_value = 8600 + value * 100 ;
2010-06-09 17:40:03 +00:00
}
2012-05-07 22:11:34 +00:00
else if ( ( value > 0x4a ) & & ( value < = 0xba ) ) {
2010-09-06 17:31:17 +00:00
return_value = 16 + ( value - 0x4a ) ;
2010-06-09 17:40:03 +00:00
}
2012-05-07 22:11:34 +00:00
else if ( ( value > 0xba ) & & ( value < = 0xfa ) ) {
2010-09-06 17:31:17 +00:00
return_value = 128 + ( value - 0xba ) * 2 ;
2010-06-09 17:40:03 +00:00
}
2011-07-15 16:59:18 +00:00
else {
return_value = 256 ;
}
2010-10-10 20:07:06 +00:00
2010-09-06 17:31:17 +00:00
return return_value ;
2009-04-26 16:17:00 +00:00
}
2012-10-02 12:46:21 +00:00
static guint32
calc_bitrate_ext2 ( guint8 value ) {
guint32 return_value = 0 ;
if ( ( value > 0 ) & & ( value < = 0x3d ) ) {
return_value = 256 + value * 4 ;
}
else if ( ( value > 0x3d ) & & ( value < = 0xa1 ) ) {
return_value = 500 + ( value - 0x3d ) * 10 ;
}
else if ( ( value > 0xa1 ) & & ( value < = 0xf6 ) ) {
return_value = 1500 + ( value - 0xa1 ) * 100 ;
}
else {
return_value = 10000 ;
}
return return_value ;
}
2009-04-26 16:17:00 +00:00
2010-06-09 17:40:03 +00:00
# define NUM_NAS_EPS_COMMON_ELEM (sizeof(nas_eps_common_elem_strings) / sizeof(value_string))
2009-01-01 22:54:30 +00:00
gint ett_nas_eps_common_elem [ NUM_NAS_EPS_COMMON_ELEM ] ;
2010-10-10 20:07:06 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 Common information elements
2009-01-01 22:54:30 +00:00
*/
2011-04-27 22:18:00 +00:00
/* 9.9.2.0 Additional information */
static guint16
2012-12-03 22:42:56 +00:00
de_eps_cmn_add_info ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
guint32 offset , guint len ,
gchar * add_string _U_ , int string_len _U_ )
2011-04-27 22:18:00 +00:00
{
2011-10-16 16:02:26 +00:00
proto_item * item ;
proto_tree * sub_tree ;
2012-05-07 22:11:34 +00:00
tvbuff_t * new_tvb ;
2011-10-16 16:02:26 +00:00
2012-05-07 22:11:34 +00:00
item = proto_tree_add_item ( tree , hf_nas_eps_cmn_add_info , tvb , offset , len , ENC_NA ) ;
2011-10-16 16:02:26 +00:00
sub_tree = proto_item_add_subtree ( item , ett_nas_eps_cmn_add_info ) ;
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , offset , len ) ;
2011-10-16 16:02:26 +00:00
switch ( eps_nas_gen_msg_cont_type ) {
2012-05-07 22:11:34 +00:00
case 1 :
/* LPP */
2012-09-10 21:40:21 +00:00
dissect_lcsap_Correlation_ID_PDU ( new_tvb , pinfo , sub_tree , NULL ) ;
2012-05-07 22:11:34 +00:00
break ;
default :
break ;
2011-10-16 16:02:26 +00:00
}
2011-04-27 22:18:00 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2011-04-27 22:18:00 +00:00
}
2009-01-01 22:54:30 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 .1 EPS bearer context status
2009-01-01 22:54:30 +00:00
*/
2009-04-25 17:46:16 +00:00
static const true_false_string nas_eps_emm_ebi_vals = {
2010-06-09 17:40:03 +00:00
" BEARER CONTEXT-ACTIVE " ,
" BEARER CONTEXT-INACTIVE "
2009-04-25 17:46:16 +00:00
} ;
2009-01-01 22:54:30 +00:00
static guint16
2012-12-03 22:42:56 +00:00
de_eps_cmn_eps_be_ctx_status ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-01-01 22:54:30 +00:00
{
2010-06-09 17:40:03 +00:00
guint32 curr_offset ;
curr_offset = offset ;
/* EBI(7) EBI(6) EBI(5) EBI(4) EBI(3) EBI(2) EBI(1) EBI(0) octet 3 */
2012-12-03 22:42:56 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi7 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi6 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi5 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
/* EBI(0) - EBI(4): Bits 0 to 4 of octet 3 are spare and shall be coded as zero. */
2012-12-03 22:42:56 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi4 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi3 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi2 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi1 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi0 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
curr_offset + + ;
/* EBI(15) EBI(14) EBI(13) EBI(12) EBI(11) EBI(10) EBI(9) EBI(8) octet 4 */
2011-02-10 08:28:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi15 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi14 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi13 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi12 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi11 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi10 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-03 22:42:56 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi9 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_ebi8 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
return len ;
2009-01-01 22:54:30 +00:00
}
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 .2 Location area identification
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .1 .3 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
*/
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 .3 Mobile identity
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .1 .4 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
* exported from gsm_a_common
*/
2009-01-06 12:40:45 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 .4 Mobile station classmark 2
2009-01-06 12:40:45 +00:00
* See subclause 10.5 .1 .6 in 3 GPP TS 24.008 [ 13 ] .
*/
2009-01-01 22:54:30 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 .5 Mobile station classmark 3
2009-01-06 12:40:45 +00:00
* See subclause 10.5 .1 .7 in 3 GPP TS 24.008 [ 13 ] .
*/
2009-03-20 20:15:46 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 .6 NAS security parameters from E - UTRA
2009-03-20 20:15:46 +00:00
*/
2011-09-11 19:09:02 +00:00
guint16
2012-12-03 22:42:56 +00:00
de_emm_sec_par_from_eutra ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-03-20 20:15:46 +00:00
{
2010-06-09 17:40:03 +00:00
guint32 curr_offset ;
2009-03-20 20:15:46 +00:00
2010-06-09 17:40:03 +00:00
curr_offset = offset ;
2009-03-20 20:15:46 +00:00
2010-06-09 17:40:03 +00:00
/* DL NAS COUNT value (short) (octet 2, bit 1 to 4)
* This field contains the 4 least significant bits of the binary representation of the downlink
* NAS COUNT value applicable when this information element is sent .
*/
2011-02-10 08:28:18 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , curr_offset < < 3 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_dl_nas_cnt , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2009-03-20 20:15:46 +00:00
2010-06-09 17:40:03 +00:00
return len ;
2009-03-20 20:15:46 +00:00
}
2009-01-06 12:40:45 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .2 .7 NAS security parameters to E - UTRA
2009-03-20 20:15:46 +00:00
*/
2011-09-11 19:09:02 +00:00
guint16
2012-12-03 22:42:56 +00:00
de_emm_sec_par_to_eutra ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-03-20 20:15:46 +00:00
{
2010-06-09 17:40:03 +00:00
guint32 curr_offset ;
curr_offset = offset ;
/* NonceMME value (octet 1 to 5)
* This field is coded as the nonce value in the Nonce information element ( see subclause 9.9 .3 .25 ) .
*/
2011-04-27 22:18:00 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_nonce_mme , tvb , curr_offset , 4 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
curr_offset + = 4 ;
/* type of ciphering algorithm (octet 6, bit 5 to 7)
* These fields are coded as the type of integrity protection algorithm and type of ciphering algorithm
* in the NAS security algorithms information element ( see subclause 9.9 .3 .23 ) .
* Bit 4 and 8 of octet 6 are spare and shall be coded as zero .
*/
2011-02-10 08:28:18 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , curr_offset < < 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_toc , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
/* Type of integrity protection algorithm (octet 6, bit 1 to 3)*/
2011-02-10 08:28:18 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , ( curr_offset < < 3 ) + 4 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_toi , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
curr_offset + + ;
/*
* NAS key set identifier ( octet 7 , bit 1 to 3 ) and
* type of security context flag ( TSC ) ( octet 7 , bit 4 )
* These fields are coded as the NAS key set identifier and type of security context flag in the
* NAS key set identifier information element ( see subclause 9.9 .3 .21 ) .
* Bit 5 to 8 of octet 7 are spare and shall be coded as zero .
*/
2011-02-10 08:28:18 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , curr_offset < < 3 , 4 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
/* Type of security context flag (TSC) V 1/2 */
2011-02-10 08:28:18 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_tsc , tvb , ( curr_offset < < 3 ) + 4 , 1 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
/* NAS key set identifier */
2011-02-10 08:28:18 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_emm_nas_key_set_id , tvb , ( curr_offset < < 3 ) + 5 , 3 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
curr_offset + + ;
return len ;
2010-10-10 20:07:06 +00:00
}
2010-06-09 17:40:03 +00:00
2011-04-27 22:18:00 +00:00
/*
* 9.9 .2 .8 PLMN list
* See subclause 10.5 .1 .13 in 3 GPP TS 24.008 [ 6 ] .
*/
/*
* 9.9 .2 .9 Spare half octet
* This element is used in the description of EMM and ESM messages when an odd number of
* half octet type 1 information elements are used . This element is filled with spare bits
* set to zero and is placed in bits 5 to 8 of the octet unless otherwise specified .
* Coded Inline
*/
2010-06-09 17:40:03 +00:00
/*
* 9.9 .2 .10 Supported codec list
2009-01-06 12:40:45 +00:00
* See subclause 10.5 .4 .32 in 3 GPP TS 24.008 [ 13 ] .
2011-04-27 22:18:00 +00:00
* Dissected in packet - gsm_a_dtap . c
2009-01-06 12:40:45 +00:00
*/
2008-11-29 22:25:22 +00:00
2014-05-02 12:31:23 +00:00
guint16 ( * nas_eps_common_elem_fcn [ ] ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
2012-12-03 22:42:56 +00:00
guint32 offset , guint len ,
gchar * add_string , int string_len ) = {
2010-06-09 17:40:03 +00:00
/* 9.9.2 Common information elements */
2011-04-27 22:18:00 +00:00
de_eps_cmn_add_info , /* 9.9.2.0 Additional information */
2012-05-20 09:50:34 +00:00
NULL , /* 9.9.2.0A Device properties */
2010-06-09 17:40:03 +00:00
de_eps_cmn_eps_be_ctx_status , /* 9.9.2.1 EPS bearer context status */
de_lai , /* 9.9.2.2 Location area identification */
de_mid , /* 9.9.2.3 Mobile identity See subclause 10.5.1.4 in 3GPP TS 24.008*/
de_ms_cm_2 , /* 9.9.2.4 Mobile station classmark 2 */
de_ms_cm_3 , /* 9.9.2.5 Mobile station classmark 3 */
2011-09-11 19:09:02 +00:00
de_emm_sec_par_from_eutra , /* 9.9.2.6 NAS security parameters from E-UTRA */
de_emm_sec_par_to_eutra , /* 9.9.2.7 NAS security parameters to E-UTRA */
2010-06-09 17:40:03 +00:00
de_plmn_list , /* 9.9.2.8 PLMN list */
NULL , /* 9.9.2.10 Supported codec list (packet-gsm_a_dtap.c) */
NULL , /* NONE */
2009-01-01 22:54:30 +00:00
} ;
2013-03-18 22:21:53 +00:00
static const value_string nas_emm_elem_strings [ ] = {
2010-06-09 17:40:03 +00:00
/* 9.9.3 EPS Mobility Management (EMM) information elements */
2013-03-18 20:26:47 +00:00
{ DE_EMM_ADD_UPD_RES , " Additional update result " } , /* 9.9.3.0A Additional update result */
{ DE_EMM_ADD_UPD_TYPE , " Additional update type " } , /* 9.9.3.0B Additional update type */
{ DE_EMM_AUTH_FAIL_PAR , " Authentication failure parameter " } , /* 9.9.3.1 Authentication failure parameter */
{ DE_EMM_AUTN , " Authentication parameter AUTN " } , /* 9.9.3.2 Authentication parameter AUTN */
{ DE_EMM_AUTH_PAR_RAND , " Authentication parameter RAND " } , /* 9.9.3.3 Authentication parameter RAND */
{ DE_EMM_AUTH_RESP_PAR , " Authentication response parameter " } , /* 9.9.3.4 Authentication response parameter */
{ DE_EMM_CSFB_RESP , " CSFB response " } , /* 9.9.3.5 CSFB response */
{ DE_EMM_DAYL_SAV_T , " Daylight saving time " } , /* 9.9.3.6 Daylight saving time */
{ DE_EMM_DET_TYPE , " Detach type " } , /* 9.9.3.7 Detach type */
{ DE_EMM_DRX_PAR , " DRX parameter " } , /* 9.9.3.8 DRX parameter */
{ DE_EMM_CAUSE , " EMM cause " } , /* 9.9.3.9 EMM cause */
{ DE_EMM_ATT_RES , " EPS attach result " } , /* 9.9.3.10 EPS attach result */
{ DE_EMM_ATT_TYPE , " EPS attach type " } , /* 9.9.3.11 EPS attach type */
{ DE_EMM_EPS_MID , " EPS mobile identity " } , /* 9.9.3.12 EPS mobile identity */
{ DE_EMM_EPS_NET_FEATURE_SUP , " EPS network feature support " } , /* 9.9.3.12A EPS network feature support */
{ DE_EMM_EPS_UPD_RES , " EPS update result " } , /* 9.9.3.13 EPS update result */
{ DE_EMM_EPS_UPD_TYPE , " EPS update type " } , /* 9.9.3.14 EPS update type */
{ DE_EMM_ESM_MSG_CONT , " ESM message container " } , /* 9.9.3.15 ESM message conta */
{ DE_EMM_GPRS_TIMER , " GPRS timer " } , /* 9.9.3.16 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. */
{ DE_EMM_GPRS_TIMER_2 , " GPRS timer 2 " } , /* 9.9.3.16A GPRS timer 2, See subclause 10.5.7.4 in 3GPP TS 24.008. */
{ DE_EMM_GPRS_TIMER_3 , " GPRS timer 3 " } , /* 9.9.3.16B GPRS timer 3, See subclause 10.5.7.4a in 3GPP TS 24.008. */
{ DE_EMM_ID_TYPE_2 , " Identity type 2 " } , /* 9.9.3.17 Identity type 2 ,See subclause 10.5.5.9 in 3GPP TS 24.008 [6]. */
{ DE_EMM_IMEISV_REQ , " IMEISV request " } , /* 9.9.3.18 IMEISV request ,See subclause 10.5.5.10 in 3GPP TS 24.008 [6]. */
{ DE_EMM_KSI_AND_SEQ_NO , " KSI and sequence number " } , /* 9.9.3.19 KSI and sequence number */
{ DE_EMM_MS_NET_CAP , " MS network capability " } , /* 9.9.3.20 MS network capability ,See subclause 10.5.5.12 in 3GPP TS 24.008 [6]. */
{ DE_EMM_MS_NET_FEAT_SUP , " MS network feature support " } , /* 9.9.3.20A MS network feature support, See subclause 10.5.1.15 in 3GPP TS 24.008. */
{ DE_EMM_NAS_KEY_SET_ID , " NAS key set identifier " } , /* 9.9.3.21 NAS key set identifier */
{ DE_EMM_NAS_MSG_CONT , " NAS message container " } , /* 9.9.3.22 NAS message container */
{ DE_EMM_NAS_SEC_ALGS , " NAS security algorithms " } , /* 9.9.3.23 NAS security algorithms */
{ DE_EMM_NET_NAME , " Network name " } , /* 9.9.3.24 Network name, See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. */
{ DE_EMM_NONCE , " Nonce " } , /* 9.9.3.25 Nonce */
{ DE_EMM_PAGING_ID , " Paging identity " } , /* 9.9.3.25A Paging identity */
{ DE_EMM_P_TMSI_SIGN , " P-TMSI signature " } , /* 9.9.3.26 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. */
2014-12-04 13:38:35 +00:00
{ DE_EMM_EXT_CAUSE , " Extended EMM cause " } , /* 9.9.3.26A Extended EMM cause */
2013-03-18 20:26:47 +00:00
{ DE_EMM_SERV_TYPE , " Service type " } , /* 9.9.3.27 Service type ,See subclause 10.5.5.15 in 3GPP TS 24.008 [6]. */
{ DE_EMM_SHORT_MAC , " Short MAC " } , /* 9.9.3.28 Short MAC */
{ DE_EMM_TZ , " Time zone " } , /* 9.9.3.29 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. */
{ DE_EMM_TZ_AND_T , " Time zone and time " } , /* 9.9.3.30 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. */
{ DE_EMM_TMSI_STAT , " TMSI status " } , /* 9.9.3.31 TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. */
{ DE_EMM_TRAC_AREA_ID , " Tracking area identity " } , /* 9.9.3.32 Tracking area identity */
{ DE_EMM_TRAC_AREA_ID_LST , " Tracking area identity list " } , /* 9.9.3.33 Tracking area identity list */
{ DE_EMM_UE_NET_CAP , " UE network capability " } , /* 9.9.3.34 UE network capability */
{ DE_EMM_UE_RA_CAP_INF_UPD_NEED , " UE radio capability information update needed " } , /* 9.9.3.35 UE radio capability information update needed */
{ DE_EMM_UE_SEC_CAP , " UE security capability " } , /* 9.9.3.36 UE security capability */
{ DE_EMM_EMERG_NUM_LST , " Emergency Number List " } , /* 9.9.3.37 Emergency Number List */
{ DE_EMM_CLI , " CLI " } , /* 9.9.3.38 CLI */
{ DE_EMM_SS_CODE , " SS Code " } , /* 9.9.3.39 SS Code */
{ DE_EMM_LCS_IND , " LCS indicator " } , /* 9.9.3.40 LCS indicator */
{ DE_EMM_LCS_CLIENT_ID , " LCS client identity " } , /* 9.9.3.41 LCS client identity */
{ DE_EMM_GEN_MSG_CONT_TYPE , " Generic message container type " } , /* 9.9.3.42 Generic message container type */
{ DE_EMM_GEN_MSG_CONT , " Generic message container " } , /* 9.9.3.43 Generic message container */
{ DE_EMM_VOICE_DMN_PREF , " Voice domain preference and UEs usage setting " } , /* 9.9.3.44 Voice domain preference and UEs usage setting */
{ DE_EMM_GUTI_TYPE , " GUTI type " } , /* 9.9.3.45 GUTI type */
2010-06-09 17:40:03 +00:00
{ 0 , NULL }
2008-11-27 21:45:42 +00:00
} ;
2013-03-18 22:21:53 +00:00
value_string_ext nas_emm_elem_strings_ext = VALUE_STRING_EXT_INIT ( nas_emm_elem_strings ) ;
2010-06-09 17:40:03 +00:00
# define NUM_NAS_EMM_ELEM (sizeof(nas_emm_elem_strings) / sizeof(value_string))
2009-03-04 19:51:55 +00:00
gint ett_nas_eps_emm_elem [ NUM_NAS_EMM_ELEM ] ;
2008-11-27 21:45:42 +00:00
2010-12-27 05:33:58 +00:00
#if 0
2012-03-13 17:21:46 +00:00
/* This enum has been moved to packet-gsm_a_common to
2011-04-27 22:18:00 +00:00
make it possible to use element dissection from this dissector
2010-12-27 05:33:58 +00:00
in other dissectors .
It is left here as a comment for easier reference .
2012-03-13 17:21:46 +00:00
*/
/*
2010-12-27 05:33:58 +00:00
Note this enum must be of the same size as the element decoding list
2012-03-13 17:21:46 +00:00
*/
2008-11-27 21:45:42 +00:00
typedef enum
{
2012-03-13 17:21:46 +00:00
/* 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 */
DE_EMM_AUTH_FAIL_PAR , /* 9.9.3.1 Authentication failure parameter (dissected in packet-gsm_a_dtap.c)*/
DE_EMM_AUTN , /* 9.9.3.2 Authentication parameter AUTN */
DE_EMM_AUTH_PAR_RAND , /* 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 */
DE_EMM_DAYL_SAV_T , /* 9.9.3.6 Daylight saving time */
DE_EMM_DET_TYPE , /* 9.9.3.7 Detach type */
DE_EMM_DRX_PAR , /* 9.9.3.8 DRX parameter (dissected in packet-gsm_a_gm.c)*/
DE_EMM_CAUSE , /* 9.9.3.9 EMM cause */
DE_EMM_ATT_RES , /* 9.9.3.10 EPS attach result (Coded inline */
DE_EMM_ATT_TYPE , /* 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 */
DE_EMM_EPS_UPD_RES , /* 9.9.3.13 EPS update result ( Coded inline)*/
DE_EMM_EPS_UPD_TYPE , /* 9.9.3.14 EPS update type */
DE_EMM_ESM_MSG_CONT , /* 9.9.3.15 ESM message conta */
DE_EMM_GPRS_TIMER , /* 9.9.3.16 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. */
2012-05-20 09:50:34 +00:00
DE_EMM_GPRS_TIMER_2 , /* 9.9.3.16A GPRS timer 2, See subclause 10.5.7.4 in 3GPP TS 24.008. */
DE_EMM_GPRS_TIMER_3 , /* 9.9.3.16B GPRS timer 3, See subclause 10.5.7.4a in 3GPP TS 24.008. */
2012-03-13 17:21:46 +00:00
DE_EMM_ID_TYPE_2 , /* 9.9.3.17 Identity type 2 ,See subclause 10.5.5.9 in 3GPP TS 24.008 [6]. */
DE_EMM_IMEISV_REQ , /* 9.9.3.18 IMEISV request ,See subclause 10.5.5.10 in 3GPP TS 24.008 [6]. */
DE_EMM_KSI_AND_SEQ_NO , /* 9.9.3.19 KSI and sequence number */
DE_EMM_MS_NET_CAP , /* 9.9.3.20 MS network capability ,See subclause 10.5.5.12 in 3GPP TS 24.008 [6]. */
2012-05-20 09:50:34 +00:00
DE_EMM_MS_NET_FEAT_SUP , /* 9.9.3.20A MS network feature support, See subclause 10.5.1.15 in 3GPP TS 24.008. */
2012-03-13 17:21:46 +00:00
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_ALGS , /* 9.9.3.23 NAS security algorithms */
DE_EMM_NET_NAME , /* 9.9.3.24 Network name, See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. */
DE_EMM_NONCE , /* 9.9.3.25 Nonce */
DE_EMM_PAGING_ID , /* 9.9.3.25A Paging identity */
DE_EMM_P_TMSI_SIGN , /* 9.9.3.26 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. */
2014-12-04 13:38:35 +00:00
DE_EMM_EXT_CAUSE , /* 9.9.3.26A Extended EMM cause */
2012-03-13 17:21:46 +00:00
DE_EMM_SERV_TYPE , /* 9.9.3.27 Service type */
DE_EMM_SHORT_MAC , /* 9.9.3.28 Short MAC */
DE_EMM_TZ , /* 9.9.3.29 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. */
DE_EMM_TZ_AND_T , /* 9.9.3.30 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. */
DE_EMM_TMSI_STAT , /* 9.9.3.31 TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. */
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 */
DE_EMM_EMERG_NUM_LST , /* 9.9.3.37 Emergency Number List */
DE_EMM_CLI , /* 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 */
DE_EMM_VOICE_DMN_PREF , /* 9.9.3.44 Voice domain preference and UEs usage setting */
2012-05-20 09:50:34 +00:00
DE_EMM_GUTI_TYPE , /* 9.9.3.45 GUTI type */
2012-03-13 17:21:46 +00:00
DE_EMM_NONE /* NONE */
2008-11-27 21:45:42 +00:00
}
nas_emm_elem_idx_t ;
2010-12-27 05:33:58 +00:00
# endif
2012-03-13 17:21:46 +00:00
2009-01-06 12:40:45 +00:00
/* TODO: Update to latest spec */
2010-06-09 17:40:03 +00:00
/* 9.9.3 EPS Mobility Management (EMM) information elements
2010-09-23 14:07:32 +00:00
*/
/*
* 9.9 .3 .0 A Additional update result
*/
static const value_string nas_eps_emm_add_upd_res_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 0x0 , " no additional information " } ,
{ 0x1 , " CS Fallback not preferred " } ,
{ 0x2 , " SMS only " } ,
{ 0x3 , " reserved " } ,
{ 0 , NULL }
2010-09-23 14:07:32 +00:00
} ;
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2010-09-23 14:07:32 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
2010-09-23 14:07:32 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
bit_offset = ( curr_offset < < 3 ) + 4 ;
2010-09-23 14:07:32 +00:00
2011-07-15 16:59:18 +00:00
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 + + ;
2010-09-23 14:07:32 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2010-09-23 14:07:32 +00:00
}
/*
* 9.9 .3 .0 B Additional update type
*/
static const value_string nas_eps_emm_add_upd_type_vals [ ] = {
2012-12-03 22:42:56 +00:00
{ 0x0 , " no additional information (shall be interpreted as request for "
" combined attach or combined tracking area updating) " } ,
2011-07-15 16:59:18 +00:00
{ 0x1 , " SMS only " } ,
{ 0 , NULL }
2010-09-23 14:07:32 +00:00
} ;
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2010-09-23 14:07:32 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
2010-09-23 14:07:32 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
bit_offset = ( curr_offset < < 3 ) + 4 ;
2010-09-23 14:07:32 +00:00
2011-07-15 16:59:18 +00:00
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 + + ;
2010-09-23 14:07:32 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2010-09-23 14:07:32 +00:00
}
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .1 Authentication failure parameter
2008-11-27 21:45:42 +00:00
* See subclause 10.5 .3 .2 .2 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
* ( dissected in packet - gsm_a_dtap . c )
2008-12-08 22:21:49 +00:00
*/
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .2 Authentication parameter AUTN
2008-11-27 21:45:42 +00:00
* See subclause 10.5 .3 .1 .1 in 3 GPP TS 24.008 [ 6 ] .
2008-12-08 22:21:49 +00:00
*/
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .3 Authentication parameter RAND
2008-11-27 21:45:42 +00:00
* See subclause 10.5 .3 .1 in 3 GPP TS 24.008 [ 6 ] .
2008-12-08 22:21:49 +00:00
*/
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .4 Authentication response parameter
2008-12-08 22:21:49 +00:00
*/
2008-12-23 20:49:15 +00:00
static guint16
2012-12-03 22:42:56 +00:00
de_emm_auth_resp_par ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2008-12-16 05:41:39 +00:00
{
2010-06-09 17:40:03 +00:00
guint32 curr_offset ;
2008-12-16 05:41:39 +00:00
2010-06-09 17:40:03 +00:00
curr_offset = offset ;
2008-12-16 05:41:39 +00:00
2011-10-04 22:44:31 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_res , tvb , curr_offset , len , ENC_NA ) ;
2008-12-16 05:41:39 +00:00
2010-06-09 17:40:03 +00:00
return len ;
2008-12-16 05:41:39 +00:00
}
2009-06-11 16:26:31 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .4 A Ciphering key sequence number
2009-06-11 16:26:31 +00:00
* See subclause 9.9 .3 .19 in 3 GPP TS 24.008 [ 13 ] .
*/
2008-12-08 22:21:49 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .5 CSFB response
2009-01-06 12:40:45 +00:00
*/
2009-03-23 17:32:39 +00:00
/*
* CSFB response value ( octet 1 )
*/
static const value_string nas_eps_emm_csfb_resp_vals [ ] = {
2010-06-09 17:40:03 +00:00
{ 0x0 , " CS fallback rejected by the UE " } ,
{ 0x1 , " CS fallback accepted by the UE " } ,
{ 0 , NULL }
2009-03-23 17:32:39 +00:00
} ;
2009-01-07 21:14:25 +00:00
static guint16
2012-12-03 22:42:56 +00:00
de_emm_csfb_resp ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-01-07 21:14:25 +00:00
{
2010-06-09 17:40:03 +00:00
guint32 curr_offset , bit_offset ;
2009-01-07 21:14:25 +00:00
2010-06-09 17:40:03 +00:00
curr_offset = offset ;
2009-01-07 21:14:25 +00:00
2010-06-09 17:40:03 +00:00
/* bit 4 Spare */
bit_offset = curr_offset < < 3 ;
2011-02-10 08:28:18 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , bit_offset + 4 , 1 , ENC_BIG_ENDIAN ) ;
2009-01-07 21:14:25 +00:00
2011-02-10 08:28:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_csfb_resp , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2010-06-09 17:40:03 +00:00
curr_offset + + ;
2009-01-07 21:14:25 +00:00
2010-06-09 17:40:03 +00:00
return ( curr_offset - offset ) ;
2009-01-07 21:14:25 +00:00
}
2009-01-06 12:40:45 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .6 Daylight saving time
2008-11-27 21:45:42 +00:00
* See subclause 10.5 .3 .12 in 3 GPP TS 24.008 [ 6 ] .
2008-12-08 22:21:49 +00:00
*/
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .7 Detach type
2009-06-06 17:03:34 +00:00
* Coded inline
2008-12-23 20:49:15 +00:00
*/
2009-06-06 17:03:34 +00:00
static const value_string nas_eps_emm_switch_off_vals [ ] = {
2010-06-09 17:40:03 +00:00
{ 0x0 , " Normal detach " } ,
{ 0x1 , " Switch off " } ,
2011-04-27 22:18:00 +00:00
{ 0x2 , " Reserved " } ,
{ 0x3 , " Reserved " } ,
{ 0x4 , " Reserved " } ,
{ 0x5 , " Reserved " } ,
{ 0x6 , " Reserved " } ,
{ 0x7 , " Reserved " } ,
2010-06-09 17:40:03 +00:00
{ 0 , NULL }
2009-06-06 17:03:34 +00:00
} ;
/* Type of detach (octet 1)
* In the UE to network direction :
*/
2014-03-27 10:38:06 +00:00
static const value_string nas_eps_emm_type_of_detach_UL_vals [ ] = {
2010-06-09 17:40:03 +00:00
{ 0x1 , " EPS detach " } ,
{ 0x2 , " IMSI detach " } ,
{ 0x3 , " Combined EPS/IMSI detach " } ,
2012-12-03 22:42:56 +00:00
{ 0x4 , " Combined EPS/IMSI detach " } , /* All other values are interpreted as
" combined EPS/IMSI detach " in this version of the protocol . */
2010-06-09 17:40:03 +00:00
{ 0x5 , " Combined EPS/IMSI detach " } , /* -"- */
{ 0x6 , " Reserved " } ,
{ 0x7 , " Reserved " } ,
{ 0 , NULL }
2009-06-06 17:03:34 +00:00
} ;
2009-01-06 12:40:45 +00:00
2010-10-10 20:07:06 +00:00
/*
2009-06-06 17:03:34 +00:00
* In the network to UE direction :
*/
2009-01-06 12:40:45 +00:00
2014-03-27 10:38:06 +00:00
static const value_string nas_eps_emm_type_of_detach_DL_vals [ ] = {
2010-06-09 17:40:03 +00:00
{ 0x1 , " Re-attach required " } ,
{ 0x2 , " Re-attach not required " } ,
{ 0x3 , " IMSI detach " } ,
2012-12-03 22:42:56 +00:00
{ 0x4 , " Re-attach not required " } , /* All other values are interpreted as
" re-attach not required " in this version of the protocol . */
2011-04-27 22:18:00 +00:00
{ 0x5 , " Re-attach not required " } , /* -"- */
2010-06-09 17:40:03 +00:00
{ 0x6 , " Reserved " } ,
{ 0x7 , " Reserved " } ,
{ 0 , NULL }
2009-06-06 17:03:34 +00:00
} ;
2009-01-06 12:40:45 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .8 DRX parameter
2009-01-06 12:40:45 +00:00
* See subclause 10.5 .5 .6 in 3 GPP TS 24.008 [ 13 ] .
2008-12-23 20:49:15 +00:00
*/
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .9 EMM cause
2008-12-01 22:31:17 +00:00
*/
2013-09-29 22:50:27 +00:00
const value_string nas_eps_emm_cause_values [ ] = {
2011-04-27 22:18:00 +00:00
{ 0x2 , " IMSI unknown in HSS " } ,
2011-01-12 07:39:54 +00:00
{ 0x3 , " Illegal UE " } ,
{ 0x5 , " IMEI not accepted " } ,
2010-06-09 17:40:03 +00:00
{ 0x6 , " Illegal ME " } ,
{ 0x7 , " EPS services not allowed " } ,
{ 0x8 , " EPS services and non-EPS services not allowed " } ,
{ 0x9 , " UE identity cannot be derived by the network " } ,
{ 0xa , " Implicitly detached " } ,
{ 0xb , " PLMN not allowed " } ,
{ 0xc , " Tracking Area not allowed " } ,
{ 0xd , " Roaming not allowed in this tracking area " } ,
{ 0xe , " EPS services not allowed in this PLMN " } ,
{ 0xf , " No Suitable Cells In tracking area " } ,
{ 0x10 , " MSC temporarily not reachable " } ,
{ 0x11 , " Network failure " } ,
{ 0x12 , " CS domain not available " } ,
{ 0x13 , " ESM failure " } ,
{ 0x14 , " MAC failure " } ,
{ 0x15 , " Synch failure " } ,
{ 0x16 , " Congestion " } ,
{ 0x17 , " UE security capabilities mismatch " } ,
{ 0x18 , " Security mode rejected, unspecified " } ,
{ 0x19 , " Not authorized for this CSG " } ,
{ 0x1a , " Non-EPS authentication unacceptable " } ,
2012-05-20 09:50:34 +00:00
{ 0x23 , " Requested service option not authorized in this PLMN " } ,
{ 0x27 , " CS service temporarily not available " } ,
2010-06-09 17:40:03 +00:00
{ 0x28 , " No EPS bearer context activated " } ,
2012-10-02 12:46:21 +00:00
{ 0x2a , " Severe network failure " } ,
2010-06-09 17:40:03 +00:00
{ 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 " } ,
{ 0 , NULL }
2009-01-01 22:54:30 +00:00
} ;
2013-09-29 22:50:27 +00:00
value_string_ext nas_eps_emm_cause_values_ext = VALUE_STRING_EXT_INIT ( nas_eps_emm_cause_values ) ;
2009-01-01 22:54:30 +00:00
static guint16
2012-12-03 22:42:56 +00:00
de_emm_cause ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-01-01 22:54:30 +00:00
{
2010-06-09 17:40:03 +00:00
guint32 curr_offset ;
2014-05-16 16:19:17 +00:00
guint8 cause ;
2009-01-01 22:54:30 +00:00
2010-06-09 17:40:03 +00:00
curr_offset = offset ;
2009-01-01 22:54:30 +00:00
2014-05-16 16:19:17 +00:00
cause = tvb_get_guint8 ( tvb , curr_offset ) ;
2011-02-10 08:28:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_cause , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2014-05-16 16:19:17 +00:00
col_append_fstr ( pinfo - > cinfo , COL_INFO , " (%s) " ,
val_to_str_ext_const ( cause , & nas_eps_emm_cause_values_ext , " Unknown " ) ) ;
2010-06-09 17:40:03 +00:00
curr_offset + + ;
2009-01-01 22:54:30 +00:00
2014-02-23 22:36:11 +00:00
return curr_offset - offset ;
}
2008-12-01 22:31:17 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .10 EPS attach result
2008-11-27 21:45:42 +00:00
*/
2008-12-01 22:31:17 +00:00
static const value_string nas_eps_emm_EPS_attach_result_values [ ] = {
2010-06-09 17:40:03 +00:00
{ 0 , " reserved " } ,
{ 1 , " EPS only " } ,
{ 2 , " Combined EPS/IMSI attach " } ,
{ 3 , " reserved " } ,
{ 4 , " reserved " } ,
{ 5 , " reserved " } ,
{ 6 , " reserved " } ,
{ 7 , " reserved " } ,
{ 0 , NULL }
2008-12-01 22:31:17 +00:00
} ;
2008-12-23 20:49:15 +00:00
/* Coded inline */
2008-12-01 22:31:17 +00:00
2008-11-27 21:45:42 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .11 EPS attach type
2008-11-27 21:45:42 +00:00
*/
static const value_string nas_eps_emm_eps_att_type_vals [ ] = {
2010-06-09 17:40:03 +00:00
{ 0 , " EPS attach(unused) " } ,
{ 1 , " EPS attach " } ,
2012-02-29 17:01:57 +00:00
{ 2 , " Combined EPS/IMSI attach " } ,
2010-06-09 17:40:03 +00:00
{ 3 , " EPS attach(unused) " } ,
{ 4 , " EPS attach(unused) " } ,
{ 5 , " EPS attach(unused) " } ,
{ 6 , " EPS emergency attach " } ,
{ 7 , " Reserved " } ,
{ 0 , NULL }
2008-11-27 21:45:42 +00:00
} ;
2008-12-03 06:47:06 +00:00
/* Coded inline */
2008-11-27 21:45:42 +00:00
/*
2010-06-09 17:40:03 +00:00
* 9.9 .3 .12 EPS mobile identity
2008-12-01 22:31:17 +00:00
*/
static const value_string nas_eps_emm_type_of_id_vals [ ] = {
2010-06-09 17:40:03 +00:00
{ 0 , " reserved " } ,
{ 1 , " IMSI " } ,
{ 2 , " reserved " } ,
{ 3 , " IMEI " } ,
{ 4 , " reserved " } ,
{ 5 , " reserved " } ,
{ 6 , " GUTI " } ,
{ 7 , " reserved " } ,
{ 0 , NULL }
2008-12-01 22:31:17 +00:00
} ;
2008-12-23 20:49:15 +00:00
static guint16
2013-05-03 14:54:39 +00:00
de_emm_eps_mid ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
2012-12-03 22:42:56 +00:00
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2008-12-01 22:31:17 +00:00
{
2012-05-07 22:11:34 +00:00
guint32 curr_offset ;
guint8 octet ;
2014-08-19 21:00:57 +00:00
const char * digit_str ;
2010-06-09 17:40:03 +00:00
tvbuff_t * new_tvb ;
curr_offset = offset ;
octet = tvb_get_guint8 ( tvb , offset ) ;
/* Type of identity (octet 3) */
2011-02-10 08:28:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_odd_even , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_emm_type_of_id , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-05-07 22:11:34 +00:00
switch ( octet & 0x7 ) {
2010-06-09 17:40:03 +00:00
case 1 :
/* IMSI */
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , curr_offset , len ) ;
2014-08-19 21:57:18 +00:00
dissect_e212_imsi ( new_tvb , pinfo , tree , 0 , len , TRUE ) ;
2010-06-09 17:40:03 +00:00
break ;
case 3 :
/* IMEI */
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , curr_offset , len ) ;
2014-08-19 21:00:57 +00:00
digit_str = tvb_bcd_dig_to_wmem_packet_str ( new_tvb , 0 , len , NULL , TRUE ) ;
2010-06-09 17:40:03 +00:00
proto_tree_add_string ( tree , hf_nas_eps_emm_imei , new_tvb , 0 , - 1 , digit_str ) ;
2011-07-15 16:59:18 +00:00
break ;
case 6 :
/* GUTI */
curr_offset + + ;
2015-01-14 12:47:08 +00:00
curr_offset = dissect_e212_mcc_mnc ( tvb , pinfo , tree , curr_offset , E212_NONE , TRUE ) ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*curr_offset+=4;*/
2011-07-15 16:59:18 +00:00
break ;
default :
2015-04-05 14:37:06 +00:00
proto_tree_add_expert ( tree , pinfo , & ei_nas_eps_unknown_identity , tvb , curr_offset , len - 1 ) ;
2011-07-15 16:59:18 +00:00
break ;
}
return ( len ) ;
2008-12-01 22:31:17 +00:00
}
2010-09-29 15:41:27 +00:00
2009-10-02 09:23:46 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .12 A EPS network feature support
2009-10-02 09:23:46 +00:00
*/
2012-05-20 09:50:34 +00:00
static const true_false_string nas_eps_emm_esr_ps_value = {
" network supports use of EXTENDED SERVICE REQUEST to request for packet services " ,
" network does not support use of EXTENDED SERVICE REQUEST to request for packet services "
} ;
2010-09-29 15:41:27 +00:00
static const value_string nas_eps_emm_cs_lcs_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 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 }
2010-09-29 15:41:27 +00:00
} ;
static const true_false_string nas_eps_emm_epc_lcs_value = {
2011-07-15 16:59:18 +00:00
" location services via EPC supported " ,
" location services via EPC not supported "
2010-09-29 15:41:27 +00:00
} ;
static const true_false_string nas_eps_emm_emc_bs_value = {
2011-07-15 16:59:18 +00:00
" emergency bearer services in S1 mode supported " ,
" emergency bearer services in S1 mode not supported "
2010-09-29 15:41:27 +00:00
} ;
static const true_false_string nas_eps_emm_ims_vops_value = {
2011-07-15 16:59:18 +00:00
" IMS voice over PS session in S1 mode supported " ,
" IMS voice over PS session in S1 mode not supported "
2010-09-29 15:41:27 +00:00
} ;
2009-10-02 09:23:46 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-10-02 09:23:46 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
curr_offset = offset ;
bit_offset = curr_offset < < 3 ;
2012-05-20 09:50:34 +00:00
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_esr_ps , tvb , bit_offset , 1 , ENC_BIG_ENDIAN ) ;
bit_offset + = 1 ;
proto_tree_add_bits_item ( tree , hf_nas_eps_emm_cs_lcs , tvb , bit_offset , 2 , ENC_BIG_ENDIAN ) ;
2011-07-15 16:59:18 +00:00
bit_offset + = 2 ;
2012-05-20 09:50:34 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_emm_epc_lcs , tvb , bit_offset , 1 , ENC_BIG_ENDIAN ) ;
2011-07-15 16:59:18 +00:00
bit_offset + = 1 ;
2012-05-20 09:50:34 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_emm_emc_bs , tvb , bit_offset , 1 , ENC_BIG_ENDIAN ) ;
2011-07-15 16:59:18 +00:00
bit_offset + = 1 ;
2012-05-20 09:50:34 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_emm_ims_vops , tvb , bit_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset += 1;*/
2011-07-15 16:59:18 +00:00
return len ;
2009-10-02 09:23:46 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .13 EPS update result
2009-01-01 22:54:30 +00:00
*/
static const value_string nas_eps_emm_eps_update_result_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 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 }
2009-01-01 22:54:30 +00:00
} ;
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .14 EPS update type
2008-12-23 20:49:15 +00:00
*/
2009-01-01 22:54:30 +00:00
static const true_false_string nas_eps_emm_active_flg_value = {
2011-07-15 16:59:18 +00:00
" Bearer establishment requested " ,
" No bearer establishment requested "
2009-01-01 22:54:30 +00:00
} ;
static const value_string nas_eps_emm_eps_update_type_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 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 }
2009-01-01 22:54:30 +00:00
} ;
2008-12-23 20:49:15 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .15 ESM message container
2008-12-16 05:41:39 +00:00
*/
2008-12-23 20:49:15 +00:00
static guint16
2013-05-03 14:54:39 +00:00
de_emm_esm_msg_cont ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
2012-12-03 22:42:56 +00:00
guint32 offset , guint len ,
gchar * add_string _U_ , int string_len _U_ )
2008-12-23 20:49:15 +00:00
{
2011-07-15 16:59:18 +00:00
proto_item * item ;
proto_tree * sub_tree ;
2012-05-07 22:11:34 +00:00
tvbuff_t * new_tvb ;
guint32 curr_offset ;
2008-12-23 20:49:15 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2008-12-23 20:49:15 +00:00
2011-10-04 22:44:31 +00:00
item = proto_tree_add_item ( tree , hf_nas_eps_esm_msg_cont , tvb , curr_offset , len , ENC_NA ) ;
2011-07-15 16:59:18 +00:00
sub_tree = proto_item_add_subtree ( item , ett_nas_eps_esm_msg_cont ) ;
2009-03-04 19:51:55 +00:00
2011-07-15 16:59:18 +00:00
/* This IE can contain any ESM PDU as defined in subclause 8.3. */
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , curr_offset , len ) ;
2011-07-15 16:59:18 +00:00
/* Plain NAS message */
2013-05-03 14:54:39 +00:00
disect_nas_eps_esm_msg ( new_tvb , pinfo , sub_tree , 0 /* offset */ ) ;
2008-12-23 20:49:15 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2008-12-23 20:49:15 +00:00
}
2008-12-16 05:41:39 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .16 GPRS timer
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .7 .3 in 3 GPP TS 24.008 [ 6 ] .
2008-12-16 05:41:39 +00:00
* packet - gsm_a_gm . c
*/
2012-05-20 09:50:34 +00:00
/*
* 9.9 .3 .16 A GPRS timer 2
* See subclause 10.5 .7 .4 in 3 GPP TS 24.008 .
* packet - gsm_a_gm . c
*/
/*
* 9.9 .3 .16 B GPRS timer 3
* See subclause 10.5 .7 .4 a in 3 GPP TS 24.008 .
* packet - gsm_a_gm . c
*/
2008-12-16 05:41:39 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .17 Identity type 2
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .5 .9 in 3 GPP TS 24.008 [ 6 ] .
2009-01-06 12:40:45 +00:00
*/
2009-03-19 22:03:33 +00:00
static const value_string nas_eps_emm_id_type2_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 1 , " IMSI " } ,
{ 2 , " IMEI " } ,
{ 3 , " IMEISV " } ,
{ 4 , " TMSI " } ,
{ 0 , NULL }
2009-03-19 22:03:33 +00:00
} ;
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .18 IMEISV request
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .5 .10 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
*/
2009-03-30 20:03:04 +00:00
/* IMEISV request value (octet 1) */
static const value_string nas_eps_emm_imeisv_req_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 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 }
2009-03-30 20:03:04 +00:00
} ;
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-30 20:03:04 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2012-05-07 22:11:34 +00:00
int bit_offset ;
2009-03-30 20:03:04 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-03-30 20:03:04 +00:00
2011-07-15 16:59:18 +00:00
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 + + ;
2009-03-30 20:03:04 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2009-03-30 20:03:04 +00:00
}
2009-01-01 22:54:30 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .19 KSI and sequence number
2009-01-01 22:54:30 +00:00
*/
2009-06-06 17:03:34 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-06-06 17:03:34 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2012-05-07 22:11:34 +00:00
int bit_offset ;
2009-06-06 17:03:34 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
bit_offset = curr_offset < < 3 ;
2009-06-06 17:03:34 +00:00
2011-07-15 16:59:18 +00:00
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 + + ;
2009-06-06 17:03:34 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2009-06-06 17:03:34 +00:00
}
2009-01-01 22:54:30 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .20 MS network capability
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .5 .12 in 3 GPP TS 24.008 [ 6 ] .
2012-05-20 09:50:34 +00:00
* packet - gsm_a_gm . c
*/
/*
* 9.9 .3 .20 A MS network feature support
* See subclause 10.5 .1 .15 in 3 GPP TS 24.008 .
* packet - gsm_a_gm . c
2008-12-01 22:31:17 +00:00
*/
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .21 NAS key set identifier
2008-12-01 22:31:17 +00:00
*/
2009-01-06 12:40:45 +00:00
/*
2009-03-20 20:15:46 +00:00
* Type of security context flag ( TSC ) ( octet 1 )
*/
2012-05-20 09:50:34 +00:00
static const true_false_string nas_eps_tsc_value = {
" Mapped security context (for KSIsgsn) " ,
" Native security context (for KSIasme) "
2009-03-20 20:15:46 +00:00
} ;
2011-07-15 16:59:18 +00:00
/* NAS key set identifier (octet 1) Bits 3 2 1 */
2008-12-01 22:31:17 +00:00
static const value_string nas_eps_emm_NAS_key_set_identifier_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 0 , " " } ,
{ 1 , " " } ,
{ 2 , " " } ,
{ 3 , " " } ,
{ 4 , " " } ,
{ 5 , " " } ,
{ 6 , " " } ,
{ 7 , " No key is available " } ,
{ 0 , NULL }
2008-12-01 22:31:17 +00:00
} ;
2009-03-20 20:15:46 +00:00
2010-06-09 17:40:03 +00:00
/* Takes bit offset as input and consumes 4 bits */
2009-03-20 20:15:46 +00:00
static void
2010-06-09 17:40:03 +00:00
de_emm_nas_key_set_id_bits ( tvbuff_t * tvb , proto_tree * tree , guint32 bit_offset , const gchar * add_string )
2009-03-20 20:15:46 +00:00
{
2011-07-15 16:59:18 +00:00
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 ) ;
2012-05-07 22:11:34 +00:00
if ( add_string ) {
2011-07-15 16:59:18 +00:00
proto_item_append_text ( item , " %s " , add_string ) ;
}
2012-03-02 11:05:08 +00:00
/*bit_offset+=3;*/
2009-03-20 20:15:46 +00:00
}
/*
* Note used for TV Short
*/
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-20 20:15:46 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2010-10-10 20:07:06 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=3;*/
2011-07-15 16:59:18 +00:00
curr_offset + + ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2009-03-20 20:15:46 +00:00
}
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .22 NAS message container
2009-01-06 12:40:45 +00:00
*/
static guint16
2013-05-03 14:54:39 +00:00
de_emm_nas_msg_cont ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
2012-12-03 22:42:56 +00:00
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-01-06 12:40:45 +00:00
{
2011-10-12 21:17:23 +00:00
proto_item * item ;
proto_tree * sub_tree ;
2012-05-07 22:11:34 +00:00
tvbuff_t * new_tvb ;
guint32 curr_offset ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
/* 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 3 GPP TS 24.011 [ 13 A ] .
*/
2009-03-20 20:15:46 +00:00
2011-10-12 21:17:23 +00:00
item = proto_tree_add_item ( tree , hf_nas_eps_nas_msg_cont , tvb , curr_offset , len , ENC_NA ) ;
sub_tree = proto_item_add_subtree ( item , ett_nas_eps_nas_msg_cont ) ;
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , curr_offset , len ) ;
2012-05-07 22:11:34 +00:00
if ( gsm_a_dtap_handle )
2013-05-03 14:54:39 +00:00
call_dissector ( gsm_a_dtap_handle , new_tvb , pinfo , sub_tree ) ;
2010-10-10 20:07:06 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2009-01-06 12:40:45 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .23 NAS security algorithms
2008-12-23 20:49:15 +00:00
*/
2009-03-30 20:03:04 +00:00
/* Type of integrity protection algorithm (octet 2, bit 1 to 3) */
static const value_string nas_eps_emm_toi_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 0 , " EPS integrity algorithm EIA0 (null integrity protection algorithm) " } ,
{ 1 , " EPS integrity algorithm 128-EIA1 " } ,
{ 2 , " EPS integrity algorithm 128-EIA2 " } ,
2012-10-02 12:46:21 +00:00
{ 3 , " EPS integrity algorithm 128-EIA3 " } ,
2011-07-15 16:59:18 +00:00
{ 4 , " EPS integrity algorithm EIA4 " } ,
{ 5 , " EPS integrity algorithm EIA5 " } ,
{ 6 , " EPS integrity algorithm EIA6 " } ,
{ 7 , " EPS integrity algorithm EIA7 " } ,
{ 0 , NULL }
2009-03-30 20:03:04 +00:00
} ;
/* Type of ciphering algorithm (octet 2, bit 5 to 7) */
static const value_string nas_eps_emm_toc_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 0 , " EPS encryption algorithm EEA0 (null ciphering algorithm) " } ,
{ 1 , " EPS encryption algorithm 128-EEA1 " } ,
{ 2 , " EPS encryption algorithm 128-EEA2 " } ,
2012-10-02 12:46:21 +00:00
{ 3 , " EPS encryption algorithm 128-EEA3 " } ,
2011-07-15 16:59:18 +00:00
{ 4 , " EPS encryption algorithm EEA4 " } ,
{ 5 , " EPS encryption algorithm EEA5 " } ,
{ 6 , " EPS encryption algorithm EEA6 " } ,
{ 7 , " EPS encryption algorithm EEA7 " } ,
{ 0 , NULL }
2009-03-30 20:03:04 +00:00
} ;
2008-12-23 20:49:15 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2008-12-23 20:49:15 +00:00
{
2012-05-07 22:11:34 +00:00
int bit_offset ;
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2008-12-23 20:49:15 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2008-12-23 20:49:15 +00:00
2011-07-15 16:59:18 +00:00
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 ) ;
2008-12-23 20:49:15 +00:00
2011-07-15 16:59:18 +00:00
curr_offset + + ;
2008-12-23 20:49:15 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2008-12-23 20:49:15 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .24 Network name
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .3 .5 a in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
*/
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .25 Nonce
2009-01-01 22:54:30 +00:00
*/
2009-01-06 12:40:45 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-01-06 12:40:45 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_nonce , tvb , curr_offset , 4 , ENC_BIG_ENDIAN ) ;
curr_offset + = 4 ;
2009-01-06 12:40:45 +00:00
2011-11-22 17:44:50 +00:00
return ( curr_offset - offset ) ;
2009-01-06 12:40:45 +00:00
}
2009-10-02 09:23:46 +00:00
/*
* 9.9 .3 .25 A Paging identity
*/
2011-04-27 22:18:00 +00:00
static const true_false_string nas_eps_emm_paging_id_vals = {
2011-07-15 16:59:18 +00:00
" TMSI " ,
" IMSI "
2011-04-27 22:18:00 +00:00
} ;
2011-05-17 14:41:01 +00:00
2009-10-02 09:23:46 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-10-02 09:23:46 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-10-02 09:23:46 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-10-02 09:23:46 +00:00
2011-07-15 16:59:18 +00:00
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 ) ;
2014-02-23 22:36:11 +00:00
/*curr_offset+=1;*/
2009-10-02 09:23:46 +00:00
2014-02-23 22:36:11 +00:00
return ( 1 ) ;
2009-10-02 09:23:46 +00:00
}
2009-01-01 22:54:30 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .26 P - TMSI signature
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .5 .8 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
*/
2014-12-04 13:38:35 +00:00
/*
* 9.9 .3 .26 A Extended EMM cause
*/
static const true_false_string nas_eps_ext_emm_cause = {
" E-UTRAN not allowed " ,
" E-UTRAN allowed "
} ;
static guint16
de_emm_ext_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 , bit_offset ;
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_ext_emm_cause , tvb , bit_offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + + ;
return ( curr_offset - offset ) ;
}
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .27 Service type
2009-01-01 22:54:30 +00:00
*/
2012-05-20 09:50:34 +00:00
static const range_string nas_eps_service_type_vals [ ] = {
{ 0 , 0 , " Mobile originating CS fallback or 1xCS fallback " } ,
{ 1 , 1 , " Mobile terminating CS fallback or 1xCS fallback " } ,
{ 2 , 2 , " Mobile originating CS fallback emergency call or 1xCS fallback emergency call " } ,
{ 3 , 4 , " Mobile originating CS fallback or 1xCS fallback " } ,
2015-06-25 02:34:26 +00:00
{ 8 , 11 , " Packet services via S1 " } ,
2012-05-20 09:50:34 +00:00
{ 0 , 0 , NULL }
2009-01-07 21:14:25 +00:00
} ;
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .28 Short MAC
2009-01-01 22:54:30 +00:00
*/
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_short_mac , tvb , curr_offset , 2 , ENC_BIG_ENDIAN ) ;
curr_offset + = 2 ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2009-01-01 22:54:30 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .29 Time zone
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .3 .8 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
*/
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .30 Time zone and time
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .3 .9 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
*/
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .31 TMSI status
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .5 .4 in 3 GPP TS 24.008 [ 6 ] .
2009-01-01 22:54:30 +00:00
*/
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .32 Tracking area identity
2008-12-17 23:16:57 +00:00
*/
2009-04-20 20:31:33 +00:00
2011-01-25 13:57:59 +00:00
guint16
2013-05-03 14:54:39 +00:00
de_emm_trac_area_id ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
2012-12-03 22:42:56 +00:00
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-01-06 12:40:45 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-01-06 12:40:45 +00:00
2015-01-14 12:47:08 +00:00
curr_offset = dissect_e212_mcc_mnc ( tvb , pinfo , tree , curr_offset , E212_NONE , TRUE ) ;
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_tai_tac , tvb , curr_offset , 2 , ENC_BIG_ENDIAN ) ;
curr_offset + = 2 ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2009-01-06 12:40:45 +00:00
}
2008-12-17 23:16:57 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .33 Tracking area identity list
2008-12-17 23:16:57 +00:00
*/
2010-10-10 20:07:06 +00:00
/* Type of list (octet 1)
2009-04-20 20:31:33 +00:00
* Bits 7 6
*/
static const value_string nas_eps_emm_tai_tol_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 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 }
2009-04-20 20:31:33 +00:00
} ;
2008-12-23 20:49:15 +00:00
static guint16
2013-05-03 14:54:39 +00:00
de_emm_trac_area_id_lst ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
2012-12-03 22:42:56 +00:00
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2008-12-17 23:16:57 +00:00
{
2011-07-15 16:59:18 +00:00
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 ) ;
2012-05-07 22:11:34 +00:00
if ( n_elem < 16 )
2011-07-15 16:59:18 +00:00
proto_item_append_text ( item , " [+1 = %u element(s)] " , n_elem ) ;
curr_offset + + ;
2012-05-07 22:11:34 +00:00
if ( tol > 2 ) {
2015-04-05 14:37:06 +00:00
proto_tree_add_expert ( tree , pinfo , & ei_nas_eps_unknown_type_of_list , tvb , curr_offset , len - ( curr_offset - offset ) ) ;
2011-07-15 16:59:18 +00:00
return len ;
}
2012-05-07 22:11:34 +00:00
switch ( tol ) {
2011-07-15 16:59:18 +00:00
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
*/
2015-01-14 12:47:08 +00:00
curr_offset = dissect_e212_mcc_mnc ( tvb , pinfo , tree , curr_offset , E212_NONE , TRUE ) ;
2011-07-15 16:59:18 +00:00
/* type of list = "000" */
/* TAC 1 octet 5
* TAC 1 ( continued ) octet 6
* . . .
* . . .
* TAC k octet 2 k + 3 *
* TAC k ( continued ) octet 2 k + 4 *
*/
2012-05-07 22:11:34 +00:00
if ( len < ( guint ) ( 4 + ( n_elem * 2 ) ) ) {
2015-04-05 14:37:06 +00:00
proto_tree_add_expert ( tree , pinfo , & ei_nas_eps_wrong_nb_of_elems , tvb , curr_offset , len - ( curr_offset - offset ) ) ;
2011-07-15 16:59:18 +00:00
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
*/
2015-01-14 12:47:08 +00:00
curr_offset = dissect_e212_mcc_mnc ( tvb , pinfo , tree , curr_offset , E212_NONE , TRUE ) ;
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_tai_tac , tvb , curr_offset , 2 , ENC_BIG_ENDIAN ) ;
curr_offset + = 2 ;
break ;
case 2 :
2012-05-07 22:11:34 +00:00
if ( len < ( guint ) ( 1 + ( n_elem * 5 ) ) ) {
2015-04-05 14:37:06 +00:00
proto_tree_add_expert ( tree , pinfo , & ei_nas_eps_wrong_nb_of_elems , tvb , curr_offset , len - ( curr_offset - offset ) ) ;
2011-07-15 16:59:18 +00:00
return len ;
}
2012-05-07 22:11:34 +00:00
for ( i = 0 ; i < n_elem ; i + + ) {
2011-07-15 16:59:18 +00:00
/* 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
*/
2015-01-14 12:47:08 +00:00
curr_offset = dissect_e212_mcc_mnc ( tvb , pinfo , tree , curr_offset , E212_NONE , TRUE ) ;
2011-07-15 16:59:18 +00:00
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 ;
}
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( len , curr_offset - offset , pinfo , & ei_nas_eps_extraneous_data ) ;
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2009-01-06 12:40:45 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .34 UE network capability
2009-01-06 12:40:45 +00:00
*/
2009-03-20 20:15:46 +00:00
2009-03-19 22:03:33 +00:00
static const true_false_string nas_eps_emm_supported_flg_value = {
2011-07-15 16:59:18 +00:00
" Supported " ,
" Not Supported "
2009-03-19 22:03:33 +00:00
} ;
2009-03-22 21:20:56 +00:00
static const true_false_string nas_eps_emm_ucs2_supp_flg_value = {
2011-07-15 16:59:18 +00:00
" 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 "
2009-03-22 21:20:56 +00:00
} ;
2014-12-04 13:38:35 +00:00
/* ProSe-dd capability (octet 7, bit 8) */
static const true_false_string nas_eps_emm_prose_dd_cap_flg = {
" ProSe direct discovery supported " ,
" ProSe direct discovery not supported "
} ;
/* ProSe capability (octet 7, bit 7) */
static const true_false_string nas_eps_emm_prose_cap_flg = {
" ProSe supported " ,
" ProSe not supported "
} ;
2012-10-02 12:46:21 +00:00
/* H.245-ASH capability (octet 7, bit 6) */
static const true_false_string nas_eps_emm_h245_ash_cap_flg = {
" H.245 after SRVCC handover capability supported " ,
" H.245 after SRVCC handover capability not supported "
} ;
2012-05-20 09:50:34 +00:00
/* ACC-CSFB capability (octet 7, bit 5) */
static const true_false_string nas_eps_emm_acc_csfb_cap_flg = {
" eNodeB-based access class control for CSFB supported " ,
" eNodeB-based access class control for CSFB not supported "
} ;
2011-04-27 22:18:00 +00:00
/* LPP capability (octet 7, bit 4) */
static const true_false_string nas_eps_emm_lpp_cap_flg = {
2011-07-15 16:59:18 +00:00
" LTE Positioning Protocol supported " ,
" LTE Positioning Protocol not supported "
2011-04-27 22:18:00 +00:00
} ;
/* LCS capability (octet 7, bit 3) */
static const true_false_string nas_eps_emm_lcs_cap_flg = {
2011-07-15 16:59:18 +00:00
" Location services notification mechanisms supported " ,
" Location services notification mechanisms not supported "
2011-04-27 22:18:00 +00:00
} ;
2009-03-22 21:20:56 +00:00
/* 1xSRVCC capability (octet 7, bit 2) */
static const true_false_string nas_eps_emm_1xsrvcc_cap_flg = {
2011-07-15 16:59:18 +00:00
" SRVCC from E-UTRAN to cdma2000 1xCS supported " ,
" SRVCC from E-UTRAN to cdma2000 1x CS not supported "
2009-03-22 21:20:56 +00:00
} ;
2011-04-27 22:18:00 +00:00
/* NF capability (octet 7, bit 1) */
static const true_false_string nas_eps_emm_nf_cap_flg = {
2011-07-15 16:59:18 +00:00
" Notification procedure supported " ,
" Notification procedure not supported "
2011-04-27 22:18:00 +00:00
} ;
2014-12-04 13:38:35 +00:00
/* ProSe-dc capability (octet 8, bit 1) */
static const true_false_string nas_eps_emm_prose_dc_cap_flg = {
" ProSe direct communication supported " ,
" ProSe direct communication not supported "
} ;
2009-03-22 21:20:56 +00:00
2011-01-07 15:21:23 +00:00
guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-01-06 12:40:45 +00:00
{
2011-07-15 16:59:18 +00:00
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 ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA4 supported (octet 3, bit 4) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_eea4 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA5 supported (octet 3, bit 3) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_eea5 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA6 supported (octet 3, bit 2) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_eea6 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA7 supported (octet 3, bit 1) */
2011-07-15 16:59:18 +00:00
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 ) ;
2012-10-02 12:46:21 +00:00
/* EPS integrity algorithm 128-EIA3 supported (octet 4, bit 5) */
2011-07-15 16:59:18 +00:00
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 ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm 128-UEA1 supported (octet 5, bit 7) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea1 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm 128-UEA2 supported (octet 5, bit 6) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea2 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm 128-UEA3 supported (octet 5, bit 5) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea3 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm 128-UEA4 supported (octet 5, bit 4) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea4 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm 128-UEA5 supported (octet 5, bit 3) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea5 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm 128-UEA6 supported (octet 5, bit 2) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea6 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm 128-UEA7 supported (octet 5, bit 1) */
2011-07-15 16:59:18 +00:00
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 ) ;
2012-12-29 17:10:04 +00:00
/* UMTS integrity algorithm UIA2 supported (octet 6, bit 6) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uia2 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS integrity algorithm UIA3 supported (octet 6, bit 5) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uia3 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS integrity algorithm UIA4 supported (octet 6, bit 4) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uia4 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS integrity algorithm UIA5 supported (octet 6, bit 3) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uia5 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS integrity algorithm UIA6 supported (octet 6, bit 2) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uia6 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS integrity algorithm UIA7 supported (octet 6, bit 1) */
2011-07-15 16:59:18 +00:00
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 ) ;
2014-12-04 13:38:35 +00:00
/* ProSe-dd capability (octet 7, bit 8) */
proto_tree_add_item ( tree , hf_nas_eps_emm_prose_dd_cap , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
/* ProSe capability (octet 7, bit 7) */
proto_tree_add_item ( tree , hf_nas_eps_emm_prose_cap , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-02 12:46:21 +00:00
/* H.245-ASH capability (octet 7, bit 6) */
proto_tree_add_item ( tree , hf_nas_eps_emm_h245_ash_cap , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-05-20 09:50:34 +00:00
/* ACC-CSFB capability (octet 7, bit 5) */
proto_tree_add_item ( tree , hf_nas_eps_emm_acc_csfb_cap , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2011-07-15 16:59:18 +00:00
/* 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 + + ;
2013-10-13 19:56:52 +00:00
2014-12-04 13:38:35 +00:00
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* Bits 8 to 2 of octet 8 are spare and shall be coded as zero. */
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , ( curr_offset < < 3 ) , 7 , ENC_BIG_ENDIAN ) ;
/* ProSe-dc capability (octet 8, bit 1) */
proto_tree_add_item ( tree , hf_nas_eps_emm_prose_dc_cap , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + + ;
2012-12-29 17:10:04 +00:00
while ( ( curr_offset - offset ) < len ) {
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , ( curr_offset < < 3 ) , 8 , ENC_BIG_ENDIAN ) ;
curr_offset + + ;
}
2011-07-15 16:59:18 +00:00
return ( len ) ;
2009-01-06 12:40:45 +00:00
}
2009-03-22 21:20:56 +00:00
/* 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 = {
2011-07-15 16:59:18 +00:00
" UE radio capability information update needed " ,
" UE radio capability information update not needed "
2009-03-22 21:20:56 +00:00
} ;
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .35 UE radio capability information update needed
2009-01-06 12:40:45 +00:00
*/
2009-01-07 21:14:25 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-01-07 21:14:25 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-01-07 21:14:25 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-01-07 21:14:25 +00:00
2012-10-02 12:46:21 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , ( curr_offset < < 3 ) + 4 , 3 , ENC_BIG_ENDIAN ) ;
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2009-01-07 21:14:25 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2009-01-07 21:14:25 +00:00
}
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .36 UE security capability
2009-01-06 12:40:45 +00:00
*/
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-01-06 12:40:45 +00:00
{
2011-07-15 16:59:18 +00:00
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 ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA4 supported (octet 3, bit 4) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_eea4 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA5 supported (octet 3, bit 3) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_eea5 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA6 supported (octet 3, bit 2) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_eea6 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* EPS encryption algorithm EEA7 supported (octet 3, bit 1) */
2011-07-15 16:59:18 +00:00
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 ) ;
2012-10-02 12:46:21 +00:00
/* EPS integrity algorithm 128-EIA3 supported (octet 4, bit 5) */
2011-07-15 16:59:18 +00:00
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 .
*/
2012-05-07 22:11:34 +00:00
if ( len = = 2 )
2011-07-15 16:59:18 +00:00
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 ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm UEA4 supported (octet 5, bit 4) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea4 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm UEA5 supported (octet 5, bit 3) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea5 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm UEA6 supported (octet 5, bit 2) */
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_uea6 , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-12-29 17:10:04 +00:00
/* UMTS encryption algorithm UEA7 supported (octet 5, bit 1) */
2011-07-15 16:59:18 +00:00
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 + + ;
2012-05-07 22:11:34 +00:00
if ( len = = 4 )
2011-07-15 16:59:18 +00:00
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 ) ;
2008-12-17 23:16:57 +00:00
}
2009-03-19 22:03:33 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .37 Emergency Number List
2009-03-19 22:03:33 +00:00
* See subclause 10.5 .3 .13 in 3 GPP TS 24.008 [ 13 ] .
2009-04-26 16:17:00 +00:00
* packet - gsm_a_dtap . c
2009-03-19 22:03:33 +00:00
*/
2009-03-20 20:15:46 +00:00
2009-03-19 22:03:33 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .38 CLI
2009-03-19 22:03:33 +00:00
*/
2009-03-20 20:15:46 +00:00
2009-03-19 22:03:33 +00:00
/*
* The coding of the CLI value part is the same as for octets 3 to 14
2010-10-10 20:07:06 +00:00
* of the Calling party BCD number information element defined in
2009-03-19 22:03:33 +00:00
* subclause 10.5 .4 .9 of 3 GPP TS 24.008
*/
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .39 SS Code
2009-03-19 22:03:33 +00:00
*/
2009-03-20 20:15:46 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-20 20:15:46 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
/*
* SS Code value
* The coding of the SS Code value is given in subclause 17.7 .5 of 3 GPP TS 29.002 [ 15 B ] .
* value string imported from gsm map
*/
proto_tree_add_item ( tree , hf_nas_eps_emm_ss_code , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2009-03-20 20:15:46 +00:00
}
2009-03-19 22:03:33 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .40 LCS indicator
2009-03-19 22:03:33 +00:00
*/
2009-04-25 17:46:16 +00:00
/* LCS indicator value */
static const value_string nas_eps_emm_lcs_ind_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 0 , " Normal, unspecified " } ,
{ 1 , " MT-LR " } ,
{ 0 , NULL }
2009-04-25 17:46:16 +00:00
} ;
2009-03-20 20:15:46 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-20 20:15:46 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_lcs_ind , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2009-03-20 20:15:46 +00:00
}
2009-03-19 22:03:33 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .3 .41 LCS client identity
2009-03-19 22:03:33 +00:00
*/
2009-03-20 20:15:46 +00:00
static guint16
2013-05-03 14:54:39 +00:00
de_emm_lcs_client_id ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
2012-12-03 22:42:56 +00:00
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2009-03-20 20:15:46 +00:00
{
2012-05-07 22:11:34 +00:00
guint32 curr_offset ;
2011-07-15 16:59:18 +00:00
tvbuff_t * new_tvb ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
/* LCS client identity (value part)
* The coding of the value part of the LCS client identity is given
* in subclause 17.7 .13 of 3 GPP TS 29.002 [ 15 B ] ( GSM MAP ) .
*/
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , curr_offset , len ) ;
2013-05-03 14:54:39 +00:00
dissect_gsm_map_lcs_LCS_ClientID_PDU ( new_tvb , pinfo , tree , NULL ) ;
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2009-03-20 20:15:46 +00:00
}
2009-03-19 22:03:33 +00:00
2010-10-10 20:07:06 +00:00
/*
* 9.9 .3 .42 Generic message container type
2010-04-19 20:12:26 +00:00
*/
2012-05-20 09:50:34 +00:00
static const range_string nas_eps_emm_gen_msg_cont_type_vals [ ] = {
{ 0 , 0 , " Reserved " } ,
{ 1 , 1 , " LTE Positioning Protocol (LPP) message container " } ,
{ 2 , 2 , " Location services message container " } ,
{ 3 , 127 , " Unused " } ,
{ 128 , 255 , " Reserved " } ,
{ 0 , 0 , NULL }
2011-04-27 22:18:00 +00:00
} ;
2010-04-19 20:12:26 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2010-04-19 20:12:26 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2010-04-19 20:12:26 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2010-04-19 20:12:26 +00:00
2011-10-12 21:17:23 +00:00
eps_nas_gen_msg_cont_type = tvb_get_guint8 ( tvb , curr_offset ) ;
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_gen_msg_cont_type , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + + ;
2010-04-19 20:12:26 +00:00
2011-10-13 18:22:55 +00:00
return ( curr_offset - offset ) ;
2010-04-19 20:12:26 +00:00
}
2010-10-10 20:07:06 +00:00
/*
2010-04-19 20:12:26 +00:00
* 9.9 .3 .43 Generic message container
*/
static guint16
2012-12-03 22:42:56 +00:00
de_emm_gen_msg_cont ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo ,
guint32 offset , guint len ,
gchar * add_string _U_ , int string_len _U_ )
2010-04-19 20:12:26 +00:00
{
2011-10-12 21:17:23 +00:00
proto_item * item ;
proto_tree * sub_tree ;
2012-05-07 22:11:34 +00:00
tvbuff_t * new_tvb ;
2011-10-12 21:17:23 +00:00
item = proto_tree_add_item ( tree , hf_nas_eps_gen_msg_cont , tvb , offset , len , ENC_NA ) ;
sub_tree = proto_item_add_subtree ( item , ett_nas_eps_gen_msg_cont ) ;
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , offset , len ) ;
2011-10-12 21:17:23 +00:00
switch ( eps_nas_gen_msg_cont_type ) {
2012-05-07 22:11:34 +00:00
case 1 :
/* LPP */
if ( lpp_handle ) {
call_dissector ( lpp_handle , new_tvb , pinfo , sub_tree ) ;
}
break ;
case 2 :
/* Location services */
if ( gsm_a_dtap_handle ) {
call_dissector ( gsm_a_dtap_handle , new_tvb , pinfo , sub_tree ) ;
}
break ;
default :
break ;
2011-10-12 21:17:23 +00:00
}
2011-07-15 16:59:18 +00:00
return ( len ) ;
2010-04-19 20:12:26 +00:00
}
2010-10-10 20:07:06 +00:00
/*
2010-04-19 20:12:26 +00:00
* 9.9 .3 .44 Voice domain preference and UE ' s usage setting
2011-04-27 22:18:00 +00:00
* See subclause 10.5 .5 .28 in 3 GPP TS 24.008 [ 13 ] .
* packet - gsm_a_dtap . c
2010-04-19 20:12:26 +00:00
*/
2012-05-20 09:50:34 +00:00
/*
* 9.9 .3 .45 GUTI type
*/
static const true_false_string nas_eps_emm_guti_type_value = {
" Mapped GUTI " ,
" Native GUTI "
} ;
static guint16
2012-12-03 22:42:56 +00:00
de_emm_guti_type ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len _U_ ,
gchar * add_string _U_ , int string_len _U_ )
2012-05-20 09:50:34 +00:00
{
guint32 curr_offset , bit_offset ;
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_guti_type , tvb , bit_offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + + ;
return ( curr_offset - offset ) ;
}
2010-04-19 20:12:26 +00:00
2011-04-27 22:18:00 +00:00
/*
2011-07-15 16:59:18 +00:00
* 9.9 .4 EPS Session Management ( ESM ) information elements
2009-03-04 19:51:55 +00:00
*/
/*
* 9.9 .4 .1 Access point name
2008-11-29 22:25:22 +00:00
* See subclause 10.5 .6 .1 in 3 GPP TS 24.008 [ 6 ] .
2009-03-04 19:51:55 +00:00
*/
/*
* 9.9 .4 .2 APN aggregate maximum bit rate
2009-03-22 21:20:56 +00:00
*/
2009-04-20 20:31:33 +00:00
2009-03-22 21:20:56 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2012-05-07 22:11:34 +00:00
guint8 octet ;
2011-07-15 16:59:18 +00:00
guint32 dl_total = 0 ;
guint32 ul_total = 0 ;
2012-05-07 22:11:34 +00:00
guint32 bitrate = 0 ;
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
/* APN-AMBR for downlink octet 3 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2011-07-15 16:59:18 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_emm_apn_ambr_dl , tvb , curr_offset , 1 , octet ,
" Reserved " ) ;
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
bitrate = calc_bitrate ( octet ) ;
2014-11-14 09:07:52 +00:00
dl_total = bitrate ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_dl , tvb , curr_offset , 1 , octet ,
" %u kbps " , bitrate ) ;
2011-07-15 16:59:18 +00:00
}
curr_offset + + ;
/* APN-AMBR for uplink octet 4 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2011-07-15 16:59:18 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_emm_apn_ambr_ul , tvb , curr_offset , 1 , octet ,
" Reserved " ) ;
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
bitrate = calc_bitrate ( octet ) ;
2014-11-14 09:07:52 +00:00
ul_total = bitrate ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_ul , tvb , curr_offset , 1 , octet ,
" %u kbps " , bitrate ) ;
2011-07-15 16:59:18 +00:00
}
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* APN-AMBR for downlink (extended) octet 5 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2011-07-15 16:59:18 +00:00
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 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
bitrate = calc_bitrate_ext ( octet ) ;
2014-11-14 09:07:52 +00:00
dl_total = ( octet > 0x4a ) ? bitrate * 1000 : bitrate ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_dl_ext , tvb , curr_offset , 1 , octet ,
" %u %s " , bitrate , ( octet > 0x4a ) ? " Mbps " : " kbps " ) ;
2011-07-15 16:59:18 +00:00
}
if ( len < 5 ) {
/* APN-AMBR for downlink (extended-2) is not present; display total now */
if ( dl_total > = 1000 ) {
2015-04-05 14:37:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_dl_total , tvb , curr_offset , 1 , dl_total , " %.3f Mbps " , ( gfloat ) dl_total / 1000 ) ;
} else {
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_dl_total , tvb , curr_offset , 1 , dl_total , " %u kbps " , dl_total ) ;
2011-07-15 16:59:18 +00:00
}
}
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* APN-AMBR for uplink (extended) octet 6 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2011-07-15 16:59:18 +00:00
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 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
bitrate = calc_bitrate_ext ( octet ) ;
2014-11-14 09:07:52 +00:00
ul_total = ( octet > 0x4a ) ? bitrate * 1000 : bitrate ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_ul_ext , tvb , curr_offset , 1 , octet ,
" %u %s " , bitrate , ( octet > 0x4a ) ? " Mbps " : " kbps " ) ;
2011-07-15 16:59:18 +00:00
}
if ( len < 6 ) {
/* APN-AMBR for uplink (extended-2) is not present; display total now */
if ( ul_total > = 1000 ) {
2015-04-05 14:37:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_ul_total , tvb , curr_offset , 1 , ul_total , " %.3f Mbps " , ( gfloat ) ul_total / 1000 ) ;
} else {
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_ul_total , tvb , curr_offset , 1 , ul_total , " %u kbps " , ul_total ) ;
2011-07-15 16:59:18 +00:00
}
}
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* APN-AMBR for downlink (extended-2) octet 7 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( ( octet = = 0 ) | | ( octet = = 0xff ) ) {
2011-07-15 16:59:18 +00:00
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) " ) ;
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
dl_total + = octet * 256 * 1000 ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_dl_ext2 , tvb , curr_offset , 1 , octet ,
" %u Mbps " , ( octet * 256 ) ) ;
2011-07-15 16:59:18 +00:00
}
2015-04-05 14:37:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_dl_total , tvb , curr_offset , 1 , dl_total , " %.3f Mbps " , ( gfloat ) dl_total / 1000 ) ;
2011-07-15 16:59:18 +00:00
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* APN-AMBR for uplink (extended-2) octet 8 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( ( octet = = 0 ) | | ( octet = = 0xff ) ) {
2011-07-15 16:59:18 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_emm_apn_ambr_ul_ext2 , tvb , curr_offset , 1 , octet ,
2012-06-25 10:16:15 +00:00
" Use the value indicated by the APN-AMBR for uplink and APN-AMBR for uplink (extended) " ) ;
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
ul_total + = octet * 256 * 1000 ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_ul_ext2 , tvb , curr_offset , 1 , octet ,
" %u Mbps " , ( octet * 256 ) ) ;
2011-07-15 16:59:18 +00:00
}
2015-04-05 14:37:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_emm_apn_ambr_ul_total , tvb , curr_offset , 1 , ul_total , " %.3f Mbps " , ( gfloat ) ul_total / 1000 ) ;
2011-07-15 16:59:18 +00:00
curr_offset + + ;
return ( len ) ;
2009-03-22 21:20:56 +00:00
}
2012-05-20 09:50:34 +00:00
/*
* 9.9 .4 .2 A Connectivity type
* See subclause 10.5 .6 .19 in 3 GPP TS 24.008 .
* packet - gsm_a_gm . c
*/
2009-03-22 21:20:56 +00:00
/*
2009-03-04 19:51:55 +00:00
* 9.9 .4 .3 EPS quality of service
2009-03-22 21:20:56 +00:00
*/
2009-04-20 20:31:33 +00:00
/* Quality of Service Class Identifier (QCI), octet 3 (see 3GPP TS 23.203 [7]) */
2012-01-24 19:09:12 +00:00
static const range_string nas_eps_qci_vals [ ] = {
2015-01-26 15:20:16 +00:00
{ 0x00 , 0x00 , " Reserved " } ,
2012-01-24 19:09:12 +00:00
{ 0x01 , 0x01 , " QCI 1 " } ,
{ 0x02 , 0x02 , " QCI 2 " } ,
{ 0x03 , 0x03 , " QCI 3 " } ,
{ 0x04 , 0x04 , " QCI 4 " } ,
{ 0x05 , 0x05 , " QCI 5 " } ,
{ 0x06 , 0x06 , " QCI 6 " } ,
{ 0x07 , 0x07 , " QCI 7 " } ,
{ 0x08 , 0x08 , " QCI 8 " } ,
{ 0x09 , 0x09 , " QCI 9 " } ,
2015-01-26 15:20:16 +00:00
{ 0x0A , 0x40 , " Spare " } ,
2014-12-04 13:38:35 +00:00
{ 0x41 , 0x41 , " QCI 65 " } ,
{ 0x42 , 0x42 , " QCI 66 " } ,
2015-01-26 15:20:16 +00:00
{ 0x43 , 0x44 , " Spare " } ,
2014-12-04 13:38:35 +00:00
{ 0x45 , 0x45 , " QCI 69 " } ,
{ 0x46 , 0x46 , " QCI 70 " } ,
2015-01-26 15:20:16 +00:00
{ 0x47 , 0x7F , " Spare " } ,
2012-01-24 19:09:12 +00:00
{ 0x80 , 0xFE , " Operator-specific QCI " } ,
{ 0xFF , 0xFF , " Reserved " } ,
{ 0 , 0 , NULL }
2009-04-20 20:31:33 +00:00
} ;
2012-10-08 22:30:47 +00:00
guint16
2012-12-03 22:42:56 +00:00
de_esm_qos ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ ,
guint32 offset , guint len ,
gchar * add_string _U_ , int string_len _U_ )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2012-05-07 22:11:34 +00:00
guint8 octet ;
2011-07-15 16:59:18 +00:00
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 ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2011-07-15 16:59:18 +00:00
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 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_mbr_ul , tvb , curr_offset , 1 , octet ,
" %u kbps " , calc_bitrate ( octet ) ) ;
2011-07-15 16:59:18 +00:00
}
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* Maximum bit rate for downlink octet 5 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2011-07-15 16:59:18 +00:00
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 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_mbr_dl , tvb , curr_offset , 1 , octet ,
" %u kbps " , calc_bitrate ( octet ) ) ;
2011-07-15 16:59:18 +00:00
}
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* Guaranteed bit rate for uplink octet 6 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_gbr_ul , tvb , curr_offset , 1 , octet ,
" %u kbps " , calc_bitrate ( octet ) ) ;
2011-07-15 16:59:18 +00:00
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* Guaranteed bit rate for downlink octet 7 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2013-09-16 10:39:06 +00:00
proto_tree_add_uint_format_value ( tree , hf_nas_eps_gbr_dl , tvb , curr_offset , 1 , octet ,
" %u kbps " , calc_bitrate ( octet ) ) ;
2011-07-15 16:59:18 +00:00
curr_offset + + ;
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* Maximum bit rate for uplink (extended) octet 8 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2011-07-15 16:59:18 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_embr_ul , tvb , curr_offset , 1 , octet ,
2012-06-25 10:16:15 +00:00
" Use the value indicated by the maximum bit rate for uplink in octet 4 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_embr_ul , tvb , curr_offset , 1 , octet ,
2012-10-02 12:46:21 +00:00
" Maximum bit rate for uplink (extended) : %u %s " ,
2011-07-15 16:59:18 +00:00
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 ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2012-05-20 09:50:34 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_embr_dl , tvb , curr_offset , 1 , octet ,
2012-06-25 10:16:15 +00:00
" Use the value indicated by the maximum bit rate for downlink in octet 5 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2012-05-20 09:50:34 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_embr_dl , tvb , curr_offset , 1 , octet ,
2012-10-02 12:46:21 +00:00
" Maximum bit rate for downlink (extended) : %u %s " ,
2011-07-15 16:59:18 +00:00
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 ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2012-05-20 09:50:34 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_ul , tvb , curr_offset , 1 , octet ,
2012-06-25 10:16:15 +00:00
" Use the value indicated by the guaranteed bit rate for uplink in octet 6 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2012-05-20 09:50:34 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_ul , tvb , curr_offset , 1 , octet ,
2012-10-02 12:46:21 +00:00
" Guaranteed bit rate for uplink (extended) : %u %s " ,
2011-07-15 16:59:18 +00:00
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 ) ;
2012-05-07 22:11:34 +00:00
if ( octet = = 0 ) {
2012-05-20 09:50:34 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_dl , tvb , curr_offset , 1 , octet ,
2012-06-25 10:16:15 +00:00
" Use the value indicated by the guaranteed bit rate for downlink in octet 7 " ) ;
2012-05-07 22:11:34 +00:00
} else {
2012-05-20 09:50:34 +00:00
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_dl , tvb , curr_offset , 1 , octet ,
2012-10-02 12:46:21 +00:00
" Guaranteed bit rate for downlink (extended) : %u %s " ,
2011-07-15 16:59:18 +00:00
calc_bitrate_ext ( octet ) ,
( octet > 0x4a ) ? " Mbps " : " kbps " ) ;
}
curr_offset + + ;
2012-10-02 12:46:21 +00:00
if ( ( curr_offset - offset ) > = len )
return ( len ) ;
/* Maximum bit rate for uplink (extended-2) octet 12 */
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 and octet 8 " ) ;
} else {
proto_tree_add_uint_format ( tree , hf_nas_eps_embr_ul , tvb , curr_offset , 1 , octet ,
" Maximum bit rate for uplink (extended-2) : %u Mbps " ,
calc_bitrate_ext2 ( octet ) ) ;
}
curr_offset + + ;
/* Maximum bit rate for downlink (extended-2) octet 13 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
if ( octet = = 0 ) {
proto_tree_add_uint_format ( tree , hf_nas_eps_embr_dl , tvb , curr_offset , 1 , octet ,
" Use the value indicated by the maximum bit rate for downlink in octet 5 and octet 9 " ) ;
} else {
proto_tree_add_uint_format ( tree , hf_nas_eps_embr_dl , tvb , curr_offset , 1 , octet ,
" Maximum bit rate for downlink (extended-2) : %u Mbps " ,
calc_bitrate_ext2 ( octet ) ) ;
}
curr_offset + + ;
/* Guaranteed bit rate for uplink (extended-2) octet 14 */
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
if ( octet = = 0 ) {
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_ul , tvb , curr_offset , 1 , octet ,
2014-11-14 09:07:52 +00:00
" Use the value indicated by the guaranteed bit rate for uplink in octet 6 and octet 10 " ) ;
2012-10-02 12:46:21 +00:00
} else {
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_ul , tvb , curr_offset , 1 , octet ,
" Guaranteed bit rate for uplink (extended-2) : %u Mbps " ,
calc_bitrate_ext2 ( octet ) ) ;
}
curr_offset + + ;
2014-11-14 09:07:52 +00:00
/* Guaranteed bit rate for downlink (extended-2) octet 15 */
2012-10-02 12:46:21 +00:00
octet = tvb_get_guint8 ( tvb , curr_offset ) ;
if ( octet = = 0 ) {
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_dl , tvb , curr_offset , 1 , octet ,
" Use the value indicated by the guaranteed bit rate for downlink in octet 7 and octet 11 " ) ;
} else {
proto_tree_add_uint_format ( tree , hf_nas_eps_egbr_dl , tvb , curr_offset , 1 , octet ,
" Guaranteed bit rate for downlink (extended-2) : %u Mbps " ,
calc_bitrate_ext2 ( octet ) ) ;
}
2011-07-15 16:59:18 +00:00
return ( len ) ;
2009-03-22 21:20:56 +00:00
}
/*
2009-03-04 19:51:55 +00:00
* 9.9 .4 .4 ESM cause
*/
2009-03-22 21:20:56 +00:00
2009-03-20 20:15:46 +00:00
static const value_string nas_eps_esm_cause_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 0x08 , " Operator Determined Barring " } ,
{ 0x1a , " Insufficient resources " } ,
2012-10-02 12:46:21 +00:00
{ 0x1b , " Missing or unknown APN " } ,
2011-07-15 16:59:18 +00:00
{ 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) " } ,
2012-12-29 17:10:04 +00:00
{ 0x2e , " Unused " } ,
2011-07-15 16:59:18 +00:00
{ 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 " } ,
2012-05-20 09:50:34 +00:00
{ 0x3c , " Bearer handling not supported " } ,
2012-10-02 12:46:21 +00:00
{ 0x41 , " Maximum number of EPS bearers reached " } ,
{ 0x42 , " Requested APN not supported in current RAT and PLMN combination " } ,
2011-07-15 16:59:18 +00:00
{ 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 }
2009-03-20 23:20:45 +00:00
} ;
2012-05-20 09:50:34 +00:00
static value_string_ext nas_eps_esm_cause_vals_ext = VALUE_STRING_EXT_INIT ( nas_eps_esm_cause_vals ) ;
2009-03-20 20:15:46 +00:00
2009-03-22 21:20:56 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2014-05-16 16:19:17 +00:00
guint8 cause ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-03-22 21:20:56 +00:00
2014-05-16 16:19:17 +00:00
cause = tvb_get_guint8 ( tvb , curr_offset ) ;
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_esm_cause , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2014-05-16 16:19:17 +00:00
col_append_fstr ( pinfo - > cinfo , COL_INFO , " (%s) " ,
val_to_str_ext_const ( cause , & nas_eps_esm_cause_vals_ext , " Unknown " ) ) ;
2011-07-15 16:59:18 +00:00
curr_offset + + ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
return ( curr_offset - offset ) ;
2009-03-22 21:20:56 +00:00
}
2009-03-04 19:51:55 +00:00
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .5 ESM information transfer flag
2009-03-04 19:51:55 +00:00
*/
2009-04-26 16:17:00 +00:00
/* EIT (ESM information transfer) */
static const true_false_string nas_eps_emm_eit_vals = {
2011-07-15 16:59:18 +00:00
" Security protected ESM information transfer required " ,
" Security protected ESM information transfer not required "
2009-04-26 16:17:00 +00:00
} ;
2009-03-04 19:51:55 +00:00
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-04 19:51:55 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2009-03-04 19:51:55 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2009-03-04 19:51:55 +00:00
2011-07-15 16:59:18 +00:00
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 ) ;
2009-03-04 19:51:55 +00:00
}
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .6 Linked EPS bearer identity
2009-03-22 21:20:56 +00:00
*/
2010-10-10 20:07:06 +00:00
/*
2009-03-22 21:20:56 +00:00
* Linked EPS bearer identity ( bits 1 - 4 )
*/
static const value_string nas_eps_esm_linked_bearer_id_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 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 }
2009-03-22 21:20:56 +00:00
} ;
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .7 LLC service access point identifier
2009-03-19 22:03:33 +00:00
* See subclause 10.5 .6 .9 in 3 GPP TS 24.008
2009-03-22 21:20:56 +00:00
*/
2011-04-27 22:18:00 +00:00
/*
* 9.9 .4 .7 a Notification indicator
*/
static const value_string nas_eps_esm_notif_ind_vals [ ] = {
2011-07-15 16:59:18 +00:00
{ 0x0 , " Reserved " } ,
{ 0x1 , " SRVCC handover cancelled, IMS session re-establishment required " } ,
{ 0 , NULL }
2011-04-27 22:18:00 +00:00
} ;
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2011-04-27 22:18:00 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2011-04-27 22:18:00 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2011-04-27 22:18:00 +00:00
2011-07-15 16:59:18 +00:00
proto_tree_add_item ( tree , hf_nas_eps_esm_notif_ind , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2011-04-27 22:18:00 +00:00
2011-07-15 16:59:18 +00:00
return ( len ) ;
2011-04-27 22:18:00 +00:00
}
2011-05-17 14:41:01 +00:00
2009-03-22 21:20:56 +00:00
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .8 Packet flow identifier
* See subclause 10.5 .6 .11 in 3 GPP TS 24.008
2009-03-22 21:20:56 +00:00
*/
/*
2009-03-04 19:51:55 +00:00
* 9.9 .4 .9 PDN address
2009-03-22 21:20:56 +00:00
*/
static guint16
2012-12-03 22:42:56 +00:00
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_ )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
2012-05-07 22:11:34 +00:00
guint8 pdn_type ;
2011-07-15 16:59:18 +00:00
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 + + ;
2012-05-07 22:11:34 +00:00
switch ( pdn_type ) {
2011-07-15 16:59:18 +00:00
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 .
*/
2011-10-04 22:44:31 +00:00
proto_tree_add_item ( tree , hf_nas_eps_esm_pdn_ipv6_if_id , tvb , curr_offset , 8 , ENC_NA ) ;
2011-10-25 19:15:55 +00:00
curr_offset + = 8 ;
2011-07-15 16:59:18 +00:00
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 .
*/
2011-10-04 22:44:31 +00:00
proto_tree_add_item ( tree , hf_nas_eps_esm_pdn_ipv6_if_id , tvb , curr_offset , 8 , ENC_NA ) ;
2011-07-15 16:59:18 +00:00
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 ) ;
2009-03-22 21:20:56 +00:00
}
/*
2009-03-04 19:51:55 +00:00
* 9.9 .4 .10 PDN type
* Coded inline 1 / 2 octet
*/
static const value_string nas_eps_esm_pdn_type_values [ ] = {
2011-07-15 16:59:18 +00:00
{ 0x1 , " IPv4 " } ,
{ 0x2 , " IPv6 " } ,
{ 0x3 , " IPv4v6 " } ,
{ 0x4 , " Unused; shall be interpreted as IPv6 if received by the network " } ,
{ 0 , NULL }
2009-03-04 19:51:55 +00:00
} ;
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .11 Protocol configuration options
2009-03-04 19:51:55 +00:00
* See subclause 10.5 .6 .3 in 3 GPP TS 24.008
*/
/*
* 9.9 .4 .12 Quality of service
* See subclause 10.5 .6 .5 in 3 GPP TS 24.008
2011-12-19 16:57:17 +00:00
* Coded inline 1 / 2 octet
2009-03-04 19:51:55 +00:00
*/
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .13 Radio priority
2009-03-04 19:51:55 +00:00
* See subclause 10.5 .7 .2 in 3 GPP TS 24.008
*/
2015-04-03 14:57:42 +00:00
/*
* 9.9 .4 .13 a Re - attempt indicator
*/
const true_false_string nas_eps_esm_ratc_value = {
2015-07-01 19:16:53 +00:00
" UE is not allowed to re-attempt the procedure in A/Gb mode or Iu mode " ,
" UE is allowed to re-attempt the procedure in A/Gb mode or Iu mode "
2015-04-03 14:57:42 +00:00
} ;
static guint16
de_esm_re_attempt_ind ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset ,
guint len , gchar * add_string _U_ , int string_len _U_ )
{
guint32 curr_offset ;
curr_offset = offset ;
proto_tree_add_bits_item ( tree , hf_nas_eps_spare_bits , tvb , offset < < 3 , 7 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_nas_eps_esm_ratc , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + + ;
EXTRANEOUS_DATA_CHECK ( len , curr_offset - offset , pinfo , & ei_nas_eps_extraneous_data ) ;
return len ;
}
2009-03-04 19:51:55 +00:00
/*
* 9.9 .4 .14 Request type
2010-09-22 10:38:45 +00:00
* See subclause 10.5 .6 .17 in 3 GPP TS 24.008
2009-03-04 19:51:55 +00:00
*/
2011-12-19 16:57:17 +00:00
static const value_string nas_eps_esm_request_type_values [ ] = {
2012-05-07 22:11:34 +00:00
{ 0x1 , " initial request " } ,
{ 0x2 , " Handover " } ,
{ 0x3 , " Unused; shall be interpreted as initial request if received by the network " } ,
{ 0x4 , " emergency " } ,
{ 0 , NULL }
2011-12-19 16:57:17 +00:00
} ;
2009-03-04 19:51:55 +00:00
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .15 Traffic flow aggregate description
2009-03-04 19:51:55 +00:00
* The Traffic flow aggregate description information element is encoded using the same format as the Traffic flow
* template information element ( see subclause 10.5 .6 .12 in 3 GPP TS 24.008 [ 13 ] ) . When sending this IE , the UE shall
* assign the packet filter identifier values so that they are unique across all packet filters for the PDN connection .
*/
/*
* 9.9 .4 .16 Traffic flow template
* See subclause 10.5 .6 .12 in 3 GPP TS 24.008
2009-03-22 21:20:56 +00:00
* packet - gsm_a_gm . c
2009-03-04 19:51:55 +00:00
*/
/*
2010-10-10 20:07:06 +00:00
* 9.9 .4 .17 Transaction identifier
2009-03-04 19:51:55 +00:00
* The Transaction identifier information element is coded as the Linked TI information element in 3 GPP TS 24.008 [ 13 ] ,
* subclause 10.5 .6 .7 .
2009-03-22 21:20:56 +00:00
* The coding of the TI flag , the TI value and the EXT bit is defined in 3 GPP TS 24.007 [ 20 ] .
2008-11-27 21:45:42 +00:00
*/
2014-12-04 13:38:35 +00:00
/*
* 9.9 .4 .18 WLAN offload acceptability
* See subclause 10.5 .6 .20 in 3 GPP TS 24.008
* packet - gsm_a_gm . c
*/
2008-11-27 21:45:42 +00:00
2014-05-02 12:31:23 +00:00
guint16 ( * emm_elem_fcn [ ] ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len , gchar * add_string , int string_len ) = {
2011-07-15 16:59:18 +00:00
/* 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)*/
2012-05-20 09:50:34 +00:00
NULL , /* 9.9.3.16A GPRS timer 2, See subclause 10.5.7.4 in 3GPP TS 24.008. (packet-gsm_a_gm.c)*/
NULL , /* 9.9.3.16B GPRS timer 3, See subclause 10.5.7.4a in 3GPP TS 24.008. (packet-gsm_a_gm.c)*/
2011-07-15 16:59:18 +00:00
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) */
2012-05-20 09:50:34 +00:00
NULL , /* 9.9.3.20A MS network feature support, See subclause 10.5.1.15 in 3GPP TS 24.008.(packet-gsm_a_gm.c) */
2011-07-15 16:59:18 +00:00
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)*/
2014-12-04 13:38:35 +00:00
de_emm_ext_cause , /* 9.9.3.26A Extended EMM cause */
2011-07-15 16:59:18 +00:00
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 */
2012-05-20 09:50:34 +00:00
de_emm_guti_type , /* 9.9.3.45 GUTI type */
2011-07-15 16:59:18 +00:00
NULL , /* NONE */
2008-11-27 21:45:42 +00:00
} ;
2009-03-04 19:51:55 +00:00
/* 9.9.4 EPS Session Management (ESM) information elements */
typedef enum
{
2011-07-15 16:59:18 +00:00
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 */
2012-05-20 09:50:34 +00:00
DE_ESM_CONNECTIVITY_TYPE , /* 9.9.4.2A Connectivity type */
2011-07-15 16:59:18 +00:00
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 */
2015-04-03 14:57:42 +00:00
DE_ESM_RE_ATTEMPT_IND , /* 9.9.4.13a Re-attempt indicator */
2011-07-15 16:59:18 +00:00
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 */
2014-12-04 13:38:35 +00:00
DE_ESM_WLAN_OFFLOAD_ACCEPT , /* 9.9.4.18 WLAN offload acceptability */
2011-07-15 16:59:18 +00:00
DE_ESM_NONE /* NONE */
2009-03-04 19:51:55 +00:00
}
nas_esm_elem_idx_t ;
2013-03-18 22:21:53 +00:00
static const value_string nas_esm_elem_strings [ ] = {
2013-03-18 20:26:47 +00:00
{ DE_ESM_APN , " Access point name " } , /* 9.9.4.1 Access point name */
{ DE_ESM_APN_AGR_MAX_BR , " APN aggregate maximum bit rate " } , /* 9.9.4.2 APN aggregate maximum bit rate */
{ DE_ESM_CONNECTIVITY_TYPE , " Connectivity type " } , /* 9.9.4.2A Connectivity type */
{ DE_ESM_EPS_QOS , " EPS quality of service " } , /* 9.9.4.3 EPS quality of service */
{ DE_ESM_CAUSE , " ESM cause " } , /* 9.9.4.4 ESM cause */
{ DE_ESM_INF_TRF_FLG , " ESM information transfer flag " } , /* 9.9.4.5 ESM information transfer flag */
{ DE_ESM_LNKED_EPS_B_ID , " Linked EPS bearer identity " } , /* 9.9.4.6 Linked EPS bearer identity */
{ DE_ESM_LLC_SAPI , " LLC service access point identifier " } , /* 9.9.4.7 LLC service access point identifier */
{ DE_ESM_NOTIF_IND , " Notification indicator " } , /* 9.9.4.7a Notification indicator */
{ DE_ESM_P_FLW_ID , " Packet flow identifier " } , /* 9.9.4.8 Packet flow identifier */
{ DE_ESM_PDN_ADDR , " PDN address " } , /* 9.9.4.9 PDN address */
{ DE_ESM_PDN_TYPE , " PDN type " } , /* 9.9.4.10 PDN type */
{ DE_ESM_PROT_CONF_OPT , " Protocol configuration options " } , /* 9.9.4.11 Protocol configuration options */
{ DE_ESM_QOS , " Quality of service " } , /* 9.9.4.12 Quality of service */
{ DE_ESM_RA_PRI , " Radio priority " } , /* 9.9.4.13 Radio priority */
2015-04-03 14:57:42 +00:00
{ DE_ESM_RE_ATTEMPT_IND , " Re-attempt indicator " } , /* 9.9.4.13a Re-attempt indicator */
2013-03-18 20:26:47 +00:00
{ DE_ESM_REQ_TYPE , " Request type " } , /* 9.9.4.14 Request type */
{ DE_ESM_TRAF_FLOW_AGR_DESC , " Traffic flow aggregate description " } , /* 9.9.4.15 Traffic flow aggregate description */
{ DE_ESM_TRAF_FLOW_TEMPL , " Traffic flow template " } , /* 9.9.4.16 Traffic flow template */
{ DE_ESM_TID , " Transaction identifier " } , /* 9.9.4.17 Transaction identifier */
2014-12-04 13:38:35 +00:00
{ DE_ESM_WLAN_OFFLOAD_ACCEPT , " WLAN offload acceptability " } , /* 9.9.4.18 WLAN offload acceptability */
2013-03-18 20:26:47 +00:00
{ 0 , NULL }
} ;
2013-03-18 22:21:53 +00:00
value_string_ext nas_esm_elem_strings_ext = VALUE_STRING_EXT_INIT ( nas_esm_elem_strings ) ;
2013-03-18 20:26:47 +00:00
# define NUM_NAS_ESM_ELEM (sizeof(nas_esm_elem_strings) / sizeof(value_string))
gint ett_nas_eps_esm_elem [ NUM_NAS_ESM_ELEM ] ;
2014-05-02 12:31:23 +00:00
guint16 ( * esm_elem_fcn [ ] ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len , gchar * add_string , int string_len ) = {
2011-07-15 16:59:18 +00:00
NULL , /* 9.9.4.1 Access point name */
de_esm_apn_aggr_max_br , /* 9.9.4.2 APN aggregate maximum bit rate */
2012-05-20 09:50:34 +00:00
NULL , /* 9.9.4.2A Connectivity type */
2011-07-15 16:59:18 +00:00
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 */
2012-10-02 20:44:36 +00:00
NULL , /* 9.9.4.6 Linked EPS bearer identity */
2011-07-15 16:59:18 +00:00
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 */
2015-04-03 14:57:42 +00:00
de_esm_re_attempt_ind , /* 9.9.4.13a Re-attempt indicator */
2011-07-15 16:59:18 +00:00
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 */
2014-12-04 13:38:35 +00:00
NULL , /* 9.9.4.18 WLAN offload acceptability */
2011-07-15 16:59:18 +00:00
NULL , /* NONE */
2009-03-04 19:51:55 +00:00
} ;
2008-11-27 21:45:42 +00:00
/* MESSAGE FUNCTIONS */
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .1 Attach accept
2008-12-01 22:31:17 +00:00
*/
static void
2014-05-02 12:31:23 +00:00
nas_emm_attach_acc ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2008-12-01 22:31:17 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=3;*/
2011-07-15 16:59:18 +00:00
/* 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 */
2011-10-30 15:57:30 +00:00
ELEM_OPT_TLV ( 0x4a , GSM_A_PDU_TYPE_COMMON , DE_PLMN_LIST , " - Equivalent PLMNs " ) ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* 5E T3412 extended value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x5E , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - T3412 extended value " ) ;
2014-12-04 13:38:35 +00:00
/* 6A T3324 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x6A , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3324 " ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2008-12-01 22:31:17 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 8.2 .2 Attach complete
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_attach_comp ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .3 Attach reject
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_attach_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* * 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 ) ;
2012-05-20 09:50:34 +00:00
/* 5F T3346 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x5F , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3346 value " ) ;
/* 16 T3402 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x16 , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3402 value " ) ;
2014-12-04 13:38:35 +00:00
/* A- Extended EMM cause Extended EMM cause 9.9.3.26A O TV 1 */
ELEM_OPT_TV_SHORT ( 0xA0 , NAS_PDU_TYPE_EMM , DE_EMM_EXT_CAUSE , NULL ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-11-27 21:45:42 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .4 Attach request
2008-11-27 21:45:42 +00:00
*/
static void
2014-05-02 12:31:23 +00:00
nas_emm_attach_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2008-11-27 21:45:42 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=3;*/
2011-07-15 16:59:18 +00:00
/* Fix the lengths */
curr_len - - ;
curr_offset + + ;
/* Old GUTI or IMSI EPS mobile identity 9.9.3.12 M LV 5-12 */
2012-05-20 09:50:34 +00:00
ELEM_MAND_LV ( NAS_PDU_TYPE_EMM , DE_EMM_EPS_MID , NULL ) ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* D- Device properties Device properties 9.9.2.0A O TV 1 */
ELEM_OPT_TV_SHORT ( 0xD0 , GSM_A_PDU_TYPE_GM , DE_DEVICE_PROPERTIES , NULL ) ;
/* E- Old GUTI type GUTI type 9.9.3.45 O TV 1 */
ELEM_OPT_TV_SHORT ( 0xE0 , NAS_PDU_TYPE_EMM , DE_EMM_GUTI_TYPE , " - Old GUTI type " ) ;
2014-12-04 13:38:35 +00:00
/* C- MS network feature support MS network feature support 9.9.3.20A O TV 1 */
2012-05-20 09:50:34 +00:00
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_COMMON , DE_MS_NET_FEAT_SUP , NULL ) ;
2014-12-04 13:38:35 +00:00
/* 10 TMSI based NRI container Network resource identifier container 9.9.3.24A O TLV 4 */
2012-10-02 12:46:21 +00:00
ELEM_OPT_TLV ( 0x10 , GSM_A_PDU_TYPE_GM , DE_NET_RES_ID_CONT , " - TMSI based NRI container " ) ;
2014-12-04 13:38:35 +00:00
/* 6A T3324 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x6A , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3324 value " ) ;
/* 5E T3412 extended value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x5E , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - T3412 extended value " ) ;
2012-12-03 22:42:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2008-11-27 21:45:42 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .5 Authentication failure
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_auth_fail ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .6 Authentication reject
2008-12-01 22:31:17 +00:00
* No IE : s
*/
/*
2011-07-15 16:59:18 +00:00
* 8.2 .7 Authentication request
2008-12-08 22:21:49 +00:00
*/
2008-12-16 05:41:39 +00:00
2008-12-08 22:21:49 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_auth_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2008-12-08 22:21:49 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
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 " ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/* 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 " ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
2008-12-08 22:21:49 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .8 Authentication response
2008-12-01 22:31:17 +00:00
*/
2008-12-16 05:41:39 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_auth_resp ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2008-12-16 05:41:39 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2008-12-16 05:41:39 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2008-12-16 05:41:39 +00:00
2011-07-15 16:59:18 +00:00
/*
* Authentication response parameter 9.9 .3 .4 M LV 5 - 17
*/
ELEM_MAND_LV ( NAS_PDU_TYPE_EMM , DE_EMM_AUTH_RESP_PAR , NULL ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2008-12-16 05:41:39 +00:00
}
2009-03-20 20:15:46 +00:00
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .9 CS service notification
2009-03-20 20:15:46 +00:00
*/
static void
2014-05-02 12:31:23 +00:00
nas_emm_cs_serv_not ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-20 20:15:46 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 */
2014-02-23 22:36:11 +00:00
ELEM_OPT_TLV ( 0x60 , GSM_A_PDU_TYPE_DTAP , DE_CLG_PARTY_BCD_NUM , " - CLI " ) ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-20 20:15:46 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 8.2 .10 Detach accept
* 8.2 .10 .1 Detach accept ( UE originating detach )
2009-01-01 22:54:30 +00:00
* No further IE ' s
2011-07-15 16:59:18 +00:00
* 8.2 .10 .2 Detach accept ( UE terminated detach )
2008-12-01 22:31:17 +00:00
* No further IE ' s
*/
/*
2011-07-15 16:59:18 +00:00
* 8.2 .11 Detach request
* 8.2 .11 .1 Detach request ( UE originating detach )
2008-12-01 22:31:17 +00:00
*/
2009-06-06 17:03:34 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_detach_req_UL ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-06-06 17:03:34 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
2014-03-27 09:34:59 +00:00
guint64 switch_off ;
guint64 detach_type ;
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
2015-04-05 14:37:06 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_detach_req_UL , tvb , curr_offset , len , ENC_NA ) ;
2011-07-15 16:59:18 +00:00
/* 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 */
2014-03-27 09:34:59 +00:00
proto_tree_add_bits_ret_val ( tree , hf_nas_eps_emm_switch_off , tvb , bit_offset , 1 , & switch_off , ENC_BIG_ENDIAN ) ;
2011-07-15 16:59:18 +00:00
bit_offset + + ;
2014-03-27 09:34:59 +00:00
proto_tree_add_bits_ret_val ( tree , hf_nas_eps_emm_detach_type_UL , tvb , bit_offset , 3 , & detach_type , ENC_BIG_ENDIAN ) ;
2012-03-02 11:05:08 +00:00
/* bit_offset+=3;*/
2014-03-27 09:34:59 +00:00
/* Show detach reason in Info column. TODO: expert info ? */
col_append_fstr ( pinfo - > cinfo , COL_INFO , " (%s%s) " ,
2014-03-27 10:38:06 +00:00
val_to_str_const ( ( guint32 ) detach_type , nas_eps_emm_type_of_detach_UL_vals , " Unknown " ) ,
( switch_off = = 0 ) ? " " : " / switch-off " ) ;
2011-07-15 16:59:18 +00:00
/* Fix the lengths */
curr_len - - ;
curr_offset + + ;
/* GUTI or IMSI EPS mobile identity 9.9.3.12 M LV 5-12 */
2012-05-20 09:50:34 +00:00
ELEM_MAND_LV ( NAS_PDU_TYPE_EMM , DE_EMM_EPS_MID , NULL ) ;
2009-06-06 17:03:34 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .11 .2 Detach request ( UE terminated detach )
2008-12-01 22:31:17 +00:00
*/
2009-06-06 17:03:34 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_detach_req_DL ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-06-06 17:03:34 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
2014-03-27 10:38:06 +00:00
guint64 detach_type ;
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
2015-04-05 14:37:06 +00:00
proto_tree_add_item ( tree , hf_nas_eps_emm_detach_req_DL , tvb , curr_offset , len , ENC_NA ) ;
2011-07-15 16:59:18 +00:00
/* 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 + + ;
2014-03-27 10:38:06 +00:00
proto_tree_add_bits_ret_val ( tree , hf_nas_eps_emm_detach_type_DL , tvb , bit_offset , 3 , & detach_type , ENC_BIG_ENDIAN ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=3;*/
2014-03-27 10:38:06 +00:00
/* Show detach reason in Info column. TODO: expert info ? */
col_append_fstr ( pinfo - > cinfo , COL_INFO , " (%s) " ,
val_to_str_const ( ( guint32 ) detach_type , nas_eps_emm_type_of_detach_DL_vals , " Unknown " ) ) ;
2011-07-15 16:59:18 +00:00
/* Fix the lengths */
curr_len - - ;
curr_offset + + ;
/* No more mandatory elements */
2012-05-07 22:11:34 +00:00
if ( curr_len = = 0 )
2011-07-15 16:59:18 +00:00
return ;
/* EMM cause EMM cause 9.9.3.9 O TV 2 */
ELEM_OPT_TV ( 0x53 , NAS_PDU_TYPE_EMM , DE_EMM_CAUSE , NULL ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-06-06 17:03:34 +00:00
}
static void
2011-04-04 07:45:34 +00:00
nas_emm_detach_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-06-06 17:03:34 +00:00
{
2014-05-02 12:31:23 +00:00
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 ;
2011-07-15 16:59:18 +00:00
}
2014-05-02 12:31:23 +00:00
2013-01-11 20:54:04 +00:00
if ( len > = 8 ) {
nas_emm_detach_req_UL ( tvb , tree , pinfo , offset , len ) ;
} else {
nas_emm_detach_req_DL ( tvb , tree , pinfo , offset , len ) ;
}
2009-06-06 17:03:34 +00:00
}
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .12 Downlink NAS Transport
2009-01-06 12:40:45 +00:00
*/
static void
2014-05-02 12:31:23 +00:00
nas_emm_dl_nas_trans ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-06 12:40:45 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-06 12:40:45 +00:00
2011-10-13 18:22:55 +00:00
pinfo - > link_dir = P2P_DIR_DL ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-01-06 12:40:45 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-06 12:40:45 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .13 EMM information
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_emm_inf ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2009-01-06 12:40:45 +00:00
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .14 EMM status
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_emm_status ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* EMM cause EMM cause 9.9.3.9 M V 1 */
ELEM_MAND_V ( NAS_PDU_TYPE_EMM , DE_EMM_CAUSE , NULL ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .15 Extended service request
2009-01-06 12:40:45 +00:00
*/
static void
2014-05-02 12:31:23 +00:00
nas_emm_ext_serv_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-06 12:40:45 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* D- Device properties Device properties 9.9.2.0A O TV 1 */
ELEM_OPT_TV_SHORT ( 0xD0 , GSM_A_PDU_TYPE_GM , DE_DEVICE_PROPERTIES , NULL ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-06 12:40:45 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 8.2 .16 GUTI reallocation command
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_guti_realloc_cmd ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* GUTI EPS mobile identity 9.9.3.12 M LV 12 */
ELEM_MAND_LV ( NAS_PDU_TYPE_EMM , DE_EMM_EPS_MID , " - GUTI " ) ;
2010-10-10 20:07:06 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .17 GUTI reallocation complete
2008-12-01 22:31:17 +00:00
* No more IE ' s
*/
/*
2011-07-15 16:59:18 +00:00
* 8.2 .18 Identity request
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2011-04-04 07:45:34 +00:00
nas_emm_id_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
/*guint32 consumed;*/
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
bit_offset = curr_offset < < 3 ;
2009-01-07 21:14:25 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ;
2009-03-19 22:03:33 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/*consumed = 1;*/
2009-03-19 22:03:33 +00:00
2011-07-15 16:59:18 +00:00
/* Fix up the lengths */
curr_len - - ;
curr_offset + + ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .19 Identity response
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_id_res ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2010-10-10 20:07:06 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2009-01-06 12:40:45 +00:00
2009-03-20 20:15:46 +00:00
2009-01-06 12:40:45 +00:00
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .20 Security mode command
2008-12-01 22:31:17 +00:00
*/
2008-12-23 20:49:15 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_sec_mode_cmd ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2008-12-23 20:49:15 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 " ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/* 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 */
2011-11-22 17:44:50 +00:00
ELEM_OPT_TV ( 0x55 , NAS_PDU_TYPE_EMM , DE_EMM_NONCE , " - Replayed NonceUE " ) ;
2011-07-15 16:59:18 +00:00
/* 56 NonceMME Nonce 9.9.3.25 O TV 5 */
2011-11-22 17:44:50 +00:00
ELEM_OPT_TV ( 0x56 , NAS_PDU_TYPE_EMM , DE_EMM_NONCE , " - NonceMME " ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2008-12-23 20:49:15 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .21 Security mode complete
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_sec_mode_comp ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
if ( curr_len = = 0 )
return ;
2009-11-04 13:49:19 +00:00
2011-07-15 16:59:18 +00:00
/* 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 " ) ;
2010-10-10 20:07:06 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .22 Security mode reject
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_sec_mode_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* EMM cause EMM cause 9.9.3.9 M V 1 */
ELEM_MAND_V ( NAS_PDU_TYPE_EMM , DE_EMM_CAUSE , NULL ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .24 Service reject
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_serv_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* 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 " ) ;
2012-05-20 09:50:34 +00:00
/* 5F T3346 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x5F , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3346 value " ) ;
2009-01-06 12:40:45 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .25 Service request
2008-12-01 22:31:17 +00:00
* This message is sent by the UE to the network to request the establishment
2010-10-10 20:07:06 +00:00
* of a NAS signalling connection and of the radio and S1 bearers .
2010-04-19 14:06:12 +00:00
* Its structure does not follow the structure of a standard layer 3 message . See table 8.2 .25 .1 .
2008-12-01 22:31:17 +00:00
*/
2010-04-19 14:06:12 +00:00
/* Table 8.2.25.1
2009-06-06 17:03:34 +00:00
* Protocol discriminator Protocol discriminator 9.2 M V 1 / 2
* Security header type Security header type 9.3 .1 M V 1 / 2
* KSI and sequence number KSI and sequence number 9.9 .3 .19 M V 1
* Message authentication code ( short ) Short MAC 9.9 .3 .28 M V 2
*/
static void
2014-05-02 12:31:23 +00:00
nas_emm_service_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-06-06 17:03:34 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-06-06 17:03:34 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-06-06 17:03:34 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-06-06 17:03:34 +00:00
2011-07-15 16:59:18 +00:00
/* Short MAC 9.9.3.28 M V 2 */
ELEM_MAND_V ( NAS_PDU_TYPE_EMM , DE_EMM_SHORT_MAC , " - Message authentication code (short) " ) ;
2009-06-06 17:03:34 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-06-06 17:03:34 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .26 Tracking area update accept
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_trac_area_upd_acc ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=3;*/
2011-07-15 16:59:18 +00:00
/* Fix up the lengths */
curr_len - - ;
curr_offset + + ;
/* No more mandatory elements */
2012-05-07 22:11:34 +00:00
if ( curr_len = = 0 )
2011-07-15 16:59:18 +00:00
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 */
2011-10-30 15:57:30 +00:00
ELEM_OPT_TLV ( 0x4a , GSM_A_PDU_TYPE_COMMON , DE_PLMN_LIST , " - PLMN list " ) ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* 5E T3412 extended value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x5E , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - T3412 extended value " ) ;
2014-12-04 13:38:35 +00:00
/* 6A T3324 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x6A , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3324 " ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .27 Tracking area update complete
2008-12-01 22:31:17 +00:00
* No more IE ' s
*/
/*
2011-07-15 16:59:18 +00:00
* 8.2 .28 Tracking area update reject
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_trac_area_upd_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-01 22:54:30 +00:00
2011-07-15 16:59:18 +00:00
/* EMM cause EMM cause 9.9.3.9 M V 1 */
ELEM_MAND_V ( NAS_PDU_TYPE_EMM , DE_EMM_CAUSE , NULL ) ;
2012-05-20 09:50:34 +00:00
/* 5F T3346 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x5F , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3346 value " ) ;
2014-12-04 13:38:35 +00:00
/* A- Extended EMM cause Extended EMM cause 9.9.3.26A O TV 1 */
ELEM_OPT_TV_SHORT ( 0xA0 , NAS_PDU_TYPE_EMM , DE_EMM_EXT_CAUSE , NULL ) ;
2009-01-01 22:54:30 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .29 Tracking area update request
2008-12-01 22:31:17 +00:00
*/
2009-01-01 22:54:30 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_trac_area_upd_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-01 22:54:30 +00:00
{
2009-03-20 20:15:46 +00:00
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=3;*/
2011-07-15 16:59:18 +00:00
/* 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 */
2011-11-22 17:44:50 +00:00
ELEM_OPT_TV ( 0x55 , NAS_PDU_TYPE_EMM , DE_EMM_NONCE , " - NonceUE " ) ;
2011-07-15 16:59:18 +00:00
/* 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 */
2014-12-04 13:38:35 +00:00
ELEM_OPT_TV_SHORT ( 0xA0 , NAS_PDU_TYPE_EMM , DE_EMM_UE_RA_CAP_INF_UPD_NEED , NULL ) ;
2011-07-15 16:59:18 +00:00
/* 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 */
2014-12-04 13:38:35 +00:00
ELEM_OPT_TLV ( 0x31 , GSM_A_PDU_TYPE_GM , DE_MS_NET_CAP , NULL ) ;
2011-07-15 16:59:18 +00:00
/* 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 */
2014-12-04 13:38:35 +00:00
ELEM_OPT_TV_SHORT ( 0x90 , GSM_A_PDU_TYPE_GM , DE_TMSI_STAT , NULL ) ;
2011-07-15 16:59:18 +00:00
/* 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 */
2014-12-04 13:38:35 +00:00
ELEM_OPT_TV_SHORT ( 0xF0 , NAS_PDU_TYPE_EMM , DE_EMM_ADD_UPD_TYPE , NULL ) ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* E- Old GUTI type GUTI type 9.9.3.45 O TV 1 */
2014-12-04 13:38:35 +00:00
ELEM_OPT_TV_SHORT ( 0xE0 , NAS_PDU_TYPE_EMM , DE_EMM_GUTI_TYPE , " - Old GUTI type " ) ;
2012-05-20 09:50:34 +00:00
/* D- Device properties Device properties 9.9.2.0A O TV 1 */
2014-12-04 13:38:35 +00:00
ELEM_OPT_TV_SHORT ( 0xD0 , GSM_A_PDU_TYPE_GM , DE_DEVICE_PROPERTIES , NULL ) ;
2012-05-20 09:50:34 +00:00
/* C- MS network feature support MS network feature support 9.9.3.20A 0 TV 1 */
2014-12-04 13:38:35 +00:00
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_COMMON , DE_MS_NET_FEAT_SUP , NULL ) ;
2012-10-02 12:46:21 +00:00
/* 10 TMSI based NRI container Network resource identifier container 9.9.3.24A 0 TLV 4 */
ELEM_OPT_TLV ( 0x10 , GSM_A_PDU_TYPE_GM , DE_NET_RES_ID_CONT , " - TMSI based NRI container " ) ;
2014-12-04 13:38:35 +00:00
/* 6A T3324 value GPRS timer 2 9.9.3.16A O TLV 3 */
ELEM_OPT_TLV ( 0x6A , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_2 , " - T3324 value " ) ;
/* 5E T3412 extended value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x5E , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - T3412 extended value " ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-06 12:40:45 +00:00
}
2009-01-01 22:54:30 +00:00
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .30 Uplink NAS Transport
2009-01-06 12:40:45 +00:00
*/
static void
2014-05-02 12:31:23 +00:00
nas_emm_ul_nas_trans ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-01-06 12:40:45 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-01-06 12:40:45 +00:00
2011-10-13 18:22:55 +00:00
pinfo - > link_dir = P2P_DIR_UL ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2010-10-10 20:07:06 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-01-01 22:54:30 +00:00
}
2009-03-19 22:03:33 +00:00
2010-04-19 14:06:12 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .31 Downlink generic NAS transport
2010-04-19 14:06:12 +00:00
*/
2010-04-19 20:12:26 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_dl_gen_nas_trans ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2010-04-19 20:12:26 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-04-19 20:12:26 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2010-04-19 20:12:26 +00:00
2011-10-13 18:22:55 +00:00
pinfo - > link_dir = P2P_DIR_DL ;
2011-07-15 16:59:18 +00:00
/* 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 */
2011-10-13 18:22:55 +00:00
ELEM_OPT_TLV ( 0x65 , NAS_PDU_TYPE_COMMON , DE_EPS_CMN_ADD_INFO , NULL ) ;
2011-04-27 22:18:00 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2011-10-13 18:22:55 +00:00
eps_nas_gen_msg_cont_type = 0 ;
2010-04-19 20:12:26 +00:00
}
2010-04-19 14:06:12 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.2 .32 Uplink generic NAS transport
2010-04-19 14:06:12 +00:00
*/
2010-04-19 20:12:26 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_emm_ul_gen_nas_trans ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2010-04-19 20:12:26 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-04-19 20:12:26 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2010-04-19 20:12:26 +00:00
2011-10-13 18:22:55 +00:00
pinfo - > link_dir = P2P_DIR_UL ;
2011-07-15 16:59:18 +00:00
/* 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 */
2011-10-13 18:22:55 +00:00
ELEM_OPT_TLV ( 0x65 , NAS_PDU_TYPE_COMMON , DE_EPS_CMN_ADD_INFO , NULL ) ;
2010-04-19 14:06:12 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2011-10-13 18:22:55 +00:00
eps_nas_gen_msg_cont_type = 0 ;
2010-04-19 20:12:26 +00:00
}
2010-04-19 14:06:12 +00:00
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.3 EPS session management messages
2008-12-01 22:31:17 +00:00
*/
2009-03-20 20:15:46 +00:00
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.3 .1 Activate dedicated EPS bearer context accept
2008-12-01 22:31:17 +00:00
*/
2009-03-22 21:20:56 +00:00
static void
2011-04-04 14:49:14 +00:00
nas_esm_act_ded_eps_bearer_ctx_acc ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2012-05-07 22:11:34 +00:00
if ( len = = 0 )
2011-07-15 16:59:18 +00:00
return ;
2010-01-28 17:01:54 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
curr_len = len ;
2011-05-17 14:41:01 +00:00
2011-07-15 16:59:18 +00:00
/* This message is sent by the UE to the network */
pinfo - > link_dir = P2P_DIR_UL ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2010-10-10 20:07:06 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.3 .2 Activate dedicated EPS bearer context reject
2008-12-01 22:31:17 +00:00
*/
2009-03-22 21:20:56 +00:00
static void
2011-04-04 14:49:14 +00:00
nas_esm_act_ded_eps_bearer_ctx_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-01-06 12:40:45 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* This message is sent by UE to the network to reject activation of a dedicated EPS bearer context */
pinfo - > link_dir = P2P_DIR_UL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2010-10-10 20:07:06 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2008-12-01 22:31:17 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.3 .3 Activate dedicated EPS bearer context request
2008-12-01 22:31:17 +00:00
*/
2009-03-22 21:20:56 +00:00
static void
2011-04-04 14:49:14 +00:00
nas_esm_act_ded_eps_bearer_ctx_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2015-01-26 15:20:16 +00:00
/* C- WLAN offload indication WLAN offload indication 9.9.4.18 O TV 1 */
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_GM , DE_SM_WLAN_OFFLOAD_ACCEPT , " - WLAN offload indication " ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2008-12-01 22:31:17 +00:00
2009-01-06 12:40:45 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.3 .4 Activate default EPS bearer context accept
2009-01-06 12:40:45 +00:00
*/
2009-03-22 21:20:56 +00:00
static void
2011-04-04 14:49:14 +00:00
nas_esm_act_def_eps_bearer_ctx_acc ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2012-05-07 22:11:34 +00:00
if ( len = = 0 )
2011-07-15 16:59:18 +00:00
return ;
2009-04-16 19:02:52 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2009-03-04 19:51:55 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.3 .5 Activate default EPS bearer context reject
2009-03-22 21:20:56 +00:00
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_act_def_eps_bearer_ctx_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* This message is sent by UE to the network to reject activation of a default EPS bearer context. */
pinfo - > link_dir = P2P_DIR_UL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
2009-03-04 19:51:55 +00:00
* 8.3 .6 Activate default EPS bearer context request
*/
2009-03-22 21:20:56 +00:00
static void
2011-04-04 14:49:14 +00:00
nas_esm_act_def_eps_bearer_ctx_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2014-12-04 13:38:35 +00:00
/* B- Connectivity type Connectivity type 9.9.4.2A O TV 1 */
2012-05-20 09:50:34 +00:00
ELEM_OPT_TV_SHORT ( 0xB0 , GSM_A_PDU_TYPE_GM , DE_SM_CONNECTIVITY_TYPE , NULL ) ;
2014-12-04 13:38:35 +00:00
/* C- WLAN offload indication WLAN offload indication 9.9.4.18 O TV 1 */
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_GM , DE_SM_WLAN_OFFLOAD_ACCEPT , " - WLAN offload indication " ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2009-03-04 19:51:55 +00:00
/*
2011-07-15 16:59:18 +00:00
* 8.3 .7 Bearer resource allocation reject
2009-03-04 19:51:55 +00:00
*/
2009-03-22 21:20:56 +00:00
static void
2011-04-04 14:49:14 +00:00
nas_esm_bearer_res_all_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2015-04-03 14:57:42 +00:00
/* 37 Back-off timer value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x37 , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - Back-off timer value " ) ;
/* 6B Re-attempt indicator Re-attempt indicator 9.9.4.13A O TLV 3 */
ELEM_OPT_TLV ( 0x6B , NAS_PDU_TYPE_ESM , DE_ESM_RE_ATTEMPT_IND , NULL ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 8.3 .8 Bearer resource allocation request
2009-03-22 21:20:56 +00:00
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_bearer_res_all_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* C- Device properties Device properties 9.9.2.0A O TV 1 */
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_GM , DE_DEVICE_PROPERTIES , NULL ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 8.3 .9 Bearer resource modification reject
2009-03-22 21:20:56 +00:00
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_bearer_res_mod_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2015-04-03 14:57:42 +00:00
/* 37 Back-off timer value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x37 , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - Back-off timer value " ) ;
/* 6B Re-attempt indicator Re-attempt indicator 9.9.4.13A O TLV 3 */
ELEM_OPT_TLV ( 0x6B , NAS_PDU_TYPE_ESM , DE_ESM_RE_ATTEMPT_IND , NULL ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
2011-07-15 16:59:18 +00:00
* 8.3 .10 Bearer resource modification request
2009-03-22 21:20:56 +00:00
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_bearer_res_mod_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* C- Device properties Device properties 9.9.2.0A O TV 1 */
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_GM , DE_DEVICE_PROPERTIES , NULL ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .11 Deactivate EPS bearer context accept
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_deact_eps_bearer_ctx_acc ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2012-05-07 22:11:34 +00:00
if ( len = = 0 )
2011-07-15 16:59:18 +00:00
return ;
2009-04-16 19:02:52 +00:00
2011-07-15 16:59:18 +00:00
/* This message is sent by the UE to acknowledge deactivation of the EPS bearer context... */
pinfo - > link_dir = P2P_DIR_UL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .12 Deactivate EPS bearer context request
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_deact_eps_bearer_ctx_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* This message is sent by the network to request deactivation of an active EPS bearer context. */
pinfo - > link_dir = P2P_DIR_DL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-10-02 12:46:21 +00:00
/* 37 T3396 value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x37 , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - T3396 value " ) ;
2015-01-26 15:20:16 +00:00
/* C- WLAN offload indication WLAN offload indication 9.9.4.18 O TV 1 */
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_GM , DE_SM_WLAN_OFFLOAD_ACCEPT , " - WLAN offload indication " ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .13 ESM information request
* No IE : s
*/
2009-04-16 19:02:52 +00:00
static void
2011-04-04 07:45:34 +00:00
nas_esm_inf_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2009-04-16 19:02:52 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint curr_len ;
2009-04-16 19:02:52 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-04-16 19:02:52 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-04-16 19:02:52 +00:00
}
2009-03-22 21:20:56 +00:00
/*
* 8.3 .14 ESM information response
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_inf_resp ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2012-05-07 22:11:34 +00:00
if ( len = = 0 )
2011-07-15 16:59:18 +00:00
return ;
2009-04-16 19:02:52 +00:00
2011-07-15 16:59:18 +00:00
/* This message is sent by the UE to the network in response to an ESM INFORMATION REQUEST... */
pinfo - > link_dir = P2P_DIR_UL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .15 ESM status
*/
static void
2014-05-02 12:31:23 +00:00
nas_esm_status ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* ESM cause ESM cause 9.9.4.4 M V 1 */
ELEM_MAND_V ( NAS_PDU_TYPE_ESM , DE_ESM_CAUSE , NULL ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .16 Modify EPS bearer context accept
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_mod_eps_bearer_ctx_acc ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2012-05-07 22:11:34 +00:00
if ( len = = 0 )
2011-07-15 16:59:18 +00:00
return ;
2009-04-16 19:02:52 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .17 Modify EPS bearer context reject
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_mod_eps_bearer_ctx_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .18 Modify EPS bearer context request
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_mod_eps_bearer_ctx_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
2012-05-07 22:11:34 +00:00
if ( len = = 0 )
2011-07-15 16:59:18 +00:00
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 ) ;
2014-12-04 13:38:35 +00:00
/* C- WLAN offload indication WLAN offload indication 9.9.4.18 O TV 1 */
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_GM , DE_SM_WLAN_OFFLOAD_ACCEPT , " - WLAN offload indication " ) ;
2011-07-15 16:59:18 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2010-04-19 14:06:12 +00:00
/*
* 8.3 .18 A Notification
*/
2010-04-19 20:12:26 +00:00
static void
2014-05-02 12:31:23 +00:00
nas_esm_notification ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2010-04-19 20:12:26 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-04-19 20:12:26 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2010-04-19 20:12:26 +00:00
2011-07-15 16:59:18 +00:00
/* Notification indicator Notification indicator 9.9.4.7A M LV 2 */
ELEM_MAND_LV ( NAS_PDU_TYPE_ESM , DE_ESM_NOTIF_IND , NULL ) ;
2011-05-17 14:41:01 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2010-04-19 20:12:26 +00:00
}
2010-04-19 14:06:12 +00:00
2009-03-22 21:20:56 +00:00
/*
* 8.3 .19 PDN connectivity reject
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_pdn_con_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/*This message is sent by the network to the UE to reject establishment of a PDN connection. */
pinfo - > link_dir = P2P_DIR_DL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2015-04-03 14:57:42 +00:00
/* 37 Back-off timer value GPRS timer 3 9.9.3.16B O TLV 3 */
ELEM_OPT_TLV ( 0x37 , GSM_A_PDU_TYPE_GM , DE_GPRS_TIMER_3 , " - Back-off timer value " ) ;
/* 6B Re-attempt indicator Re-attempt indicator 9.9.4.13A O TLV 3 */
ELEM_OPT_TLV ( 0x6B , NAS_PDU_TYPE_ESM , DE_ESM_RE_ATTEMPT_IND , NULL ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2009-03-04 19:51:55 +00:00
/*
2010-04-19 14:06:12 +00:00
* 8.3 .20 PDN connectivity request
2009-03-04 19:51:55 +00:00
*/
2013-04-15 21:52:59 +00:00
void
2011-04-04 14:49:14 +00:00
nas_esm_pdn_con_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-04 19:51:55 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2012-05-07 22:11:34 +00:00
int bit_offset ;
2008-12-01 22:31:17 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2008-12-01 22:31:17 +00:00
2011-07-15 16:59:18 +00:00
/*This message is sent by the UE to the network to initiate establishment of a PDN connection. */
pinfo - > link_dir = P2P_DIR_UL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* PDN type PDN type 9.9.4.10 M V 1/2 */
2011-12-19 16:57:17 +00:00
bit_offset = curr_offset < < 3 ;
proto_tree_add_bits_item ( tree , hf_nas_eps_esm_pdn_type , tvb , bit_offset , 4 , ENC_BIG_ENDIAN ) ;
bit_offset + = 4 ;
2009-03-19 22:03:33 +00:00
2011-07-15 16:59:18 +00:00
/* Request type 9.9.4.14 M V 1/2 */
2011-12-19 16:57:17 +00:00
proto_tree_add_bits_item ( tree , hf_nas_eps_esm_request_type , tvb , bit_offset , 4 , ENC_BIG_ENDIAN ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-12-19 16:57:17 +00:00
/* Fix the lengths */
curr_len - - ;
curr_offset + + ;
2012-02-15 22:56:20 +00:00
if ( curr_len = = 0 )
return ;
2010-10-10 20:07:06 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-20 09:50:34 +00:00
/* C- Device properties Device properties 9.9.2.0A O TV 1 */
ELEM_OPT_TV_SHORT ( 0xC0 , GSM_A_PDU_TYPE_GM , DE_DEVICE_PROPERTIES , NULL ) ;
2008-12-01 22:31:17 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-04 19:51:55 +00:00
}
/*
2009-03-22 21:20:56 +00:00
* 8.3 .20 PDN disconnect reject
2009-03-04 19:51:55 +00:00
*/
2009-03-22 21:20:56 +00:00
static void
2011-04-04 14:49:14 +00:00
nas_esm_pdn_disc_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2009-03-22 21:20:56 +00:00
2011-07-15 16:59:18 +00:00
/*This message is sent by the UE to the network to initiate establishment of a PDN connection. */
pinfo - > link_dir = P2P_DIR_UL ;
2011-01-12 21:36:11 +00:00
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2009-03-22 21:20:56 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
/*
* 8.3 .21 PDN disconnect request
*/
static void
2011-04-04 14:49:14 +00:00
nas_esm_pdn_disc_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len )
2009-03-22 21:20:56 +00:00
{
2011-07-15 16:59:18 +00:00
guint32 curr_offset , bit_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2012-05-07 22:11:34 +00:00
curr_len = len ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-03-02 11:05:08 +00:00
/*bit_offset+=4;*/
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_nas_eps_extraneous_data ) ;
2009-03-22 21:20:56 +00:00
}
2009-03-04 19:51:55 +00:00
2011-07-15 16:59:18 +00:00
# define NUM_NAS_MSG_ESM (sizeof(nas_msg_esm_strings) / sizeof(value_string))
2009-03-04 19:51:55 +00:00
static gint ett_nas_msg_esm [ NUM_NAS_MSG_ESM ] ;
2014-05-02 12:31:23 +00:00
static void ( * nas_msg_esm_fcn [ ] ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len ) = {
2011-07-15 16:59:18 +00:00
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 */
2009-03-04 19:51:55 +00:00
} ;
2010-10-10 20:07:06 +00:00
static void
get_nas_esm_msg_params ( guint8 oct , const gchar * * msg_str , int * ett_tree , int * hf_idx , msg_fcn * msg_fcn_p )
2009-03-04 19:51:55 +00:00
{
2011-07-15 16:59:18 +00:00
gint idx ;
2009-03-04 19:51:55 +00:00
2013-03-29 00:26:23 +00:00
* msg_str = try_val_to_str_idx_ext ( ( guint32 ) ( oct & 0xff ) , & nas_msg_esm_strings_ext , & idx ) ;
2012-05-07 22:11:34 +00:00
* hf_idx = hf_nas_eps_msg_esm_type ;
2013-03-24 21:52:19 +00:00
if ( * msg_str ! = NULL ) {
* ett_tree = ett_nas_msg_esm [ idx ] ;
* msg_fcn_p = nas_msg_esm_fcn [ idx ] ;
}
2008-12-01 22:31:17 +00:00
2011-07-15 16:59:18 +00:00
return ;
2009-03-04 19:51:55 +00:00
}
2008-12-01 22:31:17 +00:00
2011-07-15 16:59:18 +00:00
# define NUM_NAS_MSG_EMM (sizeof(nas_msg_emm_strings) / sizeof(value_string))
2008-11-27 21:45:42 +00:00
static gint ett_nas_msg_emm [ NUM_NAS_MSG_EMM ] ;
2014-05-02 12:31:23 +00:00
static void ( * nas_msg_emm_fcn [ ] ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len ) = {
2011-07-15 16:59:18 +00:00
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_id_req , /* Identity request */
nas_emm_id_res , /* Identity response */
2012-06-14 07:25:53 +00:00
nas_emm_auth_fail , /* Authentication failure */
2011-07-15 16:59:18 +00:00
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 */
2009-01-06 12:40:45 +00:00
2008-11-27 21:45:42 +00:00
} ;
2010-10-10 20:07:06 +00:00
static void
get_nas_emm_msg_params ( guint8 oct , const gchar * * msg_str , int * ett_tree , int * hf_idx , msg_fcn * msg_fcn_p )
2008-11-27 21:45:42 +00:00
{
2011-07-15 16:59:18 +00:00
gint idx ;
2008-11-27 21:45:42 +00:00
2013-03-29 00:26:23 +00:00
* msg_str = try_val_to_str_idx_ext ( ( guint32 ) ( oct & 0xff ) , & nas_msg_emm_strings_ext , & idx ) ;
2012-05-07 22:11:34 +00:00
* hf_idx = hf_nas_eps_msg_emm_type ;
2013-03-24 21:52:19 +00:00
if ( * msg_str ! = NULL ) {
* ett_tree = ett_nas_msg_emm [ idx ] ;
* msg_fcn_p = nas_msg_emm_fcn [ idx ] ;
}
2008-11-27 21:45:42 +00:00
2011-07-15 16:59:18 +00:00
return ;
2008-11-27 21:45:42 +00:00
}
2012-10-02 20:44:36 +00:00
static const value_string nas_eps_esm_bearer_id_vals [ ] = {
{ 0x0 , " No EPS bearer identity assigned " } ,
{ 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 }
} ;
2010-10-10 20:07:06 +00:00
/*
* EPS session management messages .
2009-04-24 20:06:00 +00:00
* A plain NAS message is pased to this function
*/
2008-11-27 21:45:42 +00:00
static void
2009-04-24 20:06:00 +00:00
disect_nas_eps_esm_msg ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , int offset )
2008-11-27 21:45:42 +00:00
{
2012-05-07 22:11:34 +00:00
const gchar * msg_str ;
guint32 len ;
gint ett_tree ;
int hf_idx ;
2012-12-03 22:26:34 +00:00
void ( * msg_fcn_p ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len ) ;
2012-05-07 22:11:34 +00:00
guint8 oct ;
2011-07-15 16:59:18 +00:00
2014-08-19 21:00:57 +00:00
len = tvb_reported_length ( tvb ) ;
2011-07-15 16:59:18 +00:00
/*
* 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 3 GPP TS 24.007
*/
proto_tree_add_item ( tree , hf_nas_eps_esm_proc_trans_id , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2015-04-05 14:37:06 +00:00
/*message type IE*/
2011-07-15 16:59:18 +00:00
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 ) ;
2012-05-07 22:11:34 +00:00
if ( msg_str ) {
2011-08-16 14:54:59 +00:00
col_append_sep_str ( pinfo - > cinfo , COL_INFO , NULL , msg_str ) ;
2012-05-07 22:11:34 +00:00
} else {
2015-04-05 14:37:06 +00:00
proto_tree_add_expert_format ( tree , pinfo , & ei_nas_eps_unknown_msg_type , tvb , offset , 1 , " Unknown Message Type 0x%02x " , oct ) ;
2011-07-15 16:59:18 +00:00
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 )
{
2015-09-18 10:41:05 +00:00
if ( tvb_reported_length_remaining ( tvb , offset ) ) {
proto_tree_add_item ( tree , hf_nas_eps_msg_elems , tvb , offset , len - offset , ENC_NA ) ;
}
2011-07-15 16:59:18 +00:00
}
else
{
( * msg_fcn_p ) ( tvb , tree , pinfo , offset , len - offset ) ;
}
2009-03-04 19:51:55 +00:00
}
2009-04-24 20:06:00 +00:00
/*
* The " real " security header has been dissected or if dissect_header = TRUE
*/
2009-03-04 19:51:55 +00:00
static void
2009-04-24 20:06:00 +00:00
dissect_nas_eps_emm_msg ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , int offset , gboolean second_header )
2009-03-04 19:51:55 +00:00
{
2012-05-07 22:11:34 +00:00
const gchar * msg_str ;
guint32 len ;
gint ett_tree ;
int hf_idx ;
2012-12-03 22:26:34 +00:00
void ( * msg_fcn_p ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len ) ;
2012-05-07 22:11:34 +00:00
guint8 security_header_type , oct ;
2011-07-15 16:59:18 +00:00
2014-08-19 21:00:57 +00:00
len = tvb_reported_length ( tvb ) ;
2011-07-15 16:59:18 +00:00
/* 9.3.1 Security header type */
2012-05-07 22:11:34 +00:00
if ( second_header ) {
2011-07-15 16:59:18 +00:00
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 + + ;
2012-05-07 22:11:34 +00:00
if ( security_header_type ! = 0 ) {
2011-07-15 16:59:18 +00:00
/* 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 + + ;
2012-05-07 22:11:34 +00:00
if ( ( security_header_type = = 2 ) | | ( security_header_type = = 4 ) )
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2012-05-07 22:11:34 +00:00
if ( msg_str ) {
2011-08-16 14:54:59 +00:00
col_append_sep_str ( pinfo - > cinfo , COL_INFO , NULL , msg_str ) ;
2012-05-07 22:11:34 +00:00
} else {
2015-04-05 14:37:06 +00:00
proto_tree_add_expert_format ( tree , pinfo , & ei_nas_eps_unknown_msg_type , tvb , offset , 1 , " Unknown Message Type 0x%02x " , oct ) ;
2011-07-15 16:59:18 +00:00
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 )
{
2015-09-18 10:41:05 +00:00
if ( tvb_reported_length_remaining ( tvb , offset ) ) {
proto_tree_add_item ( tree , hf_nas_eps_msg_elems , tvb , offset , len - offset , ENC_NA ) ;
}
2011-07-15 16:59:18 +00:00
}
else
{
( * msg_fcn_p ) ( tvb , tree , pinfo , offset , len - offset ) ;
}
2009-03-04 19:51:55 +00:00
}
2012-04-24 12:33:00 +00:00
static void
dissect_nas_eps_plain ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree )
{
2012-05-07 22:11:34 +00:00
proto_item * item ;
proto_tree * nas_eps_tree ;
2012-04-24 12:33:00 +00:00
guint8 pd ;
2012-05-07 22:11:34 +00:00
int offset = 0 ;
2012-04-24 12:33:00 +00:00
/* make entry in the Protocol column on summary display */
2012-05-20 09:50:34 +00:00
col_append_sep_str ( pinfo - > cinfo , COL_PROTOCOL , " / " , " NAS-EPS " ) ;
2012-04-24 12:33:00 +00:00
item = proto_tree_add_item ( tree , proto_nas_eps , tvb , 0 , - 1 , ENC_NA ) ;
nas_eps_tree = proto_item_add_subtree ( item , ett_nas_eps ) ;
2012-06-25 11:12:54 +00:00
/* SERVICE REQUEST (security header type equal to 12 or greater) is not a plain NAS message */
pd = tvb_get_guint8 ( tvb , offset ) ;
2013-01-07 21:37:55 +00:00
if ( ( ( pd & 0x0f ) = = 0x07 ) & & ( ( pd & 0xf0 ) > = 0xc0 ) ) {
2012-07-17 10:35:21 +00:00
col_append_sep_str ( pinfo - > cinfo , COL_INFO , NULL , " Service request " ) ;
2012-06-25 11:12:54 +00:00
/* Security header type Security header type 9.3.1 M V 1/2 */
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 ) ;
offset + + ;
2014-08-19 21:00:57 +00:00
nas_emm_service_req ( tvb , nas_eps_tree , pinfo , offset , tvb_reported_length ( tvb ) - offset ) ;
2012-06-25 11:12:54 +00:00
return ;
}
pd & = 0x0f ;
2012-05-07 22:11:34 +00:00
switch ( pd ) {
2012-04-24 12:33:00 +00:00
case 2 :
/* EPS session management messages.
* Ref 3 GPP 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 3 GPP 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 3 GPP TS 24.007 version 8.0 .0 Release 8 , Table 11.2 : Protocol discriminator values
*/
2012-05-07 22:11:34 +00:00
if ( gsm_a_dtap_handle ) {
2012-04-24 12:33:00 +00:00
tvbuff_t * new_tvb = tvb_new_subset_remaining ( tvb , offset ) ;
call_dissector ( gsm_a_dtap_handle , new_tvb , pinfo , nas_eps_tree ) ;
break ;
} /* else fall through default */
default :
2015-04-05 14:37:06 +00:00
proto_tree_add_expert_format ( nas_eps_tree , pinfo , & ei_nas_eps_unknown_pd , tvb , offset , - 1 , " Not a NAS EPS PD %u (%s) " ,
pd , val_to_str_const ( pd , protocol_discriminator_vals , " Unknown " ) ) ;
2012-04-24 12:33:00 +00:00
break ;
}
}
2009-06-11 16:26:31 +00:00
/* TS 24.301 8.2.1
2011-07-15 16:59:18 +00:00
* 9 General message format and information elements coding
* 9.1 Overview
2009-06-11 16:26:31 +00:00
* Within the protocols defined in the present document , every message , except the SERVICE REQUEST message ,
* is a standard L3 message as defined in 3 GPP TS 24.007 [ 12 ] . This means that the message consists of the following parts :
2011-07-15 16:59:18 +00:00
* 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.
2009-06-11 16:26:31 +00:00
*
2010-10-10 20:07:06 +00:00
* The EPS bearer identity and the procedure transaction identity are only used in messages
2009-06-11 16:26:31 +00:00
* with protocol discriminator EPS session management . Octet 1 a with the procedure transaction
* identity shall only be included in these messages .
*/
2009-04-24 20:06:00 +00:00
/*
* All messages recived here will have the security header :
* Figure 9.1 .2 : General message organization example for a security protected NAS message
2011-07-15 16:59:18 +00:00
* 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 .
2009-04-24 20:06:00 +00:00
*/
2009-03-04 19:51:55 +00:00
static void
dissect_nas_eps ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree )
{
2012-05-07 22:11:34 +00:00
proto_item * item ;
proto_tree * nas_eps_tree ;
2011-07-15 16:59:18 +00:00
guint8 pd , security_header_type ;
2012-05-07 22:11:34 +00:00
int offset = 0 ;
2011-07-15 16:59:18 +00:00
guint32 len ;
guint32 msg_auth_code ;
2014-08-19 21:00:57 +00:00
len = tvb_reported_length ( tvb ) ;
2012-04-24 12:33:00 +00:00
/* The protected NAS message header is 6 octets long, and the NAS message header is at least 2 octets long. */
/* If the length of the tvbuffer is less than 8 octets, we can safely conclude the message is not protected. */
if ( len < 8 ) {
dissect_nas_eps_plain ( tvb , pinfo , tree ) ;
2012-05-07 22:11:34 +00:00
return ;
2012-04-24 12:33:00 +00:00
}
2012-11-14 10:02:15 +00:00
if ( g_nas_eps_dissect_plain ) {
dissect_nas_eps_plain ( tvb , pinfo , tree ) ;
return ;
}
2011-07-15 16:59:18 +00:00
/* make entry in the Protocol column on summary display */
2012-05-20 09:50:34 +00:00
col_append_sep_str ( pinfo - > cinfo , COL_PROTOCOL , " / " , " NAS-EPS " ) ;
2011-07-15 16:59:18 +00:00
2011-10-21 02:10:19 +00:00
item = proto_tree_add_item ( tree , proto_nas_eps , tvb , 0 , - 1 , ENC_NA ) ;
2011-07-15 16:59:18 +00:00
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 */
2012-05-07 22:11:34 +00:00
if ( security_header_type = = 0 ) {
if ( pd = = 7 ) {
2011-07-15 16:59:18 +00:00
/* Plain EPS mobility management messages. */
2012-06-25 11:12:54 +00:00
dissect_nas_eps_emm_msg ( tvb , pinfo , nas_eps_tree , offset , FALSE ) ;
2011-07-15 16:59:18 +00:00
return ;
2012-05-07 22:11:34 +00:00
} else {
2015-04-05 14:37:06 +00:00
proto_tree_add_expert ( nas_eps_tree , pinfo , & ei_nas_eps_esm_tp_not_integ_prot , tvb , offset , len ) ;
2011-07-15 16:59:18 +00:00
return ;
}
2012-05-07 22:11:34 +00:00
} else {
2012-06-25 11:12:54 +00:00
/* SERVICE REQUEST (12 or greater) is not a plain NAS message treat separately */
if ( security_header_type > = 12 ) {
2012-07-17 10:35:21 +00:00
col_append_sep_str ( pinfo - > cinfo , COL_INFO , NULL , " Service request " ) ;
2011-07-15 16:59:18 +00:00
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 ;
2012-05-07 22:11:34 +00:00
if ( ( security_header_type = = 2 ) | | ( security_header_type = = 4 ) ) {
2011-07-15 16:59:18 +00:00
/* Possible ciphered message */
2012-05-07 22:11:34 +00:00
if ( msg_auth_code ! = 0 ) {
2011-07-15 16:59:18 +00:00
/* 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 */
2012-10-25 21:37:12 +00:00
/* Read security_header_type / EPS bearer id AND pd */
2011-11-17 20:03:36 +00:00
pd = tvb_get_guint8 ( tvb , offset ) ;
2011-07-15 16:59:18 +00:00
/* If pd is in plaintext this message probably isn't ciphered */
2012-10-25 21:37:12 +00:00
if ( ( pd ! = 7 ) & & ( pd ! = 15 ) & &
( ( ( pd & 0x0f ) ! = 2 ) | | ( ( ( pd & 0x0f ) = = 2 ) & & ( ( pd & 0xf0 ) > 0 ) & & ( ( pd & 0xf0 ) < 0x50 ) ) ) ) {
2015-04-05 14:37:06 +00:00
proto_tree_add_item ( nas_eps_tree , hf_nas_eps_ciphered_msg , tvb , offset , len - 6 , ENC_NA ) ;
2012-11-14 10:02:15 +00:00
return ;
2011-07-15 16:59:18 +00:00
}
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
/* 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 + + ;
}
2012-05-07 22:11:34 +00:00
} else {
2011-07-15 16:59:18 +00:00
/* 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 ;
2012-05-07 22:11:34 +00:00
switch ( pd ) {
2011-07-15 16:59:18 +00:00
case 2 :
/* EPS session management messages.
* Ref 3 GPP 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 3 GPP 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 3 GPP TS 24.007 version 8.0 .0 Release 8 , Table 11.2 : Protocol discriminator values
*/
2012-05-07 22:11:34 +00:00
if ( gsm_a_dtap_handle ) {
2012-03-13 17:21:46 +00:00
tvbuff_t * new_tvb = tvb_new_subset_remaining ( tvb , offset ) ;
2011-07-15 16:59:18 +00:00
call_dissector ( gsm_a_dtap_handle , new_tvb , pinfo , nas_eps_tree ) ;
break ;
} /* else fall through default */
default :
2015-04-05 14:37:06 +00:00
proto_tree_add_expert_format ( nas_eps_tree , pinfo , & ei_nas_eps_unknown_pd , tvb , offset , - 1 , " Not a NAS EPS PD %u (%s) " ,
pd , val_to_str_const ( pd , protocol_discriminator_vals , " Unknown " ) ) ;
2011-07-15 16:59:18 +00:00
break ;
}
2009-03-04 19:51:55 +00:00
2008-11-27 21:45:42 +00:00
}
2012-03-13 17:21:46 +00:00
void
2013-12-14 16:09:57 +00:00
proto_register_nas_eps ( void )
{
2012-05-07 22:11:34 +00:00
guint i ;
guint last_offset ;
module_t * nas_eps_module ;
2008-11-27 21:45:42 +00:00
2011-07-15 16:59:18 +00:00
/* List of fields */
2008-11-27 21:45:42 +00:00
static hf_register_info hf [ ] = {
2011-07-15 16:59:18 +00:00
{ & hf_nas_eps_msg_emm_type ,
{ " NAS EPS Mobility Management Message Type " , " nas_eps.nas_msg_emm_type " ,
2012-03-13 17:21:46 +00:00
FT_UINT8 , BASE_HEX | BASE_EXT_STRING , & nas_msg_emm_strings_ext , 0x0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
{ & hf_nas_eps_common_elem_id ,
{ " Element ID " , " nas_eps.common.elem_id " ,
2012-05-21 19:27:38 +00:00
FT_UINT8 , BASE_HEX , NULL , 0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
{ & hf_nas_eps_emm_elem_id ,
{ " Element ID " , " nas_eps.emm.elem_id " ,
2012-05-21 19:27:38 +00:00
FT_UINT8 , BASE_HEX , NULL , 0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
{ & hf_nas_eps_bearer_id ,
{ " EPS bearer identity " , " nas_eps.bearer_id " ,
2012-10-02 20:44:36 +00:00
FT_UINT8 , BASE_DEC , VALS ( nas_eps_esm_bearer_id_vals ) , 0xf0 ,
2011-07-15 16:59:18 +00:00
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 }
} ,
2015-04-05 14:37:06 +00:00
{ & hf_nas_eps_ciphered_msg ,
{ " Ciphered message " , " nas_eps.ciphered_msg " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_nas_eps_msg_elems ,
{ " Message Elements " , " nas_eps.message_elements " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-07-15 16:59:18 +00:00
{ & 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 " ,
2012-03-13 17:21:46 +00:00
FT_BOOLEAN , BASE_NONE , TFS ( & nas_eps_emm_paging_id_vals ) , 0x0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
2014-12-04 13:38:35 +00:00
{ & hf_nas_eps_emm_ext_emm_cause ,
{ " Extended EMM cause " , " nas_eps.emm.ext_emm_cause " ,
FT_BOOLEAN , BASE_NONE , TFS ( & nas_eps_ext_emm_cause ) , 0x0 ,
NULL , HFILL }
} ,
2011-07-15 16:59:18 +00:00
{ & 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 }
} ,
2012-05-20 09:50:34 +00:00
{ & hf_nas_eps_emm_esr_ps ,
{ " ESRPS " , " nas_eps.emm.esr_ps " ,
FT_BOOLEAN , BASE_NONE , TFS ( & nas_eps_emm_esr_ps_value ) , 0x0 ,
" Support of EXTENDED SERVICE REQUEST for packet services " , HFILL }
} ,
{ & hf_nas_eps_emm_cs_lcs ,
2011-07-15 16:59:18 +00:00
{ " 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 }
} ,
2012-05-20 09:50:34 +00:00
{ & hf_nas_eps_emm_epc_lcs ,
2011-07-15 16:59:18 +00:00
{ " 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 }
} ,
2012-05-20 09:50:34 +00:00
{ & hf_nas_eps_emm_emc_bs ,
2011-07-15 16:59:18 +00:00
{ " EMC BS " , " nas_eps.emm.emc_bs " ,
FT_BOOLEAN , BASE_NONE , TFS ( & nas_eps_emm_emc_bs_value ) , 0x0 ,
" Emergency bearer services indicator " , HFILL }
} ,
2012-05-20 09:50:34 +00:00
{ & hf_nas_eps_emm_ims_vops ,
2011-07-15 16:59:18 +00:00
{ " 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 " ,
2012-05-20 09:50:34 +00:00
FT_BOOLEAN , BASE_DEC , TFS ( & nas_eps_tsc_value ) , 0x0 ,
2011-07-15 16:59:18 +00:00
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_imei ,
2009-10-02 09:23:46 +00:00
{ " IMEI " , " nas_eps.emm.imei " ,
FT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2011-07-15 16:59:18 +00:00
} ,
{ & 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 ,
2012-01-23 19:17:42 +00:00
{ " Spare half octet " , " nas_eps.emm.spare_half_octet " ,
2011-07-15 16:59:18 +00:00
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 " ,
2012-03-13 17:21:46 +00:00
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & nas_eps_emm_cause_values_ext , 0x0 ,
2011-07-15 16:59:18 +00:00
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 ,
2012-10-02 12:46:21 +00:00
{ " 128-EEA3 " , " nas_eps.emm.eea3 " ,
2011-07-15 16:59:18 +00:00
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 ,
2012-10-02 12:46:21 +00:00
{ " 128-EIA3 " , " nas_eps.emm.eia3 " ,
2011-07-15 16:59:18 +00:00
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 }
} ,
2014-12-04 13:38:35 +00:00
{ & hf_nas_eps_emm_prose_dd_cap ,
{ " ProSe-dd capability " , " nas_eps.emm.prose_dd_cap " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_prose_dd_cap_flg ) , 0x80 ,
" ProSe direct discovery capability " , HFILL }
} ,
{ & hf_nas_eps_emm_prose_cap ,
{ " ProSe capability " , " nas_eps.emm.prose_cap " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_prose_cap_flg ) , 0x40 ,
NULL , HFILL }
} ,
2012-10-02 12:46:21 +00:00
{ & hf_nas_eps_emm_h245_ash_cap ,
{ " H.245-ASH capability " , " nas_eps.emm.h245_ash_cap " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_h245_ash_cap_flg ) , 0x20 ,
" H.245 after SRVCC handover capability " , HFILL }
} ,
2012-05-20 09:50:34 +00:00
{ & hf_nas_eps_emm_acc_csfb_cap ,
{ " ACC-CSFB capability " , " nas_eps.emm.acc_csfb_cap " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_acc_csfb_cap_flg ) , 0x10 ,
" Access class control for CSFB capability " , HFILL }
} ,
2011-07-15 16:59:18 +00:00
{ & hf_nas_eps_emm_lpp_cap ,
{ " LPP capability " , " nas_eps.emm.lpp_cap " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_lpp_cap_flg ) , 0x08 ,
2012-05-20 09:50:34 +00:00
" LTE Positioning Protocol capability " , HFILL }
2011-07-15 16:59:18 +00:00
} ,
{ & hf_nas_eps_emm_lcs_cap ,
{ " LCS capability " , " nas_eps.emm.lcs_cap " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_lcs_cap_flg ) , 0x04 ,
2012-05-20 09:50:34 +00:00
" Location services notification mechanisms capability " , HFILL }
2011-07-15 16:59:18 +00:00
} ,
{ & 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 }
} ,
2014-12-04 13:38:35 +00:00
{ & hf_nas_eps_emm_prose_dc_cap ,
{ " ProSe-dc capability " , " nas_eps.emm.prose_dc_cap " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_prose_dc_cap_flg ) , 0x01 ,
" ProSe direct communication capability " , HFILL }
} ,
2011-07-15 16:59:18 +00:00
{ & hf_nas_eps_emm_ue_ra_cap_inf_upd_need_flg ,
2012-10-02 12:46:21 +00:00
{ " URC upd " , " nas_eps.emm.ue_ra_cap_inf_upd_need_flg " ,
2011-07-15 16:59:18 +00:00
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_ue_ra_cap_inf_upd_need_flg ) , 0x01 ,
2012-10-02 12:46:21 +00:00
" UE radio capability information update needed flag " , HFILL }
2011-07-15 16:59:18 +00:00
} ,
{ & hf_nas_eps_emm_ss_code ,
2012-01-23 19:17:42 +00:00
{ " SS Code " , " nas_eps.emm.ss_code " ,
2011-07-15 16:59:18 +00:00
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 " ,
2012-05-20 09:50:34 +00:00
FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( nas_eps_emm_gen_msg_cont_type_vals ) , 0x0 ,
2011-07-15 16:59:18 +00:00
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 ,
2013-09-16 10:39:06 +00:00
{ " APN-AMBR for uplink (extended) " , " nas_eps.emm.apn_ambr_ul_ext " ,
2011-07-15 16:59:18 +00:00
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_nas_eps_emm_apn_ambr_dl_ext ,
2013-09-16 10:39:06 +00:00
{ " APN-AMBR for downlink (extended) " , " nas_eps.emm.apn_ambr_dl_ext " ,
2011-07-15 16:59:18 +00:00
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_nas_eps_emm_apn_ambr_ul_ext2 ,
2013-09-16 10:39:06 +00:00
{ " APN-AMBR for uplink (extended-2) " , " nas_eps.emm.apn_ambr_ul_ext2 " ,
2011-07-15 16:59:18 +00:00
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_nas_eps_emm_apn_ambr_dl_ext2 ,
2013-09-16 10:39:06 +00:00
{ " APN-AMBR for downlink (extended-2) " , " nas_eps.emm.apn_ambr_dl_ext2 " ,
2011-07-15 16:59:18 +00:00
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2015-04-05 14:37:06 +00:00
{ & hf_nas_eps_emm_apn_ambr_ul_total ,
{ " Total APN-AMBR for uplink " , " nas_eps.emm.apn_ambr_ul_total " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_nas_eps_emm_apn_ambr_dl_total ,
{ " Total APN-AMBR for downlink " , " nas_eps.emm.apn_ambr_dl_total " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2012-05-20 09:50:34 +00:00
{ & hf_nas_eps_emm_guti_type ,
{ " GUTI type " , " nas_eps.emm.guti_type " ,
FT_BOOLEAN , BASE_NONE , TFS ( & nas_eps_emm_guti_type_value ) , 0x0 ,
NULL , HFILL }
} ,
2015-04-05 14:37:06 +00:00
{ & hf_nas_eps_emm_detach_req_UL ,
{ " Uplink " , " nas_eps.emm.detach_req_ul " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_nas_eps_emm_detach_req_DL ,
{ " Downlink " , " nas_eps.emm.detach_req_dl " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-07-15 16:59:18 +00:00
{ & 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 " ,
2014-03-27 10:38:06 +00:00
FT_UINT8 , BASE_DEC , VALS ( nas_eps_emm_type_of_detach_UL_vals ) , 0x0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
{ & hf_nas_eps_emm_detach_type_DL ,
{ " Detach Type " , " nas_eps.emm.detach_type_dl " ,
2014-03-27 10:38:06 +00:00
FT_UINT8 , BASE_DEC , VALS ( nas_eps_emm_type_of_detach_DL_vals ) , 0x0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
{ & hf_nas_eps_qci ,
{ " Quality of Service Class Identifier (QCI) " , " nas_eps.emm.qci " ,
2012-01-24 19:09:12 +00:00
FT_UINT8 , ( BASE_DEC | BASE_RANGE_STRING ) , RVALS ( nas_eps_qci_vals ) , 0x0 ,
2011-07-15 16:59:18 +00:00
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 " ,
2012-05-20 09:50:34 +00:00
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & nas_eps_esm_cause_vals_ext , 0x0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
{ & hf_nas_eps_esm_eit ,
{ " EIT (ESM information transfer) " , " nas_eps.emm.eit " ,
2012-02-15 22:56:20 +00:00
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_eit_vals ) , 0x01 ,
2011-07-15 16:59:18 +00:00
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 }
} ,
2015-04-03 14:57:42 +00:00
{ & hf_nas_eps_esm_ratc ,
{ " RATC " , " nas_eps.esm.ratc " ,
FT_BOOLEAN , 8 , TFS ( & nas_eps_emm_active_flg_value ) , 0x01 ,
NULL , HFILL }
} ,
2011-07-15 16:59:18 +00:00
{ & 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 " ,
2012-05-20 09:50:34 +00:00
FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( nas_eps_service_type_vals ) , 0x0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
2011-10-12 21:17:23 +00:00
{ & hf_nas_eps_nas_msg_cont ,
2011-10-13 18:22:55 +00:00
{ " NAS message container content " , " nas_eps.emm.nas_msg_cont " ,
2011-10-12 21:17:23 +00:00
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_nas_eps_gen_msg_cont ,
2011-10-13 18:22:55 +00:00
{ " Generic message container content " , " nas_eps.emm.gen_msg_cont " ,
2011-10-12 21:17:23 +00:00
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-10-16 16:02:26 +00:00
{ & hf_nas_eps_cmn_add_info ,
{ " Additional information content " , " nas_eps.cmn.add_info " ,
2011-10-12 21:17:23 +00:00
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-07-15 16:59:18 +00:00
/* ESM hf cvariables */
{ & hf_nas_eps_msg_esm_type ,
{ " NAS EPS session management messages " , " nas_eps.nas_msg_esm_type " ,
2012-03-13 17:21:46 +00:00
FT_UINT8 , BASE_HEX | BASE_EXT_STRING , & nas_msg_esm_strings_ext , 0x0 ,
2011-07-15 16:59:18 +00:00
NULL , HFILL }
} ,
{ & hf_nas_eps_esm_elem_id ,
{ " Element ID " , " nas_eps.esm.elem_id " ,
2012-05-21 19:27:38 +00:00
FT_UINT8 , BASE_HEX , NULL , 0 ,
2011-07-15 16:59:18 +00:00
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 ,
2012-05-20 09:50:34 +00:00
{ " PDN type " , " nas_eps.esm_pdn_type " ,
2011-07-15 16:59:18 +00:00
FT_UINT8 , BASE_DEC , VALS ( nas_eps_esm_pdn_type_values ) , 0x0 ,
NULL , HFILL }
} ,
2011-12-19 16:57:17 +00:00
{ & hf_nas_eps_esm_request_type ,
2012-05-20 09:50:34 +00:00
{ " Request type " , " nas_eps.esm_request_type " ,
2011-12-19 16:57:17 +00:00
FT_UINT8 , BASE_DEC , VALS ( nas_eps_esm_request_type_values ) , 0x0 ,
NULL , HFILL }
} ,
2008-11-27 21:45:42 +00:00
} ;
2015-01-02 17:19:10 +00:00
static ei_register_info ei [ ] = {
{ & ei_nas_eps_extraneous_data , { " nas_eps.extraneous_data " , PI_PROTOCOL , PI_NOTE , " Extraneous Data, dissector bug or later version spec(report to wireshark.org) " , EXPFILL } } ,
2015-04-05 14:37:06 +00:00
{ & ei_nas_eps_unknown_identity , { " nas_eps.emm.unknown_identity " , PI_PROTOCOL , PI_WARN , " Type of identity not known " , EXPFILL } } ,
{ & ei_nas_eps_unknown_type_of_list , { " nas_eps.emm.tai_unknown_list_type " , PI_PROTOCOL , PI_WARN , " Unknown type of list " , EXPFILL } } ,
{ & ei_nas_eps_wrong_nb_of_elems , { " nas_eps.emm.tai_wrong_number_of_elems " , PI_PROTOCOL , PI_ERROR , " [Wrong number of elements?] " , EXPFILL } } ,
{ & ei_nas_eps_unknown_msg_type , { " nas_eps.unknown_msg_type " , PI_PROTOCOL , PI_WARN , " Unknown Message Type " , EXPFILL } } ,
{ & ei_nas_eps_unknown_pd , { " nas_eps.unknown_pd " , PI_PROTOCOL , PI_ERROR , " Unknown protocol discriminator " , EXPFILL } } ,
{ & ei_nas_eps_esm_tp_not_integ_prot , { " nas_eps.esm_tp_not_integrity_protected " , PI_PROTOCOL , PI_ERROR , " All ESM / Test Procedures messages should be integrity protected " , EXPFILL } }
2015-01-02 17:19:10 +00:00
} ;
expert_module_t * expert_nas_eps ;
2011-07-15 16:59:18 +00:00
/* Setup protocol subtree array */
2011-10-16 16:02:26 +00:00
# define NUM_INDIVIDUAL_ELEMS 5
2011-07-15 16:59:18 +00:00
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 ;
2011-10-12 21:17:23 +00:00
ett [ 2 ] = & ett_nas_eps_nas_msg_cont ;
ett [ 3 ] = & ett_nas_eps_gen_msg_cont ;
2011-10-16 16:02:26 +00:00
ett [ 4 ] = & ett_nas_eps_cmn_add_info ;
2011-07-15 16:59:18 +00:00
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 ) ) ;
2015-01-02 17:19:10 +00:00
expert_nas_eps = expert_register_protocol ( proto_nas_eps ) ;
expert_register_field_array ( expert_nas_eps , ei , array_length ( ei ) ) ;
2011-07-15 16:59:18 +00:00
/* 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 ) ;
2010-06-09 17:40:03 +00:00
2012-04-24 12:33:00 +00:00
/* Register configuration options to always dissect as plain messages */
2012-12-03 22:42:56 +00:00
nas_eps_module = prefs_register_protocol ( proto_nas_eps , NULL ) ;
2012-04-24 12:33:00 +00:00
2012-12-03 22:42:56 +00:00
prefs_register_bool_preference ( nas_eps_module ,
" dissect_plain " ,
" Force dissect as plain NAS EPS " ,
" Always dissect NAS EPS messages as plain " ,
& g_nas_eps_dissect_plain ) ;
2009-04-26 16:17:00 +00:00
}
2012-12-03 22:42:56 +00:00
void
proto_reg_handoff_nas_eps ( void )
{
gsm_a_dtap_handle = find_dissector ( " gsm_a_dtap " ) ;
lpp_handle = find_dissector ( " lpp " ) ;
}
2014-05-02 12:31:23 +00:00
/*
* Editor modelines
*
* Local Variables :
* c - basic - offset : 4
* tab - width : 8
* indent - tabs - mode : nil
* End :
*
* ex : set shiftwidth = 4 tabstop = 8 expandtab :
* : indentSize = 4 : tabSize = 8 : noTabs = true :
*/