2010-12-26 21:06:08 +00:00
/* packet-sgsap.c
* Routines for SGs Application Part ( SGsAP ) protocol dissection
*
2011-02-03 16:36:22 +00:00
* Copyright 2010 - 2011 , Anders Broman < anders . broman @ ericsson . com >
2010-12-26 21:06:08 +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 .
2010-12-26 21:06:08 +00:00
*
* References : 3 GPP TS 29.118 V10 .2 .0 ( 2010 - 12 )
*/
2012-09-20 02:03:38 +00:00
# include "config.h"
2010-12-26 21:06:08 +00:00
# include <epan/packet.h>
2014-01-22 06:13:17 +00:00
# include <epan/prefs.h>
2015-01-02 17:19:10 +00:00
# include <epan/expert.h>
2010-12-26 21:06:08 +00:00
# include "packet-gsm_a_common.h"
2010-12-27 15:15:55 +00:00
# include "packet-e212.h"
2010-12-26 21:06:08 +00:00
# define PNAME "SGs Application Part (SGsAP)"
# define PSNAME "SGSAP"
# define PFNAME "sgsap"
2013-12-11 19:46:38 +00:00
void proto_register_sgsap ( void ) ;
void proto_reg_handoff_sgsap ( void ) ;
2010-12-26 21:06:08 +00:00
/* Global variables */
2010-12-28 11:24:46 +00:00
static dissector_handle_t gsm_a_dtap_handle ;
2010-12-26 21:06:08 +00:00
2014-01-22 06:13:17 +00:00
/* The registered SCTP port number for SGsAP is 29118.
* The payload protocol identifier to be used for SGsAP is 0.
*/
# define SGSAP_SCTP_PORT_RANGE "29118"
static range_t * global_sgsap_port_range ;
2010-12-26 21:06:08 +00:00
/* Initialize the protocol and registered fields */
static int proto_sgsap = - 1 ;
static int hf_sgsap_msg_type = - 1 ;
int hf_sgsap_elem_id = - 1 ;
static int hf_sgsap_eps_location_update_type = - 1 ;
static int hf_sgsap_service_indicator_value = - 1 ;
static int hf_sgsap_sgs_cause = - 1 ;
2010-12-27 15:15:55 +00:00
static int hf_sgsap_ue_emm_mode = - 1 ;
2012-11-28 22:41:07 +00:00
static int hf_sgsap_eci = - 1 ;
2011-01-21 09:26:29 +00:00
static int hf_sgsap_cn_id = - 1 ;
2010-12-27 15:15:55 +00:00
static int hf_sgsap_imsi_det_eps = - 1 ;
2013-04-08 16:44:15 +00:00
static int hf_sgsap_imsi_det_non_eps = - 1 ;
2010-12-27 15:15:55 +00:00
static int hf_sgsap_lcs_indic = - 1 ;
2011-02-03 16:36:22 +00:00
static int hf_sgsap_mme_name = - 1 ;
static int hf_sgsap_vlr_name = - 1 ;
2011-03-22 09:06:42 +00:00
static int hf_sgsap_imeisv = - 1 ;
2014-09-06 12:44:23 +00:00
static int hf_sgsap_unknown_msg = - 1 ;
static int hf_sgsap_message_elements = - 1 ;
2014-10-17 14:48:48 +00:00
static int hf_sgsap_csri = - 1 ;
2010-12-26 21:06:08 +00:00
static int ett_sgsap = - 1 ;
2015-01-02 17:19:10 +00:00
static expert_field ei_sgsap_extraneous_data = EI_INIT ;
static expert_field ei_sgsap_missing_mandatory_element = EI_INIT ;
2011-09-21 23:42:55 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 Information elements
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .1 CLI
2010-12-26 21:06:08 +00:00
*/
/*
2011-09-21 23:42:55 +00:00
* Octets 3 to 14 contain the value part of the Calling party BCD number information element
* defined in subclause 10.5 .4 .9 of 3 GPP TS 24.008 [ 8 ] ( octets 3 to 14 , i . e . not including
* 3 GPP TS 24.008 IEI and 3 GPP TS 24.008 length indicator )
2010-12-26 21:06:08 +00:00
* ( packet - gsm_a_dtap . c )
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .2 EPS location update type
2010-12-26 21:06:08 +00:00
*/
/* EPS location update type value (octet 3) */
static const value_string sgsap_eps_location_update_type_values [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x00 , " Shall not be sent in this version of the protocol " } ,
{ 0x01 , " IMSI attach " } ,
{ 0x02 , " Normal location update " } ,
{ 0 , NULL }
2010-12-26 21:06:08 +00:00
} ;
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_eps_loc_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-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint8 oct ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* Octet 3 EPS location update type value */
proto_tree_add_item ( tree , hf_sgsap_eps_location_update_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
if ( add_string ) {
oct = tvb_get_guint8 ( tvb , curr_offset ) ;
g_snprintf ( add_string , string_len , " - %s " , val_to_str_const ( oct , sgsap_eps_location_update_type_values , " Reserved " ) ) ;
}
2011-02-03 16:36:22 +00:00
2012-11-28 22:41:07 +00:00
curr_offset + + ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
return ( curr_offset - offset ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 9.4 .3 Erroneous message
2010-12-26 21:06:08 +00:00
*
* See subclause 18.4 .5 in 3 GPP TS 29.018 [ 16 ] .
*/
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_err_msg ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
/* 18.4.5 Erroneous message
* The Erroneous message IE is a TLV IE that encapsulates the message in error .
* Octet 3 - Octet n
* Erroneous message including the message type .
*/
proto_tree_add_item ( tree , hf_sgsap_msg_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
return ( len ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 9.4 .3 a E - UTRAN Cell Global Identity
2010-12-26 21:06:08 +00:00
*
* The coding of the E - UTRAN Cell Global Identity value is according to ECGI field information element
2010-12-27 15:15:55 +00:00
* as specified in subclause 8.21 .5 of 3 GPP TS 29.274 [ 17 A ] ( GTPv2 - C )
2010-12-26 21:06:08 +00:00
*/
2010-12-27 15:15:55 +00:00
static guint16
2013-05-03 14:54:39 +00:00
de_sgsap_ecgi ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-27 15:15:55 +00:00
{
2011-02-03 18:15:56 +00:00
guint32 curr_offset ;
2010-12-27 15:15:55 +00:00
2011-02-03 18:15:56 +00:00
curr_offset = offset ;
2010-12-27 15:15:55 +00:00
2015-01-14 12:47:08 +00:00
dissect_e212_mcc_mnc ( tvb , pinfo , tree , offset , E212_NONE , TRUE ) ;
2012-11-28 22:41:07 +00:00
curr_offset + = 3 ;
2010-12-27 15:15:55 +00:00
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_sgsap_eci , tvb , curr_offset , 4 , ENC_BIG_ENDIAN ) ;
2012-11-28 22:41:07 +00:00
curr_offset + = 4 ;
2010-12-27 15:15:55 +00:00
2011-02-03 18:15:56 +00:00
return ( curr_offset - offset ) ;
2010-12-27 15:15:55 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .4 Global CN - Id
2010-12-26 21:06:08 +00:00
*
* See subclause 18.4 .27 in 3 GPP TS 29.018 [ 16 ] .
2010-12-30 14:10:35 +00:00
* 18.4 .27 Global CN - Id
* The Global CN - Id consists of a PLMN - Id and a CN - Id , see 3 GPP TS 23.003 . The PLMN - Id consists of MCC and MNC
* coded according to Location Area Identification in 3 GPP TS 24.008 . The CN - Id is an integer defined by O & M . The
* least significant bit of the CN - Id field is bit 1 of octet 7 and the most significant bit is bit 8 of octet 6. If the CN - Id does
* not fill the field reserved for it , the rest of the bits are set to ' 0 ' .
2010-12-26 21:06:08 +00:00
*/
2011-01-21 09:26:29 +00:00
static guint16
2013-05-03 14:54:39 +00:00
de_sgsap_g_cn_id ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2011-01-21 09:26:29 +00:00
{
2011-02-03 18:15:56 +00:00
guint32 curr_offset ;
2011-01-21 09:26:29 +00:00
2011-02-03 18:15:56 +00:00
curr_offset = offset ;
2011-01-21 09:26:29 +00:00
2015-01-14 12:47:08 +00:00
dissect_e212_mcc_mnc ( tvb , pinfo , tree , offset , E212_NONE , TRUE ) ;
2012-11-28 22:41:07 +00:00
curr_offset + = 3 ;
2011-01-21 09:26:29 +00:00
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_sgsap_cn_id , tvb , curr_offset , 2 , ENC_BIG_ENDIAN ) ;
2012-11-28 22:41:07 +00:00
curr_offset + = 2 ;
2011-01-21 09:26:29 +00:00
2011-02-03 18:15:56 +00:00
return ( curr_offset - offset ) ;
2011-01-21 09:26:29 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .5 IMEISV
2010-12-26 21:06:08 +00:00
* See subclause 18.4 .9 in 3 GPP TS 29.018 [ 16 ] .
2011-09-21 23:42:55 +00:00
* The IMEISV is coded as a sequence of BCD digits , compressed two into each octet .
2011-01-21 14:03:42 +00:00
* The IMEISV consists of 16 digits
* ( see 3 GPP TS 23.003 ) .
2010-12-26 21:06:08 +00:00
*/
2011-03-22 09:06:42 +00:00
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_imeisv ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2011-03-22 09:06:42 +00:00
{
2012-11-28 22:41:07 +00:00
const char * imeisv_str ;
guint32 curr_offset ;
2011-03-22 09:06:42 +00:00
curr_offset = offset ;
2013-09-22 20:04:35 +00:00
imeisv_str = tvb_bcd_dig_to_wmem_packet_str ( tvb , curr_offset , len , NULL , FALSE ) ;
2012-11-28 22:41:07 +00:00
proto_tree_add_string ( tree , hf_sgsap_imeisv , tvb , curr_offset , len , imeisv_str ) ;
if ( add_string ) {
/* (len<<2)+4 = the maximum number of bytes to produce (including the terminating nul character). */
g_snprintf ( add_string , ( len < < 2 ) + 4 , " - %s " , imeisv_str ) ;
}
2011-03-22 09:06:42 +00:00
return ( len ) ;
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .6 IMSI
2010-12-26 21:06:08 +00:00
* See subclause 18.4 .10 in 3 GPP TS 29.018 [ 16 ] .
*/
2011-09-21 23:42:55 +00:00
/* The IMSI is coded as a sequence of BCD digits, compressed two into each octet.
* This is a variable length element , and includes a length indicator .
2011-01-21 14:03:42 +00:00
* The IMSI is defined in 3 GPP TS 23.003 . It shall not exceed 15 digits ( see 3 GPP TS 23.003 ) .
*/
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .7 IMSI detach from EPS service type
2010-12-26 21:06:08 +00:00
*/
2010-12-27 15:15:55 +00:00
/* IMSI detach from EPS service type value (octet 3) */
static const value_string sgsap_imsi_det_from_eps_serv_type_values [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x00 , " Interpreted as reserved in this version of the protocol " } ,
{ 0x01 , " Network initiated IMSI detach from EPS services " } ,
{ 0x02 , " UE initiated IMSI detach from EPS services " } ,
{ 0x03 , " EPS services not allowed " } ,
{ 0 , NULL }
2010-12-27 15:15:55 +00:00
} ;
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_imsi_det_eps ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-27 15:15:55 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
proto_tree_add_item ( tree , hf_sgsap_imsi_det_eps , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + = 1 ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
return ( curr_offset - offset ) ;
2010-12-27 15:15:55 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .8 IMSI detach from non - EPS service type
2010-12-26 21:06:08 +00:00
*/
2010-12-27 15:15:55 +00:00
/* IMSI detach from non-EPS service type value (octet 3)*/
static const value_string sgsap_imsi_det_from_non_eps_serv_type_values [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x00 , " Interpreted as reserved in this version of the protocol " } ,
{ 0x01 , " Explicit UE initiated IMSI detach from non-EPS services " } ,
{ 0x02 , " Combined UE initiated IMSI detach from EPS and non-EPS services " } ,
{ 0x03 , " Implicit network initiated IMSI detach from non-EPS services " } ,
{ 0 , NULL }
2010-12-27 15:15:55 +00:00
} ;
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_imsi_det_non_eps ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-27 15:15:55 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-27 15:15:55 +00:00
2013-04-08 16:44:15 +00:00
proto_tree_add_item ( tree , hf_sgsap_imsi_det_non_eps , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
2012-11-28 22:41:07 +00:00
curr_offset + = 1 ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
return ( curr_offset - offset ) ;
2010-12-27 15:15:55 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .9 LCS client identity
2011-09-21 23:42:55 +00:00
* The coding of the LCS client identity value is according to LCS - ClientID
2010-12-27 15:15:55 +00:00
* as specified in subclause 17.7 .13 of 3 GPP TS 29.002 [ 15 ]
* ( packet - nas_eps . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .10 LCS indicator
2010-12-26 21:06:08 +00:00
*/
2010-12-27 15:15:55 +00:00
static const value_string sgsap_lcs_indic_values [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x00 , " Normal, unspecified in this version of the protocol " } ,
{ 0x01 , " MT-LR " } ,
{ 0 , NULL }
2010-12-27 15:15:55 +00:00
} ;
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_lcs_indic ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-27 15:15:55 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
proto_tree_add_item ( tree , hf_sgsap_lcs_indic , tvb , curr_offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + = 1 ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
return ( curr_offset - offset ) ;
2010-12-27 15:15:55 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .11 Location area identifier
2010-12-26 21:06:08 +00:00
*
* Octets 3 to 7 contain the value part of the Location area identification information element
* defined in 3 GPP TS 24.008 [ 8 ] ( starting with octet 2 , i . e . not including 3 GPP TS 24.008 IEI )
2010-12-27 15:15:55 +00:00
* ( packet - gsm_a_common . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .12 MM information
2010-12-27 15:15:55 +00:00
* For the coding see subclause 18.4 .16 in 3 GPP TS 29.018 [ 16 ] .
* User information : This field is composed of one or more of the
* information elements of the MM information message as defined in
* 3 GPP TS 24.008 , excluding the Protocol discriminator , Skip
* indicator and Message type . This field includes the IEI and length
* indicatior of the other information elements .
2010-12-26 21:06:08 +00:00
*/
2010-12-27 15:15:55 +00:00
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_mm_info ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len , gchar * add_string _U_ , int string_len _U_ )
2010-12-27 15:15:55 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
dtap_mm_mm_info ( tvb , tree , pinfo , curr_offset , len ) ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
return ( len ) ;
2010-12-27 15:15:55 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .13 MME name
2010-12-26 21:06:08 +00:00
*/
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_mme_name ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint name_len , tmp ;
guint8 * fqdn = NULL ;
/* The MME name information element specifies the MME name and is coded as shown in figure 9.4.13.1. Octets 3
* through n contain the name in the form of a fully qualified domain name ( FQDN ) as specified in 3 GPP TS 23.003 [ 3 ] .
* The value part of the MME name information element ( not including IEI and length indicator ) shall have a length of 55
* octets .
*/
if ( len > 0 ) {
name_len = tvb_get_guint8 ( tvb , offset ) ;
if ( name_len < 0x20 ) {
2014-06-17 15:30:58 +00:00
fqdn = tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset + 1 , len - 1 , ENC_ASCII ) ;
2012-11-28 22:41:07 +00:00
for ( ; ; ) {
if ( name_len > = len - 1 )
break ;
tmp = name_len ;
name_len = name_len + fqdn [ tmp ] + 1 ;
fqdn [ tmp ] = ' . ' ;
}
} else {
2014-06-17 15:30:58 +00:00
fqdn = tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset , len , ENC_ASCII ) ;
2012-11-28 22:41:07 +00:00
}
proto_tree_add_string ( tree , hf_sgsap_mme_name , tvb , offset , len , fqdn ) ;
if ( add_string )
g_snprintf ( add_string , string_len , " - %s " , fqdn ) ;
}
return ( len ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 9.4 .14 Mobile identity
2010-12-26 21:06:08 +00:00
* See subclause 18.4 .17 in 3 GPP TS 29.018 [ 16 ] .
2010-12-27 15:15:55 +00:00
* ( packet - gsm_a_common . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .14 a Mobile Station Classmark 2
2010-12-26 21:06:08 +00:00
* With the exception of the IEI , the contents are specified in subclause 10.5 .1 .6 in 3 GPP TS 24.008 [ 8 ] .
2010-12-27 15:15:55 +00:00
* ( packet - gsm_a_common . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .15 NAS message container
2010-12-28 11:24:46 +00:00
* Octets 3 to 253 contain the SMS message ( i . e . CP DATA , CP ACK or CP ERROR )
* as defined in subclause 7.2 of 3 GPP TS 24.011 [ 10 ]
2010-12-26 21:06:08 +00:00
*/
2010-12-27 15:15:55 +00:00
static guint16
2013-05-03 14:54:39 +00:00
de_sgsap_nas_msg_container ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len , gchar * add_string _U_ , int string_len _U_ )
2010-12-27 15:15:55 +00:00
{
2012-11-28 22:41:07 +00:00
tvbuff_t * new_tvb ;
guint32 curr_offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
/* Octets 3 to 253 contain the SMS message (i.e. CP DATA, CP ACK or CP ERROR)
* as defined in subclause 7.2 of 3 GPP TS 24.011 [ 10 ]
*/
2014-06-06 14:35:50 +00:00
new_tvb = tvb_new_subset_length ( tvb , curr_offset , len ) ;
2012-11-28 22:41:07 +00:00
if ( gsm_a_dtap_handle ) {
2013-05-03 14:54:39 +00:00
call_dissector ( gsm_a_dtap_handle , new_tvb , pinfo , tree ) ;
2012-11-28 22:41:07 +00:00
}
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
return ( len ) ;
2010-12-27 15:15:55 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .16 Reject cause
2010-12-26 21:06:08 +00:00
* See subclause 18.4 .21 in 3 GPP TS 29.018 [ 16 ] .
2010-12-27 15:15:55 +00:00
* The rest of the information element is coded as the value part of
* the reject cause IE defined in 3 GPP TS 24.008 , not including
* 3 GPP TS 24.008 IEI .
* ( packet - gsm_a_dtap . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .17 Service indicator
2010-12-26 21:06:08 +00:00
*/
2012-11-28 22:41:07 +00:00
/* Octet 3 Service indicator value */
2010-12-26 21:06:08 +00:00
static const value_string sgsap_service_indicator_values [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x00 , " Shall not be sent in this version of the protocol " } ,
{ 0x01 , " CS call indicator " } ,
{ 0x02 , " SMS indicator " } ,
{ 0 , NULL }
2010-12-26 21:06:08 +00:00
} ;
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_serv_indic ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint8 oct ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* Octet 3 Service indicator value */
proto_tree_add_item ( tree , hf_sgsap_service_indicator_value , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
if ( add_string ) {
oct = tvb_get_guint8 ( tvb , curr_offset ) ;
g_snprintf ( add_string , string_len , " - %s " , val_to_str_const ( oct , sgsap_service_indicator_values , " Reserved " ) ) ;
}
curr_offset + + ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
return ( curr_offset - offset ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 9.4 .18 SGs cause
2010-12-26 21:06:08 +00:00
*/
/* SGs cause value (octet 3) */
static const value_string sgsap_sgs_cause_values [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x00 , " Normal, unspecified in this version of the protocol " } ,
{ 0x01 , " IMSI detached for EPS services " } ,
{ 0x02 , " IMSI detached for EPS and non-EPS services " } ,
{ 0x03 , " IMSI unknown " } ,
{ 0x04 , " IMSI detached for non-EPS services " } ,
{ 0x05 , " IMSI implicitly detached for non-EPS services " } ,
{ 0x06 , " UE unreachable " } ,
{ 0x07 , " Message not compatible with the protocol state " } ,
{ 0x08 , " Missing mandatory information element " } ,
{ 0x09 , " Invalid mandatory information " } ,
{ 0x0a , " Conditional information element error " } ,
{ 0x0b , " Semantically incorrect message " } ,
{ 0x0c , " Message unknown " } ,
{ 0x0d , " Mobile terminating CS fallback call rejected by the user " } ,
{ 0 , NULL }
2010-12-26 21:06:08 +00:00
} ;
2010-12-27 15:15:55 +00:00
static value_string_ext sgsap_sgs_cause_values_ext = VALUE_STRING_EXT_INIT ( sgsap_sgs_cause_values ) ;
2010-12-26 21:06:08 +00:00
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_sgs_cause ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint8 oct ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
proto_tree_add_item ( tree , hf_sgsap_sgs_cause , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
if ( add_string ) {
oct = tvb_get_guint8 ( tvb , curr_offset ) ;
g_snprintf ( add_string , string_len , " - %s " , val_to_str_ext_const ( oct , & sgsap_sgs_cause_values_ext , " Reserved " ) ) ;
}
curr_offset + + ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
return ( curr_offset - offset ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 9.4 .19 SS code
2011-09-21 23:42:55 +00:00
* The coding of the SS code value is according to SS - Code as specified in
2010-12-27 15:15:55 +00:00
* subclause 17.7 .5 of 3 GPP TS 29.002 [ 15 ]
* ( packet - nas_eps . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .20 TMSI
2010-12-26 21:06:08 +00:00
* See subclause 18.4 .23 in 3 GPP TS 29.018 [ 16 ] .
2010-12-27 20:19:55 +00:00
* ( packet - gsm_a_bssmap . c )
2010-12-26 21:06:08 +00:00
*/
2010-12-27 16:38:03 +00:00
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .21 TMSI status
2010-12-26 21:06:08 +00:00
*
* See subclause 18.4 .24 in 3 GPP TS 29.018 [ 16 ] .
2010-12-27 15:15:55 +00:00
* ( packet - gsm_a_gm . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .21 a Tracking Area Identity
2010-12-26 21:06:08 +00:00
* Octets 3 to 7 contain the value part of the Tracking Area Identity information element defined in 3 GPP TS 24.301 [ 14 ]
* ( starting with octet 2 , i . e . not including 3 GPP TS 24.301 IEI )
2010-12-27 15:15:55 +00:00
* ( packet - nas_eps . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .21 b UE Time Zone
2010-12-26 21:06:08 +00:00
* The coding of the UE Time Zone value is according to value part of the Time Zone information element as specified
* in subclause 10.5 .3 .8 of 3 GPP TS 24.008 [ 8 ] ( i . e . not including 3 GPP TS 24.008 IEI )
2010-12-27 15:15:55 +00:00
* ( packet - gsm_a_dtap . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .21 c UE EMM mode
2010-12-26 21:06:08 +00:00
*/
2010-12-27 15:15:55 +00:00
static const value_string sgsap_ue_emm_mode_values [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x00 , " EMM-IDLE " } ,
{ 0x01 , " EMM-CONNECTED " } ,
{ 0 , NULL }
2010-12-27 15:15:55 +00:00
} ;
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_ue_emm_mode ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-27 15:15:55 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
proto_tree_add_item ( tree , hf_sgsap_ue_emm_mode , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
curr_offset + = 1 ;
2010-12-27 15:15:55 +00:00
2012-11-28 22:41:07 +00:00
return ( curr_offset - offset ) ;
2010-12-27 15:15:55 +00:00
}
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.4 .22 VLR name
2010-12-26 21:06:08 +00:00
*/
static guint16
2011-04-04 14:37:25 +00:00
de_sgsap_vlr_name ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint name_len , tmp ;
guint8 * fqdn = NULL ;
/* The VLR name information element specifies the VLR name and is coded as shown in figure 9.4.22.1.
* Octets 3 through n contain the VLR name in the form of a fully qualified domain name ( FQDN )
* as specified in IETF RFC 1035 [ 21 ] .
*/
if ( len > 0 ) {
name_len = tvb_get_guint8 ( tvb , offset ) ;
if ( name_len < 0x20 ) {
2014-06-17 15:30:58 +00:00
fqdn = tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset + 1 , len - 1 , ENC_ASCII ) ;
2012-11-28 22:41:07 +00:00
for ( ; ; ) {
if ( name_len > = len - 1 )
break ;
tmp = name_len ;
name_len = name_len + fqdn [ tmp ] + 1 ;
fqdn [ tmp ] = ' . ' ;
}
} else {
2014-06-17 15:30:58 +00:00
fqdn = tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset , len , ENC_ASCII ) ;
2012-11-28 22:41:07 +00:00
}
proto_tree_add_string ( tree , hf_sgsap_vlr_name , tvb , offset , len , fqdn ) ;
if ( add_string )
g_snprintf ( add_string , string_len , " - %s " , fqdn ) ;
}
return ( len ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 9.4 .23 Channel needed
2010-12-27 15:15:55 +00:00
* See subclause 18.4 .2 in 3 GPP TS 29.018 [ 16 ] .
* The rest of the information element is coded as the IEI part and the
* value part of the Channel Needed IE defined in 3 GPP TS 44.018
* ( packet - gsm_a_bssmap . c )
2010-12-26 21:06:08 +00:00
*/
/*
2012-11-28 22:41:07 +00:00
* 9.4 .24 eMLPP priority
2010-12-27 15:15:55 +00:00
* See subclause 18.4 .4 in 3 GPP TS 29.018 [ 16 ] .
* The rest of the information element is coded as the value part of
* the eMLPP - Priority IE defined in 3 GPP TS 48.008 ( not including
* 3 GPP TS 48.008 IEI and 3 GPP TS 48.008 length indicator ) .
* ( packet - gsm_a_bssmap . c )
2010-12-26 21:06:08 +00:00
*/
2014-10-17 14:48:48 +00:00
/*
*
*/
static guint16
de_sgsap_add_paging_ind ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len _U_ , gchar * add_string _U_ , int string_len _U_ )
{
/* Octet 3 0 0 0 0 0 0 0 CSRI */
proto_tree_add_item ( tree , hf_sgsap_csri , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
return ( len ) ;
}
2013-03-18 22:21:53 +00:00
static const value_string sgsap_elem_strings [ ] = {
2013-03-18 20:26:47 +00:00
{ DE_SGSAP_IMSI , " IMSI " } , /* 9.4.6 */
{ DE_SGSAP_VLR_NAME , " VLR name " } , /* 9.4.22 */
{ DE_SGSAP_TMSI , " TMSI " } , /* 9.4.20 */
{ DE_SGSAP_LOC_AREA_ID , " Location area identifier " } , /* 9.4.11 */
{ DE_SGSAP_CH_NEEDED , " Channel Needed " } , /* 9.4.23 */
{ DE_SGSAP_EMLPP_PRIO , " eMLPP Priority " } , /* 9.4.24 */
{ DE_SGSAP_TMSI_STATUS , " TMSI status " } , /* 9.4.21 */
{ DE_SGSAP_SGS_CAUSE , " SGs cause " } , /* 9.4.18 */
{ DE_SGSAP_MME_NAME , " MME name " } , /* 9.4.13 */
{ DE_SGSAP_EPS_LOC_UPD_TYPE , " EPS location update type " } , /* 9.4.2 */
{ DE_SGSAP_GLOBAL_CN_ID , " Global CN-Id " } , /* 9.4.4 */
{ DE_SGSAP_UDEF_11 , " Undefined " } , /* */
{ DE_SGSAP_UDEF_12 , " Undefined " } , /* */
{ DE_SGSAP_MID , " Mobile identity " } , /* 9.4.14 */
{ DE_SGSAP_REJ_CAUSE , " Reject cause " } , /* 9.4.16 */
{ DE_SGSAP_IMSI_DET_EPS , " IMSI detach from EPS service type " } , /* 9.4.7 */
{ DE_SGSAP_IMSI_DET_NON_EPS , " IMSI detach from non-EPS service type " } , /* 9.4.8 */
{ DE_SGSAP_IMEISV , " IMEISV " } , /* 9.4.5 */
{ DE_SGSAP_NAS_MSG_CONTAINER , " NAS message container " } , /* 9.4.15 */
{ DE_SGSAP_MM_INFO , " MM information " } , /* 9.4.12 */
{ DE_SGSAP_UDEF_20 , " Undefined " } , /* */
{ DE_SGSAP_UDEF_21 , " Undefined " } , /* */
{ DE_SGSAP_UDEF_22 , " Undefined " } , /* */
{ DE_SGSAP_ERR_MSG , " Erroneous message " } , /* 9.4.3 */
{ DE_SGSAP_CLI , " CLI " } , /* 9.4.1 */
{ DE_SGSAP_LCS_CLIENT_ID , " LCS client identity " } , /* 9.4.9 */
{ DE_SGSAP_LCS_INDIC , " LCS indicator " } , /* 9.4.10 */
{ DE_SGSAP_SS_CODE , " SS code " } , /* 9.4.19 */
{ DE_SGSAP_SERV_INDIC , " Service indicator " } , /* 9.4.17 */
{ DE_SGSAP_UE_TZ , " UE Time Zone " } , /* 9.4.21b */
{ DE_SGSAP_MSC_2 , " Mobile Station Classmark 2 " } , /* 9.4.14a */
{ DE_SGSAP_TAID , " Tracking Area Identity " } , /* 9.4.21a */
{ DE_SGSAP_ECGI , " E-UTRAN Cell Global Identity " } , /* 9.4.3a */
{ DE_SGSAP_UE_EMM_MODE , " UE EMM mode " } , /* 9.4.21c */
2014-10-17 14:48:48 +00:00
{ DE_SGSAP_ADD_PAGING_IND , " Additional paging indicators " } , /* 9.4.25 */
{ DE_SGSAP_TMSI_BASED_NRI_CONT , " TMSI based NRI container " } , /* 9.4.26 */
2012-11-28 22:41:07 +00:00
{ 0 , NULL }
2010-12-26 21:06:08 +00:00
} ;
2013-03-18 22:21:53 +00:00
value_string_ext sgsap_elem_strings_ext = VALUE_STRING_EXT_INIT ( sgsap_elem_strings ) ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
# define NUM_SGSAP_ELEM (sizeof(sgsap_elem_strings) / sizeof(value_string))
2010-12-26 21:06:08 +00:00
gint ett_sgsap_elem [ NUM_SGSAP_ELEM ] ;
2011-01-21 09:26:29 +00:00
#if 0
This enum has been moved to packet - gsm_a_common to
make it possible to use element dissecton from this dissector
in other dissectors .
It is left here as a comment for easier reference .
Note this enum must be of the same size as the element decoding list
2010-12-26 21:06:08 +00:00
typedef enum
{
2012-11-28 22:41:07 +00:00
DE_SGSAP_IMSI , / . 9.4 .6 IMSI . /
DE_SGSAP_VLR_NAME , / . 9.4 .22 VLR name . /
DE_SGSAP_TMSI , / . 9.4 .20 TMSI . /
DE_SGSAP_LOC_AREA_ID , / . 9.4 .11 Location area identifier . /
DE_SGSAP_CH_NEEDED , / . 9.4 .23 Channel Needed . /
DE_SGSAP_EMLPP_PRIO , / . 9.4 .24 eMLPP Priority . /
DE_SGSAP_TMSI_STATUS , / . 9.4 .21 TMSI status . /
DE_SGSAP_SGS_CAUSE , / . 9.4 .18 SGs cause . /
DE_SGSAP_MME_NAME , / . 9.4 .13 MME name . /
DE_SGSAP_EPS_LOC_UPD_TYPE , / . 9.4 .2 EPS location update type . /
DE_SGSAP_GLOBAL_CN_ID , / . 9.4 .4 Global CN - Id . /
2013-01-22 23:25:44 +00:00
DE_SGSAP_UDEF_11 , / . Undefined . /
2012-11-28 22:41:07 +00:00
DE_SGSAP_UDEF_12 , / . Undefined . /
DE_SGSAP_MID , / . 9.4 .14 Mobile identity . /
DE_SGSAP_REJ_CAUSE , / . 9.4 .16 Reject cause . /
DE_SGSAP_IMSI_DET_EPS , / . 9.4 .7 IMSI detach from EPS service type . /
DE_SGSAP_IMSI_DET_NON_EPS , / . 9.4 .8 IMSI detach from non - EPS service type . /
DE_SGSAP_IMEISV , / . 9.4 .5 IMEISV . /
DE_SGSAP_NAS_MSG_CONTAINER , / . 9.4 .15 NAS message container . /
DE_SGSAP_MM_INFO , / . 9.4 .12 MM information . /
2013-01-22 23:25:44 +00:00
DE_SGSAP_UDEF_20 , / . Undefined . /
DE_SGSAP_UDEF_21 , / . Undefined . /
DE_SGSAP_UDEF_22 , / . Undefined . /
2012-11-28 22:41:07 +00:00
DE_SGSAP_ERR_MSG , / . 9.4 .3 Erroneous message . /
DE_SGSAP_CLI , / . 9.4 .1 CLI . /
DE_SGSAP_LCS_CLIENT_ID , / . 9.4 .9 LCS client identity . /
DE_SGSAP_LCS_INDIC , / . 9.4 .10 LCS indicator . /
DE_SGSAP_SS_CODE , / . 9.4 .19 SS code . /
DE_SGSAP_SERV_INDIC , / . 9.4 .17 Service indicator . /
DE_SGSAP_UE_TZ , / . 9.4 .21 b UE Time Zone . /
DE_SGSAP_MSC_2 , / . 9.4 .14 a Mobile Station Classmark 2 . /
DE_SGSAP_TAID , / . 9.4 .21 a Tracking Area Identity . /
DE_SGSAP_ECGI , / . 9.4 .3 a E - UTRAN Cell Global Identity . /
DE_SGSAP_UE_EMM_MODE , / . 9.4 .21 c UE EMM mode . /
2014-10-17 14:48:48 +00:00
DE_SGSAP_ADD_PAGING_IND , / . 9.4 .25 Additional paging indicators . /
DE_SGSAP_TMSI_BASED_NRI_CONT , / . 9.4 .26 TMSI based NRI container . /
2012-11-28 22:41:07 +00:00
DE_SGAP_NONE / . NONE . /
2010-12-26 21:06:08 +00:00
}
sgsap_elem_idx_t ;
2011-01-21 09:26:29 +00:00
# endif /* 0 */
2010-12-26 21:06:08 +00:00
2011-04-04 14:37:25 +00:00
guint16 ( * sgsap_elem_fcn [ ] ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len , gchar * add_string , int string_len ) = {
2012-11-28 22:41:07 +00:00
NULL /*DE_SGSAP_IMSI*/ , /* 9.4.6 IMSI*/
de_sgsap_vlr_name , /* 9.4.22 VLR name*/
NULL /*DE_SGSAP_TMSI*/ , /* 9.4.20 TMSI */
NULL /*DE_SGSAP_LOC_AREA_ID*/ , /* 9.4.11 Location area identifier */
NULL /*DE_SGSAP_CH_NEEDED*/ , /* 9.4.23 Channel Needed */
NULL /*DE_SGSAP_EMLPP_PRIO*/ , /* 9.4.24 eMLPP Priority*/
NULL /*DE_SGSAP_TMSI_STATUS*/ , /* 9.4.21 TMSI status */
de_sgsap_sgs_cause , /* 9.4.18 SGs cause*/
de_sgsap_mme_name , /* 9.4.13 MME name*/
de_sgsap_eps_loc_upd_type , /* 9.4.2 EPS location update type*/
de_sgsap_g_cn_id , /* 9.4.4 Global CN-Id*/
2013-01-22 23:25:44 +00:00
NULL /*DE_SGSAP_UDEF_11*/ , /* Undefined */
2012-11-28 22:41:07 +00:00
NULL /*DE_SGSAP_UDEF_12*/ , /* Undefined */
NULL /*DE_SGSAP_MID*/ , /* 9.4.14 Mobile identity*/
NULL /*DE_SGSAP_REJ_CAUSE*/ , /* 9.4.16 Reject cause */
de_sgsap_imsi_det_eps , /* 9.4.7 IMSI detach from EPS service type */
de_sgsap_imsi_det_non_eps , /* 9.4.8 IMSI detach from non-EPS service type */
de_sgsap_imeisv , /* 9.4.5 IMEISV */
de_sgsap_nas_msg_container , /* 9.4.15 NAS message container*/
de_sgsap_mm_info , /* 9.4.12 MM information*/
2013-01-22 23:25:44 +00:00
NULL /*DE_SGSAP_UDEF_20*/ , /* Undefined */
NULL /*DE_SGSAP_UDEF_21*/ , /* Undefined */
NULL /*DE_SGSAP_UDEF_22*/ , /* Undefined */
2012-11-28 22:41:07 +00:00
de_sgsap_err_msg , /* 9.4.3 Erroneous message*/
NULL /*DE_SGSAP_CLI*/ , /* 9.4.1 CLI */
NULL /*DE_SGSAP_LCS_CLIENT_ID*/ , /* 9.4.9 LCS client identity */
de_sgsap_lcs_indic , /* 9.4.10 LCS indicator */
NULL /*DE_SGSAP_SS_CODE*/ , /* 9.4.19 SS code */
de_sgsap_serv_indic , /* 9.4.17 Service indicator */
NULL /*DE_SGSAP_UE_TZ*/ , /* 9.4.21b UE Time Zone */
NULL /*DE_SGSAP_MSC_2*/ , /* 9.4.14a Mobile Station Classmark 2 */
NULL /*DE_SGSAP_TAID*/ , /* 9.4.21a Tracking Area Identity */
de_sgsap_ecgi , /* 9.4.3a E-UTRAN Cell Global Identity */
2014-10-17 14:48:48 +00:00
de_sgsap_ue_emm_mode , /* 9.4.21c UE EMM mode*/
de_sgsap_add_paging_ind , /* 9.4.25 Additional paging indicators */
NULL /*DE_SGSAP_TMSI_BASED_NRI_CONT*/ , /* 9.4.26 TMSI based NRI container */
2012-11-28 22:41:07 +00:00
NULL , /* NONE */
2010-12-26 21:06:08 +00:00
} ;
/* MESSAGE FUNCTIONS */
/*
2012-11-28 22:41:07 +00:00
* 8.1 SGsAP - ALERT - ACK message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_alert_ack ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.2 SGsAP - ALERT - REJECT message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_alert_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* SGs Cause SGs cause 9.4.18 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x08 , SGSAP_PDU_TYPE , DE_SGSAP_SGS_CAUSE , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.3 SGsAP - ALERT - REQUEST message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_alert_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.4 SGsAP - DOWNLINK - UNITDATA message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_dl_unitdata ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* NAS message container NAS message container 9.4.15 M TLV 4-253 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x16 , SGSAP_PDU_TYPE , DE_SGSAP_NAS_MSG_CONTAINER , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.5 SGsAP - EPS - DETACH - ACK message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_eps_det_ack ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.6 SGsAP - EPS - DETACH - INDICATION message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_eps_det_ind ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* MME name MME name 9.4.13 M TLV 57 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x09 , SGSAP_PDU_TYPE , DE_SGSAP_MME_NAME , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* IMSI detach from EPS service type IMSI detach from EPS service type 9.4.7 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x10 , SGSAP_PDU_TYPE , DE_SGSAP_IMSI_DET_EPS , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.7 SGsAP - IMSI - DETACH - ACK message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_imsi_det_ack ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.8 SGsAP - IMSI - DETACH - INDICATION message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_imsi_det_ind ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* MME name MME name 9.4.13 M TLV 57 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x09 , SGSAP_PDU_TYPE , DE_SGSAP_MME_NAME , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* IMSI Detach from non-EPS service type IMSI detach from non-EPS service type 9.4.8 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x11 , SGSAP_PDU_TYPE , DE_SGSAP_IMSI_DET_NON_EPS , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.9 SGsAP - LOCATION - UPDATE - ACCEPT message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_imsi_loc_update_acc ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* Location area identifier Location area identifier 9.4.11 M TLV 7 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x04 , GSM_A_PDU_TYPE_COMMON , DE_LAI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* New TMSI, or IMSI Mobile identity 9.4.14 O TLV 6-10 */
ELEM_OPT_TLV ( 0x0e , GSM_A_PDU_TYPE_COMMON , DE_MID , " - New TMSI, or IMSI " ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.10 SGsAP - LOCATION - UPDATE - REJECT message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_imsi_loc_update_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* Reject cause Reject cause 9.4.16 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x0f , GSM_A_PDU_TYPE_DTAP , DE_REJ_CAUSE , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* Location area identifier Location area identifier 9.4.11 O TLV 7 */
ELEM_OPT_TLV ( 0x04 , GSM_A_PDU_TYPE_COMMON , DE_LAI , NULL ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.11 SGsAP - LOCATION - UPDATE - REQUEST message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_imsi_loc_update_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
curr_len = len ;
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* MME name MME name 9.4.13 M TLV 57 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x09 , SGSAP_PDU_TYPE , DE_SGSAP_MME_NAME , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* EPS location update type EPS location update type 9.4.2 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x0a , SGSAP_PDU_TYPE , DE_SGSAP_EPS_LOC_UPD_TYPE , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* New location area identifier Location area identifier 9.4.11 M TLV 7 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x04 , GSM_A_PDU_TYPE_COMMON , DE_LAI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* Old location area identifier Location area identifier 9.4.11 O TLV 7 */
ELEM_OPT_TLV ( 0x04 , GSM_A_PDU_TYPE_COMMON , DE_LAI , " - Old location area identifier " ) ;
/* TMSI status TMSI status 9.4.21 O TLV 3 */
ELEM_OPT_TLV ( 0x07 , GSM_A_PDU_TYPE_GM , DE_TMSI_STAT , NULL ) ;
/* IMEISV IMEISV 9.4.5 O TLV 10 */
ELEM_OPT_TLV ( 0x15 , SGSAP_PDU_TYPE , DE_SGSAP_IMEISV , NULL ) ;
2014-10-17 14:48:48 +00:00
/* TAI Tracking Area Identity 9.4.21a O TLV 7 */
ELEM_OPT_TLV ( 0x23 , NAS_PDU_TYPE_EMM , DE_EMM_TRAC_AREA_ID , NULL ) ;
/* E-CGI E-UTRAN Cell Global Identity 9.4.3a O TLV 9 */
ELEM_OPT_TLV ( 0x24 , SGSAP_PDU_TYPE , DE_SGSAP_ECGI , NULL ) ;
/* TMSI based NRI container TMSI based NRI container 9.4.26 O TLV 4 */
/* Selected CS domain operator Selected CS domain operator 9.4.27 O TLV 5 */
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.12 SGsAP - MM - INFORMATION - REQUEST
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_mm_info_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* MM information MM information 9.4.12 M TLV 3-n */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x17 , SGSAP_PDU_TYPE , DE_SGSAP_MM_INFO , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.13 SGsAP - PAGING - REJECT message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_paging_rej ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* SGs Cause SGs Cause 9.4.18 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x08 , SGSAP_PDU_TYPE , DE_SGSAP_SGS_CAUSE , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.14 SGsAP - PAGING - REQUEST message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_paging_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
curr_len = len ;
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* VLR name VLR name 9.4.22 M TLV 3-n */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x02 , SGSAP_PDU_TYPE , DE_SGSAP_VLR_NAME , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* Service indicator Service indicator 9.4.17 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x20 , SGSAP_PDU_TYPE , DE_SGSAP_SERV_INDIC , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* TMSI TMSI 9.4.20 O TLV 6 */
ELEM_OPT_TLV ( 0x03 , GSM_A_PDU_TYPE_BSSMAP , BE_TMSI , NULL ) ;
/* CLI CLI 9.4.1 O TLV 3-14 */
ELEM_OPT_TLV ( 0x1c , GSM_A_PDU_TYPE_DTAP , DE_CLG_PARTY_BCD_NUM , " - CLI " ) ;
/* Location area identifier Location area identifier 9.4.11 O TLV 7 */
ELEM_OPT_TLV ( 0x04 , GSM_A_PDU_TYPE_COMMON , DE_LAI , NULL ) ;
/* Global CN-Id Global CN-Id 9.4.4 O TLV 7 */
ELEM_OPT_TLV ( 0x0b , SGSAP_PDU_TYPE , DE_SGSAP_GLOBAL_CN_ID , NULL ) ;
/* SS code SS code 9.4.19 O TLV 3 */
ELEM_OPT_TLV ( 0x1f , NAS_PDU_TYPE_EMM , DE_EMM_SS_CODE , NULL ) ;
/* LCS indicator LCS indicator 9.4.10 O TLV 3 */
ELEM_OPT_TLV ( 0x1e , SGSAP_PDU_TYPE , DE_SGSAP_LCS_INDIC , NULL ) ;
/* LCS client identity LCS client identity 9.4.9 O TLV 3-n */
ELEM_OPT_TLV ( 0x1d , NAS_PDU_TYPE_EMM , DE_EMM_LCS_CLIENT_ID , NULL ) ;
/* Channel needed Channel needed 9.4.23 O TLV 3 */
ELEM_OPT_TLV ( 0x05 , GSM_A_PDU_TYPE_BSSMAP , BE_CHAN_NEEDED , NULL ) ;
/* eMLPP Priority eMLPP Priority 9.4.24 O TLV 3 */
ELEM_OPT_TLV ( 0x06 , GSM_A_PDU_TYPE_BSSMAP , BE_EMLPP_PRIO , NULL ) ;
2014-10-17 14:48:48 +00:00
/* Additional paging indicators Additional paging indicators 9.4.25 O TLV 3 */
ELEM_OPT_TLV ( 0x26 , SGSAP_PDU_TYPE , DE_SGSAP_ADD_PAGING_IND , NULL ) ;
2012-11-28 22:41:07 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.15 SGsAP - RESET - ACK message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_reset_ack ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* MME name MME name 9.4.13 C TLV 57 */
ELEM_OPT_TLV ( 0x09 , SGSAP_PDU_TYPE , DE_SGSAP_MME_NAME , NULL ) ;
/* VLR name VLR name 9.4.22 C TLV 3-n */
ELEM_OPT_TLV ( 0x02 , SGSAP_PDU_TYPE , DE_SGSAP_VLR_NAME , NULL ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.16 SGsAP - RESET - INDICATION message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_reset_ind ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* MME name MME name 9.4.13 C TLV 57 */
ELEM_OPT_TLV ( 0x09 , SGSAP_PDU_TYPE , DE_SGSAP_MME_NAME , NULL ) ;
/* VLR name VLR name 9.4.22 C TLV 3-n */
ELEM_OPT_TLV ( 0x02 , SGSAP_PDU_TYPE , DE_SGSAP_VLR_NAME , NULL ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.17 SGsAP - SERVICE - REQUEST message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_service_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
curr_len = len ;
/*IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* Service indicator Service indicator 9.4.17 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x20 , SGSAP_PDU_TYPE , DE_SGSAP_SERV_INDIC , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* IMEISV IMEISV 9.4.5 O TLV 10 */
ELEM_OPT_TLV ( 0x15 , SGSAP_PDU_TYPE , DE_SGSAP_IMEISV , NULL ) ;
/* UE Time Zone UE Time Zone 9.4.21b O TLV 3 */
ELEM_OPT_TLV ( 0x21 , GSM_A_PDU_TYPE_DTAP , DE_TIME_ZONE , " - UE Time Zone " ) ;
/* Mobile Station Classmark 2 Mobile Station Classmark 2 9.4.14a O TLV 5 */
ELEM_OPT_TLV ( 0x22 , GSM_A_PDU_TYPE_COMMON , DE_MS_CM_2 , NULL ) ;
/* TAI Tracking Area Identity 9.4.21a O TLV 7 */
ELEM_OPT_TLV ( 0x23 , NAS_PDU_TYPE_EMM , DE_EMM_TRAC_AREA_ID , NULL ) ;
/* E-CGI E-UTRAN Cell Global Identity 9.4.3a O TLV 9 */
ELEM_OPT_TLV ( 0x24 , SGSAP_PDU_TYPE , DE_SGSAP_ECGI , NULL ) ;
/* UE EMM Mode UE EMM mode 9.4.21c O TLV 3 */
ELEM_OPT_TLV ( 0x25 , SGSAP_PDU_TYPE , DE_SGSAP_UE_EMM_MODE , NULL ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.18 SGsAP - STATUS message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_status ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2014-09-30 20:59:17 +00:00
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 O TLV 6-10 */
ELEM_OPT_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL ) ;
/* SGs cause SGs cause 9.4.18 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x08 , SGSAP_PDU_TYPE , DE_SGSAP_SGS_CAUSE , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* Erroneous message Erroneous message 9.4.3 M TLV 3-n */
ELEM_OPT_TLV ( 0x1e , SGSAP_PDU_TYPE , DE_SGSAP_ERR_MSG , NULL ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.19 SGsAP - TMSI - REALLOCATION - COMPLETE message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_tmsi_realloc_comp ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
curr_len = len ;
2011-09-21 23:42:55 +00:00
2012-11-28 22:41:07 +00:00
/*IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.20 SGsAP - UE - ACTIVITY - INDICATION message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_ue_act_ind ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2014-09-30 20:59:17 +00:00
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.21 SGsAP - UE - UNREACHABLE message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_ue_unreachable ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2014-09-30 20:59:17 +00:00
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* SGs cause SGs cause 9.4.18 M TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x08 , SGSAP_PDU_TYPE , DE_SGSAP_SGS_CAUSE , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.22 SGsAP - UPLINK - UNITDATA message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_ue_ul_unitdata ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
2014-09-30 20:59:17 +00:00
curr_len = len ;
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* NAS message container NAS message container 9.4.15 M TLV 4-253 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x16 , SGSAP_PDU_TYPE , DE_SGSAP_NAS_MSG_CONTAINER , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* IMEISV IMEISV 9.4.5 O TLV 10 */
ELEM_OPT_TLV ( 0x15 , SGSAP_PDU_TYPE , DE_SGSAP_IMEISV , NULL ) ;
/* UE Time Zone UE Time Zone 9.4.21b O TLV 3 */
ELEM_OPT_TLV ( 0x21 , GSM_A_PDU_TYPE_DTAP , DE_TIME_ZONE , " - UE Time Zone " ) ;
/* Mobile Station Classmark 2 Mobile Station Classmark 2 9.4.14a O TLV 5 */
ELEM_OPT_TLV ( 0x22 , GSM_A_PDU_TYPE_COMMON , DE_MS_CM_2 , NULL ) ;
/* TAI Tracking Area Identity 9.4.21a O TLV 7 */
ELEM_OPT_TLV ( 0x23 , NAS_PDU_TYPE_EMM , DE_EMM_TRAC_AREA_ID , NULL ) ;
/* E-CGI E-UTRAN Cell Global Identity 9.4.3a O TLV 9 */
ELEM_OPT_TLV ( 0x24 , SGSAP_PDU_TYPE , DE_SGSAP_ECGI , NULL ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.23 SGsAP - RELEASE - REQUEST message
2010-12-26 21:06:08 +00:00
*/
static void
2011-04-04 07:45:34 +00:00
sgsap_release_req ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
curr_offset = offset ;
2014-09-30 20:59:17 +00:00
curr_len = len ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
/* IMSI IMSI 9.4.6 M TLV 6-10 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x01 , GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL , ei_sgsap_missing_mandatory_element ) ;
2012-11-28 22:41:07 +00:00
/* SGs cause SGs cause 9.4.18 O TLV 3 */
2015-01-02 17:19:10 +00:00
ELEM_MAND_TLV ( 0x08 , SGSAP_PDU_TYPE , DE_SGSAP_SGS_CAUSE , NULL , ei_sgsap_missing_mandatory_element ) ;
2010-12-26 21:06:08 +00:00
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2010-12-26 21:06:08 +00:00
}
/*
2012-11-28 22:41:07 +00:00
* 8.24 SGsAP - SERVICE - ABORT - REQUEST message
2010-12-26 21:06:08 +00:00
*/
/* No IE's */
2014-10-17 14:48:48 +00:00
/*
* 8.25 SGsAP - MO - CSFB - INDICATION message
*/
static void
sgsap_mo_csfb_ind ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len )
{
guint32 curr_offset ;
guint32 consumed ;
guint curr_len ;
curr_offset = offset ;
curr_len = len ;
/* IMSI IMSI 9.4.6 M LV 6-10 */
ELEM_MAND_LV ( GSM_A_PDU_TYPE_BSSMAP , BE_IMSI , NULL ) ;
/* TAI Tracking Area Identity 9.4.21a O TLV 7 */
ELEM_OPT_TLV ( 0x23 , NAS_PDU_TYPE_EMM , DE_EMM_TRAC_AREA_ID , NULL ) ;
/* E-CGI E-UTRAN Cell Global Identity 9.4.3a O TLV 9 */
ELEM_OPT_TLV ( 0x24 , SGSAP_PDU_TYPE , DE_SGSAP_ECGI , NULL ) ;
2015-01-02 17:19:10 +00:00
EXTRANEOUS_DATA_CHECK ( curr_len , 0 , pinfo , & ei_sgsap_extraneous_data ) ;
2014-10-17 14:48:48 +00:00
}
2011-09-21 23:42:55 +00:00
/*
2012-11-28 22:41:07 +00:00
* 9.2 Message type
2010-12-26 21:06:08 +00:00
*/
static const value_string sgsap_msg_strings [ ] = {
2012-11-28 22:41:07 +00:00
{ 0x01 , " SGsAP-PAGING-REQUEST " } , /* 8.14 */
{ 0x02 , " SGsAP-PAGING-REJECT " } , /* 8.13 */
2010-12-26 21:06:08 +00:00
/*
* 0 0 0 0 0 0 1 1
* to
2011-09-21 23:42:55 +00:00
* 0 0 0 0 0 1 0 1
2010-12-26 21:06:08 +00:00
* Unassigned : treated as an unknown Message type
*/
2012-11-28 22:41:07 +00:00
{ 0x03 , " Unassigned " } , /* 7 */
{ 0x04 , " Unassigned " } , /* 7 */
{ 0x05 , " Unassigned " } , /* 7 */
{ 0x06 , " SGsAP-SERVICE-REQUEST " } , /* 8.17 */
{ 0x07 , " SGsAP-DOWNLINK-UNITDATA " } , /* 8.4 */
{ 0x08 , " SGsAP-UPLINK-UNITDATA " } , /* 8.22 */
{ 0x09 , " SGsAP-LOCATION-UPDATE-REQUEST " } , /* 8.11 */
{ 0x0a , " SGsAP-LOCATION-UPDATE-ACCEPT " } , /* 8.9 */
{ 0x0b , " SGsAP-LOCATION-UPDATE-REJECT " } , /* 8.10 */
{ 0x0c , " SGsAP-TMSI-REALLOCATION-COMPLETE " } , /* 8.19 */
{ 0x0d , " SGsAP-ALERT-REQUEST " } , /* 8.3 */
{ 0x0e , " SGsAP-ALERT-ACK " } , /* 8.1 */
{ 0x0f , " SGsAP-ALERT-REJECT " } , /* 8.2 */
{ 0x10 , " SGsAP-UE-ACTIVITY-INDICATION " } , /* 8.20 */
{ 0x11 , " SGsAP-EPS-DETACH-INDICATION " } , /* 8.6 */
{ 0x12 , " SGsAP-EPS-DETACH-ACK " } , /* 8.5 */
{ 0x13 , " SGsAP-IMSI-DETACH-INDICATION " } , /* 8.8 */
{ 0x14 , " SGsAP-IMSI-DETACH-ACK " } , /* 8.7 */
{ 0x15 , " SGsAP-RESET-INDICATION " } , /* 8.16 */
{ 0x16 , " SGsAP-RESET-ACK " } , /* 8.15 */
{ 0x17 , " SGsAP-SERVICE-ABORT-REQUEST " } , /* 8.24 */
2014-10-17 14:48:48 +00:00
{ 0x18 , " SGsAP-MO-CSFB-INDICATION " } , /* 8.25 */
2010-12-26 21:06:08 +00:00
/*
2011-09-21 23:42:55 +00:00
* 0 0 0 1 1 0 0 0
2010-12-26 21:06:08 +00:00
* to
2011-09-21 23:42:55 +00:00
* 0 0 0 1 1 0 0 1
2010-12-26 21:06:08 +00:00
* Unassigned : treated as an unknown Message type
*/
2012-11-28 22:41:07 +00:00
{ 0x19 , " Unassigned " } ,
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
{ 0x1a , " SGsAP-MM-INFORMATION-REQUEST " } , /* 8.12 */
{ 0x1b , " SGsAP-RELEASE-REQUEST " } , /* 8.23 */
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 0 0 0 1 1 1 0 0 Unassigned : treated as an unknown Message type 7
2010-12-26 21:06:08 +00:00
*/
2012-11-28 22:41:07 +00:00
{ 0x1c , " Unassigned " } , /* 8.12 */
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
{ 0x1d , " SGsAP-STATUS " } , /* 8.18 */
{ 0x1e , " Unassigned " } ,
{ 0x1f , " SGsAP-UE-UNREACHABLE " } , /* 8.21 */
{ 0 , NULL }
2010-12-26 21:06:08 +00:00
} ;
2010-12-27 15:15:55 +00:00
static value_string_ext sgsap_msg_strings_ext = VALUE_STRING_EXT_INIT ( sgsap_msg_strings ) ;
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
# define NUM_SGSAP_MSG (sizeof(sgsap_msg_strings) / sizeof(value_string))
2010-12-26 21:06:08 +00:00
static gint ett_sgsap_msg [ NUM_SGSAP_MSG ] ;
2011-04-04 07:45:34 +00:00
static void ( * sgsap_msg_fcn [ ] ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo _U_ , guint32 offset , guint len ) = {
2012-11-28 22:41:07 +00:00
sgsap_paging_req , /* 0x01, "SGsAP-PAGING-REQUEST" 8.14 */
sgsap_paging_rej , /* 0x02, "SGsAP-PAGING-REJECT" 8.13 */
2010-12-26 21:06:08 +00:00
/*
* 0 0 0 0 0 0 1 1
* to
2011-09-21 23:42:55 +00:00
* 0 0 0 0 0 1 0 1
2010-12-26 21:06:08 +00:00
* Unassigned : treated as an unknown Message type
*/
2012-11-28 22:41:07 +00:00
NULL , /* 0x03, "Unassigned" 7 */
NULL , /* 0x04, "Unassigned" 7 */
NULL , /* 0x05, "Unassigned" 7 */
sgsap_service_req , /* 0x06, "SGsAP-SERVICE-REQUEST" 8.17 */
sgsap_dl_unitdata , /* 0x07, "SGsAP-DOWNLINK-UNITDATA" 8.4 */
sgsap_ue_ul_unitdata , /* 0x08, "SGsAP-UPLINK-UNITDATA" 8.22 */
sgsap_imsi_loc_update_req , /* 0x09, "SGsAP-LOCATION-UPDATE-REQUEST" 8.11 */
sgsap_imsi_loc_update_acc , /* 0x0a, "SGsAP-LOCATION-UPDATE-ACCEPT" 8.9 */
sgsap_imsi_loc_update_rej , /* 0x0b, "SGsAP-LOCATION-UPDATE-REJECT" 8.10 */
sgsap_tmsi_realloc_comp , /* 0x0c, "SGsAP-TMSI-REALLOCATION-COMPLETE" 8.19 */
sgsap_alert_req , /* 0x0d, "SGsAP-ALERT-REQUEST" 8.3 */
sgsap_alert_ack , /* 0x0e, "SGsAP-ALERT-ACK" 8.1 */
sgsap_alert_rej , /* 0x0f, "SGsAP-ALERT-REJECT" 8.2 */
sgsap_ue_act_ind , /* 0x10, "SGsAP-UE-ACTIVITY-INDICATION" 8.20 */
sgsap_eps_det_ind , /* 0x11, "SGsAP-EPS-DETACH-INDICATION" 8.6 */
sgsap_eps_det_ack , /* 0x12, "SGsAP-EPS-DETACH-ACK" 8.5 */
sgsap_imsi_det_ind , /* 0x13, "SGsAP-IMSI-DETACH-INDICATION" 8.8 */
sgsap_imsi_det_ack , /* 0x14, "SGsAP-IMSI-DETACH-ACK" 8.7 */
sgsap_reset_ind , /* 0x15, "SGsAP-RESET-INDICATION" 8.16 */
sgsap_reset_ack , /* 0x16, "SGsAP-RESET-ACK" 8.15 */
NULL , /* No IE's */ /* 0x17, "SGsAP-SERVICE-ABORT-REQUEST" 8.24 */
2014-10-17 14:48:48 +00:00
sgsap_mo_csfb_ind , /* 0x18, "SGsAP-MO-CSFB-INDICATION" 8.25 */
2010-12-26 21:06:08 +00:00
/*
2014-10-17 14:48:48 +00:00
* 0 0 0 1 1 0 0 1
2010-12-26 21:06:08 +00:00
* to
2011-09-21 23:42:55 +00:00
* 0 0 0 1 1 0 0 1
2010-12-26 21:06:08 +00:00
* Unassigned : treated as an unknown Message type
*/
2012-11-28 22:41:07 +00:00
NULL , /* 0x19, "Unassigned" */
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
sgsap_mm_info_req , /* 0x1a, "SGsAP-MM-INFORMATION-REQUEST" 8.12 */
sgsap_release_req , /* 0x1b, "SGsAP-RELEASE-REQUEST" 8.23 */
2010-12-26 21:06:08 +00:00
/*
2012-11-28 22:41:07 +00:00
* 0 0 0 1 1 1 0 0 Unassigned : treated as an unknown Message type 7
2010-12-26 21:06:08 +00:00
*/
2012-11-28 22:41:07 +00:00
NULL , /* 0x1c, "Unassigned" */
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
sgsap_status , /* 0x1d, "SGsAP-STATUS" 8.18 */
NULL , /* 0x1e, "Unassigned" */
sgsap_ue_unreachable , /* 0x1f, "SGsAP-UE-UNREACHABLE" 8.21 */
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
NULL , /* NONE */
2010-12-26 21:06:08 +00:00
} ;
2012-11-28 22:41:07 +00:00
static void get_sgsap_msg_params ( guint8 oct , const gchar * * msg_str , int * ett_tree , int * hf_idx , msg_fcn * msg_fcn_p )
2010-12-26 21:06:08 +00:00
{
2012-11-28 22:41:07 +00:00
gint idx ;
2010-12-26 21:06:08 +00:00
2013-03-29 00:26:23 +00:00
* msg_str = try_val_to_str_idx_ext ( ( guint32 ) ( oct & 0xff ) , & sgsap_msg_strings_ext , & idx ) ;
2012-11-28 22:41:07 +00:00
* hf_idx = hf_sgsap_msg_type ;
2013-03-24 21:52:19 +00:00
if ( * msg_str ! = NULL ) {
* ett_tree = ett_sgsap_msg [ idx ] ;
* msg_fcn_p = sgsap_msg_fcn [ idx ] ;
}
2010-12-26 21:06:08 +00:00
2012-11-28 22:41:07 +00:00
return ;
2010-12-26 21:06:08 +00:00
}
static void
dissect_sgsap ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree )
{
2012-11-28 22:41:07 +00:00
proto_item * item ;
proto_tree * sgsap_tree ;
int offset = 0 ;
guint32 len ;
const gchar * msg_str ;
gint ett_tree ;
int hf_idx ;
void ( * msg_fcn_p ) ( tvbuff_t * tvb , proto_tree * tree , packet_info * pinfo , guint32 offset , guint len ) ;
guint8 oct ;
2014-10-17 14:48:48 +00:00
len = tvb_reported_length ( tvb ) ;
2012-11-28 22:41:07 +00:00
/* Make entry in the Protocol column on summary display */
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , PSNAME ) ;
item = proto_tree_add_item ( tree , proto_sgsap , tvb , 0 , - 1 , ENC_NA ) ;
sgsap_tree = proto_item_add_subtree ( item , ett_sgsap ) ;
/* Messge type IE*/
oct = tvb_get_guint8 ( tvb , offset ) ;
msg_fcn_p = NULL ;
ett_tree = - 1 ;
hf_idx = - 1 ;
msg_str = NULL ;
get_sgsap_msg_params ( oct , & msg_str , & ett_tree , & hf_idx , & msg_fcn_p ) ;
if ( msg_str ) {
col_add_fstr ( pinfo - > cinfo , COL_INFO , " %s " , msg_str ) ;
} else {
2014-12-13 17:52:20 +00:00
proto_tree_add_item ( tree , hf_sgsap_unknown_msg , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-11-28 22:41:07 +00:00
return ;
}
/*
* Add SGSAP message name
*/
proto_tree_add_item ( sgsap_tree , hf_idx , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/*
* decode elements
*/
if ( msg_fcn_p = = NULL )
{
2014-09-06 12:44:23 +00:00
proto_tree_add_item ( sgsap_tree , hf_sgsap_message_elements , tvb , offset , len - offset , ENC_NA ) ;
2012-11-28 22:41:07 +00:00
}
else
{
( * msg_fcn_p ) ( tvb , sgsap_tree , pinfo , offset , len - offset ) ;
}
2010-12-26 21:06:08 +00:00
}
void proto_register_sgsap ( void ) {
2011-02-03 18:15:56 +00:00
guint i ;
guint last_offset ;
2014-09-30 20:59:17 +00:00
module_t * sgsap_module ;
2010-12-26 21:06:08 +00:00
2011-02-03 18:15:56 +00:00
/* List of fields */
2010-12-26 21:06:08 +00:00
static hf_register_info hf [ ] = {
2011-02-03 18:15:56 +00:00
{ & hf_sgsap_msg_type ,
{ " SGSAP Message Type " , " sgsap.msg_type " ,
FT_UINT8 , BASE_HEX | BASE_EXT_STRING , & sgsap_msg_strings_ext , 0x0 ,
NULL , HFILL }
} ,
{ & hf_sgsap_elem_id ,
{ " Element ID " , " sgsap.elem_id " ,
2012-05-21 19:27:38 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2011-02-03 18:15:56 +00:00
NULL , HFILL }
} ,
{ & hf_sgsap_eps_location_update_type ,
{ " EPS location update type " , " sgsap.eps_location_update_type " ,
2012-11-28 22:41:07 +00:00
FT_UINT8 , BASE_DEC , VALS ( sgsap_eps_location_update_type_values ) , 0x0 ,
2011-02-03 18:15:56 +00:00
NULL , HFILL }
} ,
{ & hf_sgsap_service_indicator_value ,
{ " Service indicator " , " sgsap.service_indicator " ,
2012-11-28 22:41:07 +00:00
FT_UINT8 , BASE_DEC , VALS ( sgsap_service_indicator_values ) , 0x0 ,
2011-02-03 18:15:56 +00:00
NULL , HFILL }
} ,
{ & hf_sgsap_sgs_cause ,
{ " SGs cause " , " sgsap.sgs_cause " ,
2012-11-28 22:41:07 +00:00
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & sgsap_sgs_cause_values_ext , 0x0 ,
2011-02-03 18:15:56 +00:00
NULL , HFILL }
} ,
{ & hf_sgsap_ue_emm_mode ,
{ " UE EMM mode " , " sgsap.ue_emm_mode " ,
2012-11-28 22:41:07 +00:00
FT_UINT8 , BASE_DEC , VALS ( sgsap_ue_emm_mode_values ) , 0x0 ,
2011-02-03 18:15:56 +00:00
NULL , HFILL }
} ,
{ & hf_sgsap_eci ,
{ " ECI (E-UTRAN Cell Identifier) " , " sgsap.eci " ,
2010-12-27 15:15:55 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0fffffff ,
NULL , HFILL }
2011-02-03 18:15:56 +00:00
} ,
2011-05-10 07:58:33 +00:00
{ & hf_sgsap_cn_id ,
{ " CN_ID " , " sgsap.cn_id " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-09-21 23:42:55 +00:00
{ & hf_sgsap_imsi_det_eps ,
2011-02-03 18:15:56 +00:00
{ " IMSI detach from EPS service type " , " sgsap.imsi_det_eps " ,
2012-11-28 22:41:07 +00:00
FT_UINT8 , BASE_DEC , VALS ( sgsap_imsi_det_from_eps_serv_type_values ) , 0x0 ,
2011-02-03 18:15:56 +00:00
NULL , HFILL }
} ,
2013-04-08 16:44:15 +00:00
{ & hf_sgsap_imsi_det_non_eps ,
{ " IMSI detach from non-EPS service type " , " sgsap.imsi_det_non_eps " ,
FT_UINT8 , BASE_DEC , VALS ( sgsap_imsi_det_from_non_eps_serv_type_values ) , 0x0 ,
NULL , HFILL }
} ,
2011-02-03 18:15:56 +00:00
{ & hf_sgsap_lcs_indic ,
{ " LCS indicator " , " sgsap.lcs_indicator " ,
2012-11-28 22:41:07 +00:00
FT_UINT8 , BASE_DEC , VALS ( sgsap_lcs_indic_values ) , 0x0 ,
2011-02-03 18:15:56 +00:00
NULL , HFILL }
} ,
{ & hf_sgsap_mme_name ,
2011-02-03 16:36:22 +00:00
{ " MME name " , " sgsap.mme_name " ,
FT_STRING , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2011-02-03 18:15:56 +00:00
} ,
{ & hf_sgsap_vlr_name ,
2012-01-23 20:14:37 +00:00
{ " VLR name " , " sgsap.vlr_name " ,
2011-02-03 16:36:22 +00:00
FT_STRING , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2011-03-22 09:06:42 +00:00
} ,
2012-11-28 22:41:07 +00:00
{ & hf_sgsap_imeisv ,
2011-03-22 09:06:42 +00:00
{ " IMEISV " , " sgsap.imeisv " ,
FT_STRING , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2011-02-03 18:15:56 +00:00
} ,
2014-09-06 12:44:23 +00:00
{ & hf_sgsap_unknown_msg ,
{ " Unknown message " , " sgsap.unknown_msg " ,
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_sgsap_message_elements ,
{ " Message Elements " , " sgsap.message_elements " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2014-10-17 14:48:48 +00:00
{ & hf_sgsap_csri ,
{ " CS restoration indicator (CSRI) " , " sgsap.csri " ,
FT_BOOLEAN , 8 , TFS ( & tfs_set_notset ) , 0x01 ,
NULL , HFILL } } ,
2010-12-26 21:06:08 +00:00
} ;
2015-01-02 17:19:10 +00:00
static ei_register_info ei [ ] = {
{ & ei_sgsap_extraneous_data , { " sgsap.extraneous_data " , PI_PROTOCOL , PI_NOTE , " Extraneous Data, dissector bug or later version spec(report to wireshark.org) " , EXPFILL } } ,
{ & ei_sgsap_missing_mandatory_element , { " sgsap.missing_mandatory_element " , PI_PROTOCOL , PI_WARN , " Missing Mandatory element, rest of dissection is suspect " , EXPFILL } } ,
} ;
expert_module_t * expert_sgsap ;
2011-02-03 18:15:56 +00:00
/* Setup protocol subtree array */
2012-11-28 22:41:07 +00:00
# define NUM_INDIVIDUAL_ELEMS 1
2011-02-03 18:15:56 +00:00
gint * ett [ NUM_INDIVIDUAL_ELEMS +
NUM_SGSAP_ELEM +
NUM_SGSAP_MSG ] ;
ett [ 0 ] = & ett_sgsap ;
last_offset = NUM_INDIVIDUAL_ELEMS ;
for ( i = 0 ; i < NUM_SGSAP_ELEM ; i + + , last_offset + + )
{
ett_sgsap_elem [ i ] = - 1 ;
ett [ last_offset ] = & ett_sgsap_elem [ i ] ;
}
for ( i = 0 ; i < NUM_SGSAP_MSG ; i + + , last_offset + + )
{
ett_sgsap_msg [ i ] = - 1 ;
ett [ last_offset ] = & ett_sgsap_msg [ i ] ;
}
/* Register protocol */
proto_sgsap = proto_register_protocol ( PNAME , PSNAME , PFNAME ) ;
/* Register fields and subtrees */
proto_register_field_array ( proto_sgsap , hf , array_length ( hf ) ) ;
proto_register_subtree_array ( ett , array_length ( ett ) ) ;
2015-01-02 17:19:10 +00:00
expert_sgsap = expert_register_protocol ( proto_sgsap ) ;
expert_register_field_array ( expert_sgsap , ei , array_length ( ei ) ) ;
2011-09-21 23:42:55 +00:00
2011-02-03 18:15:56 +00:00
/* Register dissector */
register_dissector ( PFNAME , dissect_sgsap , proto_sgsap ) ;
2014-01-22 06:13:17 +00:00
/* Set default SCTP ports */
range_convert_str ( & global_sgsap_port_range , SGSAP_SCTP_PORT_RANGE , MAX_SCTP_PORT ) ;
2014-09-30 20:59:17 +00:00
sgsap_module = prefs_register_protocol ( proto_sgsap , proto_reg_handoff_sgsap ) ;
2014-01-22 06:13:17 +00:00
prefs_register_range_preference ( sgsap_module , " sctp_ports " ,
" SGsAP SCTP port numbers " ,
" Port numbers used for SGsAP traffic "
" (default " SGSAP_SCTP_PORT_RANGE " ) " ,
& global_sgsap_port_range , MAX_SCTP_PORT ) ;
2010-12-26 21:06:08 +00:00
}
void
proto_reg_handoff_sgsap ( void )
{
2011-02-03 18:15:56 +00:00
/* The registered SCTP port number for SGsAP is 29118.
2010-12-26 21:06:08 +00:00
* The payload protocol identifier to be used for SGsAP is 0.
2011-02-03 18:15:56 +00:00
*/
2012-11-28 22:41:07 +00:00
static gboolean Initialized = FALSE ;
2011-02-03 18:15:56 +00:00
static dissector_handle_t sgsap_handle ;
2014-01-22 06:13:17 +00:00
static range_t * sgsap_port_range ;
2011-02-03 18:15:56 +00:00
sgsap_handle = find_dissector ( " sgsap " ) ;
gsm_a_dtap_handle = find_dissector ( " gsm_a_dtap " ) ;
if ( ! Initialized ) {
2014-06-20 16:43:28 +00:00
dissector_add_for_decode_as ( " sctp.port " , sgsap_handle ) ;
2011-02-03 18:15:56 +00:00
Initialized = TRUE ;
} else {
2014-01-22 06:13:17 +00:00
dissector_delete_uint_range ( " sctp.port " , sgsap_port_range , sgsap_handle ) ;
g_free ( sgsap_port_range ) ;
2011-02-03 18:15:56 +00:00
}
2014-01-22 06:13:17 +00:00
sgsap_port_range = range_copy ( global_sgsap_port_range ) ;
dissector_add_uint_range ( " sctp.port " , sgsap_port_range , sgsap_handle ) ;
2010-12-26 21:06:08 +00:00
}
2012-11-28 22:41:07 +00:00
2014-09-30 20:59:17 +00:00
/*
* Editor modelines - http : //www.wireshark.org/tools/modelines.html
*
* Local variables :
* c - basic - offset : 4
* tab - width : 8
* indent - tabs - mode : nil
* End :
*
* vi : set shiftwidth = 4 tabstop = 8 expandtab :
* : indentSize = 4 : tabSize = 8 : noTabs = true :
*/