diff options
author | Bill Meier <wmeier@newsguy.com> | 2012-11-28 22:41:07 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2012-11-28 22:41:07 +0000 |
commit | a8112e652975ae9e626e15ade4e85370c965df47 (patch) | |
tree | 3105e7fc230def18471bd597db5bc4f84428ff2e /epan/dissectors/packet-sgsap.c | |
parent | 84afa22969e1ce3dd2d30ebf585c468559e6ff7b (diff) |
Fix [-Wshadow] warnings;
Also (for one or more of the files):
- create/use one or more extended variable strings;
- remove some uneeded variable initializers;
- reformat some long lines;
- reformat hf[] entries;
- convert apparent 4-space tabs to spaces;
- do some whitespace and formatting changes to use a consistent style.
svn path=/trunk/; revision=46265
Diffstat (limited to 'epan/dissectors/packet-sgsap.c')
-rw-r--r-- | epan/dissectors/packet-sgsap.c | 1599 |
1 files changed, 800 insertions, 799 deletions
diff --git a/epan/dissectors/packet-sgsap.c b/epan/dissectors/packet-sgsap.c index 728222d201..1d78093524 100644 --- a/epan/dissectors/packet-sgsap.c +++ b/epan/dissectors/packet-sgsap.c @@ -42,7 +42,7 @@ /* The registered SCTP port number for SGsAP is 29118. * The payload protocol identifier to be used for SGsAP is 0. */ -#define SCTP_PORT_SGSAP 29118 +#define SCTP_PORT_SGSAP 29118 /* Global variables */ @@ -60,7 +60,7 @@ static int hf_sgsap_eps_location_update_type = -1; static int hf_sgsap_service_indicator_value = -1; static int hf_sgsap_sgs_cause = -1; static int hf_sgsap_ue_emm_mode = -1; -static int hf_sgsap_eci = -1; +static int hf_sgsap_eci = -1; static int hf_sgsap_cn_id = -1; static int hf_sgsap_imsi_det_eps = -1; static int hf_sgsap_lcs_indic = -1; @@ -71,10 +71,10 @@ static int hf_sgsap_imeisv = -1; static int ett_sgsap = -1; /* - * 9.4 Information elements + * 9.4 Information elements */ /* - * 9.4.1 CLI + * 9.4.1 CLI */ /* @@ -84,55 +84,55 @@ static int ett_sgsap = -1; * ( packet-gsm_a_dtap.c ) */ /* - * 9.4.2 EPS location update type + * 9.4.2 EPS location update type */ /* EPS location update type value (octet 3) */ static const value_string sgsap_eps_location_update_type_values[] = { - { 0x00, "Shall not be sent in this version of the protocol" }, - { 0x01, "IMSI attach" }, - { 0x02, "Normal location update" }, - { 0, NULL } + { 0x00, "Shall not be sent in this version of the protocol" }, + { 0x01, "IMSI attach" }, + { 0x02, "Normal location update" }, + { 0, NULL } }; static guint16 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_) { - guint32 curr_offset; - guint8 oct; + guint32 curr_offset; + guint8 oct; - curr_offset = offset; + curr_offset = offset; - /* 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")); - } + /* 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")); + } - curr_offset++; + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 9.4.3 Erroneous message + * 9.4.3 Erroneous message * * See subclause 18.4.5 in 3GPP TS 29.018 [16]. */ static guint16 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_) { - /* 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); + /* 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); } /* - * 9.4.3a E-UTRAN Cell Global Identity + * 9.4.3a E-UTRAN Cell Global Identity * * The coding of the E-UTRAN Cell Global Identity value is according to ECGI field information element * as specified in subclause 8.21.5 of 3GPP TS 29.274 [17A] (GTPv2-C) @@ -145,15 +145,15 @@ de_sgsap_ecgi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o curr_offset = offset; dissect_e212_mcc_mnc(tvb, gpinfo, tree, offset, TRUE); - curr_offset+=3; + curr_offset += 3; proto_tree_add_item(tree, hf_sgsap_eci, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset+=4; + curr_offset += 4; return(curr_offset-offset); } /* - * 9.4.4 Global CN-Id + * 9.4.4 Global CN-Id * * See subclause 18.4.27 in 3GPP TS 29.018 [16]. * 18.4.27 Global CN-Id @@ -170,15 +170,15 @@ de_sgsap_g_cn_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3 curr_offset = offset; dissect_e212_mcc_mnc(tvb, gpinfo, tree, offset, TRUE); - curr_offset+=3; + curr_offset += 3; proto_tree_add_item(tree, hf_sgsap_cn_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + curr_offset += 2; return(curr_offset-offset); } /* - * 9.4.5 IMEISV + * 9.4.5 IMEISV * See subclause 18.4.9 in 3GPP TS 29.018 [16]. * The IMEISV is coded as a sequence of BCD digits, compressed two into each octet. * The IMEISV consists of 16 digits @@ -187,23 +187,23 @@ de_sgsap_g_cn_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3 static guint16 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_) { - const char *imeisv_str; - guint32 curr_offset; + const char *imeisv_str; + guint32 curr_offset; curr_offset = offset; - imeisv_str = tvb_bcd_dig_to_ep_str( tvb, curr_offset, len, NULL, FALSE); - 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); - } + imeisv_str = tvb_bcd_dig_to_ep_str( tvb, curr_offset, len, NULL, FALSE); + 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); + } return(len); } /* - * 9.4.6 IMSI + * 9.4.6 IMSI * See subclause 18.4.10 in 3GPP TS 29.018 [16]. */ /* The IMSI is coded as a sequence of BCD digits, compressed two into each octet. @@ -211,90 +211,90 @@ de_sgsap_imeisv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 * The IMSI is defined in 3GPP TS 23.003. It shall not exceed 15 digits (see 3GPP TS 23.003). */ /* - * 9.4.7 IMSI detach from EPS service type + * 9.4.7 IMSI detach from EPS service type */ /* IMSI detach from EPS service type value (octet 3) */ static const value_string sgsap_imsi_det_from_eps_serv_type_values[] = { - { 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 } + { 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 } }; static guint16 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_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_sgsap_imsi_det_eps, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset+=1; + proto_tree_add_item(tree, hf_sgsap_imsi_det_eps, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset += 1; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 9.4.8 IMSI detach from non-EPS service type + * 9.4.8 IMSI detach from non-EPS service type */ /* IMSI detach from non-EPS service type value (octet 3)*/ static const value_string sgsap_imsi_det_from_non_eps_serv_type_values[] = { - { 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 } + { 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 } }; static guint16 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_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_sgsap_imsi_det_eps, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset+=1; + proto_tree_add_item(tree, hf_sgsap_imsi_det_eps, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset += 1; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 9.4.9 LCS client identity + * 9.4.9 LCS client identity * The coding of the LCS client identity value is according to LCS-ClientID * as specified in subclause 17.7.13 of 3GPP TS 29.002 [15] * (packet-nas_eps.c) */ /* - * 9.4.10 LCS indicator + * 9.4.10 LCS indicator */ static const value_string sgsap_lcs_indic_values[] = { - { 0x00, "Normal, unspecified in this version of the protocol" }, - { 0x01, "MT-LR" }, - { 0, NULL } + { 0x00, "Normal, unspecified in this version of the protocol" }, + { 0x01, "MT-LR" }, + { 0, NULL } }; static guint16 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_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_sgsap_lcs_indic, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset+=1; + proto_tree_add_item(tree, hf_sgsap_lcs_indic, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset += 1; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 9.4.11 Location area identifier + * 9.4.11 Location area identifier * * Octets 3 to 7 contain the value part of the Location area identification information element * defined in 3GPP TS 24.008 [8] (starting with octet 2, i.e. not including 3GPP TS 24.008 IEI) *(packet-gsm_a_common.c) */ /* - * 9.4.12 MM information + * 9.4.12 MM information * For the coding see subclause 18.4.16 in 3GPP 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 @@ -305,87 +305,87 @@ de_sgsap_lcs_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin static guint16 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_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - dtap_mm_mm_info(tvb, tree, pinfo, curr_offset, len); + dtap_mm_mm_info(tvb, tree, pinfo, curr_offset, len); - return(len); + return(len); } /* - * 9.4.13 MME name + * 9.4.13 MME name */ static guint16 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_) { - 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 3GPP 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) { - fqdn = tvb_get_ephemeral_string(tvb, offset + 1, len - 1); - for (;;) { - if (name_len >= len - 1) - break; - tmp = name_len; - name_len = name_len + fqdn[tmp] + 1; - fqdn[tmp] = '.'; - } - } else{ - fqdn = tvb_get_ephemeral_string(tvb, offset, len); - } - 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); + 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 3GPP 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) { + fqdn = tvb_get_ephemeral_string(tvb, offset + 1, len - 1); + for (;;) { + if (name_len >= len - 1) + break; + tmp = name_len; + name_len = name_len + fqdn[tmp] + 1; + fqdn[tmp] = '.'; + } + } else{ + fqdn = tvb_get_ephemeral_string(tvb, offset, len); + } + 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); } /* - * 9.4.14 Mobile identity + * 9.4.14 Mobile identity * See subclause 18.4.17 in 3GPP TS 29.018 [16]. * (packet-gsm_a_common.c) */ /* - * 9.4.14a Mobile Station Classmark 2 + * 9.4.14a Mobile Station Classmark 2 * With the exception of the IEI, the contents are specified in subclause 10.5.1.6 in 3GPP TS 24.008 [8]. * (packet-gsm_a_common.c) */ /* - * 9.4.15 NAS message container + * 9.4.15 NAS message container * Octets 3 to 253 contain the SMS message (i.e. CP DATA, CP ACK or CP ERROR) * as defined in subclause 7.2 of 3GPP TS 24.011 [10] */ static guint16 de_sgsap_nas_msg_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb; - guint32 curr_offset; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Octets 3 to 253 contain the SMS message (i.e. CP DATA, CP ACK or CP ERROR) - * as defined in subclause 7.2 of 3GPP TS 24.011 [10] - */ - new_tvb = tvb_new_subset(tvb, curr_offset,len, len); - if(gsm_a_dtap_handle){ - call_dissector(gsm_a_dtap_handle,new_tvb,gpinfo, tree); - } + /* Octets 3 to 253 contain the SMS message (i.e. CP DATA, CP ACK or CP ERROR) + * as defined in subclause 7.2 of 3GPP TS 24.011 [10] + */ + new_tvb = tvb_new_subset(tvb, curr_offset, len, len); + if (gsm_a_dtap_handle) { + call_dissector(gsm_a_dtap_handle, new_tvb, gpinfo, tree); + } - return(len); + return(len); } /* - * 9.4.16 Reject cause + * 9.4.16 Reject cause * See subclause 18.4.21 in 3GPP TS 29.018 [16]. * The rest of the information element is coded as the value part of * the reject cause IE defined in 3GPP TS 24.008, not including @@ -393,56 +393,56 @@ de_sgsap_nas_msg_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _ * (packet-gsm_a_dtap.c) */ /* - * 9.4.17 Service indicator + * 9.4.17 Service indicator */ -/* Octet 3 Service indicator value */ +/* Octet 3 Service indicator value */ static const value_string sgsap_service_indicator_values[] = { - { 0x00, "Shall not be sent in this version of the protocol" }, - { 0x01, "CS call indicator" }, - { 0x02, "SMS indicator" }, - { 0, NULL } + { 0x00, "Shall not be sent in this version of the protocol" }, + { 0x01, "CS call indicator" }, + { 0x02, "SMS indicator" }, + { 0, NULL } }; static guint16 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_) { - guint32 curr_offset; - guint8 oct; + guint32 curr_offset; + guint8 oct; - curr_offset = offset; + curr_offset = offset; - /* 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++; + /* 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++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 9.4.18 SGs cause + * 9.4.18 SGs cause */ /* SGs cause value (octet 3) */ static const value_string sgsap_sgs_cause_values[] = { - { 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 } + { 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 } }; static value_string_ext sgsap_sgs_cause_values_ext = VALUE_STRING_EXT_INIT(sgsap_sgs_cause_values); @@ -450,116 +450,116 @@ static value_string_ext sgsap_sgs_cause_values_ext = VALUE_STRING_EXT_INIT(sgsap static guint16 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_) { - guint32 curr_offset; - guint8 oct; + guint32 curr_offset; + guint8 oct; - curr_offset = offset; + curr_offset = offset; - 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++; + 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++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 9.4.19 SS code + * 9.4.19 SS code * The coding of the SS code value is according to SS-Code as specified in * subclause 17.7.5 of 3GPP TS 29.002 [15] * ( packet-nas_eps.c) */ /* - * 9.4.20 TMSI + * 9.4.20 TMSI * See subclause 18.4.23 in 3GPP TS 29.018 [16]. * (packet-gsm_a_bssmap.c) */ /* - * 9.4.21 TMSI status + * 9.4.21 TMSI status * * See subclause 18.4.24 in 3GPP TS 29.018 [16]. * (packet-gsm_a_gm.c) */ /* - * 9.4.21a Tracking Area Identity + * 9.4.21a Tracking Area Identity * Octets 3 to 7 contain the value part of the Tracking Area Identity information element defined in 3GPP TS 24.301 [14] * (starting with octet 2, i.e. not including 3GPP TS 24.301 IEI) * (packet-nas_eps.c) */ /* - * 9.4.21b UE Time Zone + * 9.4.21b UE Time Zone * 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 3GPP TS 24.008 [8] (i.e. not including 3GPP TS 24.008 IEI) * (packet-gsm_a_dtap.c) */ /* - * 9.4.21c UE EMM mode + * 9.4.21c UE EMM mode */ static const value_string sgsap_ue_emm_mode_values[] = { - { 0x00, "EMM-IDLE" }, - { 0x01, "EMM-CONNECTED" }, - { 0, NULL } + { 0x00, "EMM-IDLE" }, + { 0x01, "EMM-CONNECTED" }, + { 0, NULL } }; static guint16 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_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_sgsap_ue_emm_mode, tvb, offset, 1, ENC_BIG_ENDIAN); - curr_offset+=1; + proto_tree_add_item(tree, hf_sgsap_ue_emm_mode, tvb, offset, 1, ENC_BIG_ENDIAN); + curr_offset += 1; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 9.4.22 VLR name + * 9.4.22 VLR name */ static guint16 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_) { - 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) { - fqdn = tvb_get_ephemeral_string(tvb, offset + 1, len - 1); - for (;;) { - if (name_len >= len - 1) - break; - tmp = name_len; - name_len = name_len + fqdn[tmp] + 1; - fqdn[tmp] = '.'; - } - } else{ - fqdn = tvb_get_ephemeral_string(tvb, offset, len); - } - 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); + 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) { + fqdn = tvb_get_ephemeral_string(tvb, offset + 1, len - 1); + for (;;) { + if (name_len >= len - 1) + break; + tmp = name_len; + name_len = name_len + fqdn[tmp] + 1; + fqdn[tmp] = '.'; + } + } else{ + fqdn = tvb_get_ephemeral_string(tvb, offset, len); + } + 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); } /* - * 9.4.23 Channel needed + * 9.4.23 Channel needed * See subclause 18.4.2 in 3GPP 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 3GPP TS 44.018 * (packet-gsm_a_bssmap.c) */ /* - * 9.4.24 eMLPP priority + * 9.4.24 eMLPP priority * See subclause 18.4.4 in 3GPP TS 29.018 [16]. * The rest of the information element is coded as the value part of * the eMLPP-Priority IE defined in 3GPP TS 48.008 (not including @@ -568,50 +568,50 @@ de_sgsap_vlr_name(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint */ const value_string sgsap_elem_strings[] = { - { 0x01, "IMSI" }, /* 9.4.6 */ - { 0x02, "VLR name" }, /* 9.4.22 */ - { 0x03, "TMSI" }, /* 9.4.20 */ - { 0x04, "Location area identifier" }, /* 9.4.11 */ - { 0x05, "Channel Needed" }, /* 9.4.23 */ - { 0x06, "eMLPP Priority" }, /* 9.4.24 */ - { 0x07, "TMSI status" }, /* 9.4.21 */ - { 0x08, "SGs cause" }, /* 9.4.18 */ - { 0x09, "MME name" }, /* 9.4.13 */ - { 0x0a, "EPS location update type" }, /* 9.4.2 */ - { 0x0b, "Global CN-Id" }, /* 9.4.4 */ - - { 0x0c, "Undefined" }, /* */ - { 0x0d, "Undefined" }, /* */ - - { 0x0e, "Mobile identity" }, /* 9.4.14 */ - { 0x0f, "Reject cause" }, /* 9.4.16 */ - { 0x10, "IMSI detach from EPS service type" }, /* 9.4.7 */ - { 0x11, "IMSI detach from non-EPS service type" }, /* 9.4.8 */ - - { 0x15, "IMEISV" }, /* 9.4.5 */ - { 0x16, "NAS message container" }, /* 9.4.15 */ - { 0x17, "MM information" }, /* 9.4.12 */ - - { 0x18, "Undefined" }, /* */ - { 0x19, "Undefined" }, /* */ - { 0x1a, "Undefined" }, /* */ - - { 0x1b, "Erroneous message" }, /* 9.4.3 */ - { 0x1c, "CLI" }, /* 9.4.1 */ - { 0x1d, "LCS client identity" }, /* 9.4.9 */ - { 0x1e, "LCS indicator" }, /* 9.4.10 */ - { 0x1f, "SS code" }, /* 9.4.19 */ - { 0x20, "Service indicator" }, /* 9.4.17 */ - { 0x21, "UE Time Zone" }, /* 9.4.21b */ - { 0x22, "Mobile Station Classmark 2" }, /* 9.4.14a */ - { 0x23, "Tracking Area Identity" }, /* 9.4.21a */ - { 0x24, "E-UTRAN Cell Global Identity" }, /* 9.4.3a */ - { 0x25, "UE EMM mode" }, /* 9.4.21c */ - - { 0, NULL } + { 0x01, "IMSI" }, /* 9.4.6 */ + { 0x02, "VLR name" }, /* 9.4.22 */ + { 0x03, "TMSI" }, /* 9.4.20 */ + { 0x04, "Location area identifier" }, /* 9.4.11 */ + { 0x05, "Channel Needed" }, /* 9.4.23 */ + { 0x06, "eMLPP Priority" }, /* 9.4.24 */ + { 0x07, "TMSI status" }, /* 9.4.21 */ + { 0x08, "SGs cause" }, /* 9.4.18 */ + { 0x09, "MME name" }, /* 9.4.13 */ + { 0x0a, "EPS location update type" }, /* 9.4.2 */ + { 0x0b, "Global CN-Id" }, /* 9.4.4 */ + + { 0x0c, "Undefined" }, /* */ + { 0x0d, "Undefined" }, /* */ + + { 0x0e, "Mobile identity" }, /* 9.4.14 */ + { 0x0f, "Reject cause" }, /* 9.4.16 */ + { 0x10, "IMSI detach from EPS service type" }, /* 9.4.7 */ + { 0x11, "IMSI detach from non-EPS service type" }, /* 9.4.8 */ + + { 0x15, "IMEISV" }, /* 9.4.5 */ + { 0x16, "NAS message container" }, /* 9.4.15 */ + { 0x17, "MM information" }, /* 9.4.12 */ + + { 0x18, "Undefined" }, /* */ + { 0x19, "Undefined" }, /* */ + { 0x1a, "Undefined" }, /* */ + + { 0x1b, "Erroneous message" }, /* 9.4.3 */ + { 0x1c, "CLI" }, /* 9.4.1 */ + { 0x1d, "LCS client identity" }, /* 9.4.9 */ + { 0x1e, "LCS indicator" }, /* 9.4.10 */ + { 0x1f, "SS code" }, /* 9.4.19 */ + { 0x20, "Service indicator" }, /* 9.4.17 */ + { 0x21, "UE Time Zone" }, /* 9.4.21b */ + { 0x22, "Mobile Station Classmark 2" }, /* 9.4.14a */ + { 0x23, "Tracking Area Identity" }, /* 9.4.21a */ + { 0x24, "E-UTRAN Cell Global Identity" }, /* 9.4.3a */ + { 0x25, "UE EMM mode" }, /* 9.4.21c */ + + { 0, NULL } }; -#define NUM_SGSAP_ELEM (sizeof(sgsap_elem_strings)/sizeof(value_string)) +#define NUM_SGSAP_ELEM (sizeof(sgsap_elem_strings)/sizeof(value_string)) gint ett_sgsap_elem[NUM_SGSAP_ELEM]; #if 0 This enum has been moved to packet-gsm_a_common to @@ -624,817 +624,817 @@ Note this enum must be of the same size as the element decoding list typedef enum { - 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./ - - DE_SGSAP_UDEF_12, /. Undefined ./ - DE_SGSAP_UDEF_13, /. 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./ - - DE_SGSAP_UDEF_24, /. Undefined ./ - DE_SGSAP_UDEF_25, /. Undefined ./ - DE_SGSAP_UDEF_26, /. Undefined ./ - - 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.21b UE Time Zone ./ - DE_SGSAP_MSC_2, /. 9.4.14a Mobile Station Classmark 2 ./ - DE_SGSAP_TAID, /. 9.4.21a Tracking Area Identity ./ - DE_SGSAP_ECGI, /. 9.4.3a E-UTRAN Cell Global Identity ./ - DE_SGSAP_UE_EMM_MODE, /. 9.4.21c UE EMM mode./ - - DE_SGAP_NONE /. NONE ./ + 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./ + + DE_SGSAP_UDEF_12, /. Undefined ./ + DE_SGSAP_UDEF_13, /. 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./ + + DE_SGSAP_UDEF_24, /. Undefined ./ + DE_SGSAP_UDEF_25, /. Undefined ./ + DE_SGSAP_UDEF_26, /. Undefined ./ + + 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.21b UE Time Zone ./ + DE_SGSAP_MSC_2, /. 9.4.14a Mobile Station Classmark 2 ./ + DE_SGSAP_TAID, /. 9.4.21a Tracking Area Identity ./ + DE_SGSAP_ECGI, /. 9.4.3a E-UTRAN Cell Global Identity ./ + DE_SGSAP_UE_EMM_MODE, /. 9.4.21c UE EMM mode./ + + DE_SGAP_NONE /. NONE ./ } sgsap_elem_idx_t; #endif /* 0 */ guint16 (*sgsap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = { - 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*/ - - NULL/*DE_SGSAP_UDEF_12*/, /* Undefined */ - NULL/*DE_SGSAP_UDEF_13*/, /* 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*/ - - NULL/*DE_SGSAP_UDEF_24*/, /* Undefined */ - NULL/*DE_SGSAP_UDEF_25*/, /* Undefined */ - NULL/*DE_SGSAP_UDEF_26*/, /* Undefined */ - - 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 */ - de_sgsap_ue_emm_mode , /* 9.4.21c UE EMM mode*/ - - NULL, /* NONE */ + 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*/ + + NULL/*DE_SGSAP_UDEF_12*/, /* Undefined */ + NULL/*DE_SGSAP_UDEF_13*/, /* 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*/ + + NULL/*DE_SGSAP_UDEF_24*/, /* Undefined */ + NULL/*DE_SGSAP_UDEF_25*/, /* Undefined */ + NULL/*DE_SGSAP_UDEF_26*/, /* Undefined */ + + 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 */ + de_sgsap_ue_emm_mode , /* 9.4.21c UE EMM mode*/ + + NULL, /* NONE */ }; /* MESSAGE FUNCTIONS */ /* - * 8.1 SGsAP-ALERT-ACK message + * 8.1 SGsAP-ALERT-ACK message */ static void sgsap_alert_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.2 SGsAP-ALERT-REJECT message + * 8.2 SGsAP-ALERT-REJECT message */ static void sgsap_alert_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* SGs Cause SGs cause 9.4.18 M TLV 3 */ - ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* SGs Cause SGs cause 9.4.18 M TLV 3 */ + ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.3 SGsAP-ALERT-REQUEST message + * 8.3 SGsAP-ALERT-REQUEST message */ static void sgsap_alert_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.4 SGsAP-DOWNLINK-UNITDATA message + * 8.4 SGsAP-DOWNLINK-UNITDATA message */ static void sgsap_dl_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* NAS message container NAS message container 9.4.15 M TLV 4-253 */ - ELEM_MAND_TLV(0x16, SGSAP_PDU_TYPE, DE_SGSAP_NAS_MSG_CONTAINER, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* NAS message container NAS message container 9.4.15 M TLV 4-253 */ + ELEM_MAND_TLV(0x16, SGSAP_PDU_TYPE, DE_SGSAP_NAS_MSG_CONTAINER, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.5 SGsAP-EPS-DETACH-ACK message + * 8.5 SGsAP-EPS-DETACH-ACK message */ static void sgsap_eps_det_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.6 SGsAP-EPS-DETACH-INDICATION message + * 8.6 SGsAP-EPS-DETACH-INDICATION message */ static void sgsap_eps_det_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* MME name MME name 9.4.13 M TLV 57 */ - ELEM_MAND_TLV(0x09, SGSAP_PDU_TYPE, DE_SGSAP_MME_NAME, NULL); - /* IMSI detach from EPS service type IMSI detach from EPS service type 9.4.7 M TLV 3 */ - ELEM_MAND_TLV(0x10, SGSAP_PDU_TYPE, DE_SGSAP_IMSI_DET_EPS, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* MME name MME name 9.4.13 M TLV 57 */ + ELEM_MAND_TLV(0x09, SGSAP_PDU_TYPE, DE_SGSAP_MME_NAME, NULL); + /* IMSI detach from EPS service type IMSI detach from EPS service type 9.4.7 M TLV 3 */ + ELEM_MAND_TLV(0x10, SGSAP_PDU_TYPE, DE_SGSAP_IMSI_DET_EPS, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.7 SGsAP-IMSI-DETACH-ACK message + * 8.7 SGsAP-IMSI-DETACH-ACK message */ static void sgsap_imsi_det_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.8 SGsAP-IMSI-DETACH-INDICATION message + * 8.8 SGsAP-IMSI-DETACH-INDICATION message */ static void sgsap_imsi_det_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* MME name MME name 9.4.13 M TLV 57 */ - ELEM_MAND_TLV(0x09, SGSAP_PDU_TYPE, DE_SGSAP_MME_NAME, NULL); - /* IMSI Detach from non-EPS service type IMSI detach from non-EPS service type 9.4.8 M TLV 3 */ - ELEM_MAND_TLV(0x11, SGSAP_PDU_TYPE, DE_SGSAP_IMSI_DET_NON_EPS, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* MME name MME name 9.4.13 M TLV 57 */ + ELEM_MAND_TLV(0x09, SGSAP_PDU_TYPE, DE_SGSAP_MME_NAME, NULL); + /* IMSI Detach from non-EPS service type IMSI detach from non-EPS service type 9.4.8 M TLV 3 */ + ELEM_MAND_TLV(0x11, SGSAP_PDU_TYPE, DE_SGSAP_IMSI_DET_NON_EPS, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.9 SGsAP-LOCATION-UPDATE-ACCEPT message + * 8.9 SGsAP-LOCATION-UPDATE-ACCEPT message */ static void sgsap_imsi_loc_update_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* Location area identifier Location area identifier 9.4.11 M TLV 7 */ - ELEM_MAND_TLV(0x04, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); - /* 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"); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* Location area identifier Location area identifier 9.4.11 M TLV 7 */ + ELEM_MAND_TLV(0x04, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); + /* 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"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.10 SGsAP-LOCATION-UPDATE-REJECT message + * 8.10 SGsAP-LOCATION-UPDATE-REJECT message */ static void sgsap_imsi_loc_update_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* Reject cause Reject cause 9.4.16 M TLV 3 */ - ELEM_MAND_TLV(0x0f,GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL); - /* Location area identifier Location area identifier 9.4.11 O TLV 7 */ - ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* Reject cause Reject cause 9.4.16 M TLV 3 */ + ELEM_MAND_TLV(0x0f, GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL); + /* Location area identifier Location area identifier 9.4.11 O TLV 7 */ + ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.11 SGsAP-LOCATION-UPDATE-REQUEST message + * 8.11 SGsAP-LOCATION-UPDATE-REQUEST message */ static void sgsap_imsi_loc_update_req(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 TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* MME name MME name 9.4.13 M TLV 57 */ - ELEM_MAND_TLV(0x09, SGSAP_PDU_TYPE, DE_SGSAP_MME_NAME, NULL); - /* EPS location update type EPS location update type 9.4.2 M TLV 3 */ - ELEM_MAND_TLV(0x0a, SGSAP_PDU_TYPE, DE_SGSAP_EPS_LOC_UPD_TYPE, NULL); - /* New location area identifier Location area identifier 9.4.11 M TLV 7 */ - ELEM_MAND_TLV(0x04, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); - /* 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); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* MME name MME name 9.4.13 M TLV 57 */ + ELEM_MAND_TLV(0x09, SGSAP_PDU_TYPE, DE_SGSAP_MME_NAME, NULL); + /* EPS location update type EPS location update type 9.4.2 M TLV 3 */ + ELEM_MAND_TLV(0x0a, SGSAP_PDU_TYPE, DE_SGSAP_EPS_LOC_UPD_TYPE, NULL); + /* New location area identifier Location area identifier 9.4.11 M TLV 7 */ + ELEM_MAND_TLV(0x04, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); + /* 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); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.12 SGsAP-MM-INFORMATION-REQUEST + * 8.12 SGsAP-MM-INFORMATION-REQUEST */ static void sgsap_mm_info_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* MM information MM information 9.4.12 M TLV 3-n */ - ELEM_MAND_TLV(0x17, SGSAP_PDU_TYPE, DE_SGSAP_MM_INFO, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* MM information MM information 9.4.12 M TLV 3-n */ + ELEM_MAND_TLV(0x17, SGSAP_PDU_TYPE, DE_SGSAP_MM_INFO, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.13 SGsAP-PAGING-REJECT message + * 8.13 SGsAP-PAGING-REJECT message */ static void sgsap_paging_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* SGs Cause SGs Cause 9.4.18 M TLV 3 */ - ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* SGs Cause SGs Cause 9.4.18 M TLV 3 */ + ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.14 SGsAP-PAGING-REQUEST message + * 8.14 SGsAP-PAGING-REQUEST message */ static void sgsap_paging_req(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 TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* VLR name VLR name 9.4.22 M TLV 3-n */ - ELEM_MAND_TLV(0x02, SGSAP_PDU_TYPE, DE_SGSAP_VLR_NAME, NULL); - /* Service indicator Service indicator 9.4.17 M TLV 3 */ - ELEM_MAND_TLV(0x20, SGSAP_PDU_TYPE, DE_SGSAP_SERV_INDIC, NULL); - /* 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); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* VLR name VLR name 9.4.22 M TLV 3-n */ + ELEM_MAND_TLV(0x02, SGSAP_PDU_TYPE, DE_SGSAP_VLR_NAME, NULL); + /* Service indicator Service indicator 9.4.17 M TLV 3 */ + ELEM_MAND_TLV(0x20, SGSAP_PDU_TYPE, DE_SGSAP_SERV_INDIC, NULL); + /* 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); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.15 SGsAP-RESET-ACK message + * 8.15 SGsAP-RESET-ACK message */ static void sgsap_reset_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* 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); + /* 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); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.16 SGsAP-RESET-INDICATION message + * 8.16 SGsAP-RESET-INDICATION message */ static void sgsap_reset_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* 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); + /* 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); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.17 SGsAP-SERVICE-REQUEST message + * 8.17 SGsAP-SERVICE-REQUEST message */ static void sgsap_service_req(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 TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* Service indicator Service indicator 9.4.17 M TLV 3 */ - ELEM_MAND_TLV(0x20, SGSAP_PDU_TYPE, DE_SGSAP_SERV_INDIC, NULL); - /* 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); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /*IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* Service indicator Service indicator 9.4.17 M TLV 3 */ + ELEM_MAND_TLV(0x20, SGSAP_PDU_TYPE, DE_SGSAP_SERV_INDIC, NULL); + /* 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); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.18 SGsAP-STATUS message + * 8.18 SGsAP-STATUS message */ static void sgsap_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* 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 */ - ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); - /* Erroneous message Erroneous message 9.4.3 M TLV 3-n */ - ELEM_OPT_TLV(0x1e, SGSAP_PDU_TYPE, DE_SGSAP_ERR_MSG, NULL); + /* 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 */ + ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); + /* Erroneous message Erroneous message 9.4.3 M TLV 3-n */ + ELEM_OPT_TLV(0x1e, SGSAP_PDU_TYPE, DE_SGSAP_ERR_MSG, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.19 SGsAP-TMSI-REALLOCATION-COMPLETE message + * 8.19 SGsAP-TMSI-REALLOCATION-COMPLETE message */ static void sgsap_tmsi_realloc_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /*IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /*IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.20 SGsAP-UE-ACTIVITY-INDICATION message + * 8.20 SGsAP-UE-ACTIVITY-INDICATION message */ static void sgsap_ue_act_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.21 SGsAP-UE-UNREACHABLE message + * 8.21 SGsAP-UE-UNREACHABLE message */ static void sgsap_ue_unreachable(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* SGs cause SGs cause 9.4.18 M TLV 3 */ - ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* SGs cause SGs cause 9.4.18 M TLV 3 */ + ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.22 SGsAP-UPLINK-UNITDATA message + * 8.22 SGsAP-UPLINK-UNITDATA message */ static void sgsap_ue_ul_unitdata(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 TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* NAS message container NAS message container 9.4.15 M TLV 4-253 */ - ELEM_MAND_TLV(0x16, SGSAP_PDU_TYPE, DE_SGSAP_NAS_MSG_CONTAINER, NULL); - /* 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); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* NAS message container NAS message container 9.4.15 M TLV 4-253 */ + ELEM_MAND_TLV(0x16, SGSAP_PDU_TYPE, DE_SGSAP_NAS_MSG_CONTAINER, NULL); + /* 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); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.23 SGsAP-RELEASE-REQUEST message + * 8.23 SGsAP-RELEASE-REQUEST message */ static void sgsap_release_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI IMSI 9.4.6 M TLV 6-10 */ - ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* SGs cause SGs cause 9.4.18 O TLV 3 */ - ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); + /* IMSI IMSI 9.4.6 M TLV 6-10 */ + ELEM_MAND_TLV(0x01, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* SGs cause SGs cause 9.4.18 O TLV 3 */ + ELEM_MAND_TLV(0x08, SGSAP_PDU_TYPE, DE_SGSAP_SGS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 8.24 SGsAP-SERVICE-ABORT-REQUEST message + * 8.24 SGsAP-SERVICE-ABORT-REQUEST message */ /* No IE's */ /* - * 9.2 Message type + * 9.2 Message type */ static const value_string sgsap_msg_strings[] = { - { 0x01, "SGsAP-PAGING-REQUEST"}, /* 8.14 */ - { 0x02, "SGsAP-PAGING-REJECT"}, /* 8.13 */ + { 0x01, "SGsAP-PAGING-REQUEST"}, /* 8.14 */ + { 0x02, "SGsAP-PAGING-REJECT"}, /* 8.13 */ /* * 0 0 0 0 0 0 1 1 * to * 0 0 0 0 0 1 0 1 * Unassigned: treated as an unknown Message type */ - { 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 */ + { 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 */ /* * 0 0 0 1 1 0 0 0 * to * 0 0 0 1 1 0 0 1 * Unassigned: treated as an unknown Message type */ - { 0x18, "Unassigned"}, - { 0x19, "Unassigned"}, + { 0x18, "Unassigned"}, + { 0x19, "Unassigned"}, - { 0x1a, "SGsAP-MM-INFORMATION-REQUEST"}, /* 8.12 */ - { 0x1b, "SGsAP-RELEASE-REQUEST"}, /* 8.23 */ + { 0x1a, "SGsAP-MM-INFORMATION-REQUEST"}, /* 8.12 */ + { 0x1b, "SGsAP-RELEASE-REQUEST"}, /* 8.23 */ /* - * 0 0 0 1 1 1 0 0 Unassigned: treated as an unknown Message type 7 + * 0 0 0 1 1 1 0 0 Unassigned: treated as an unknown Message type 7 */ - { 0x1c, "Unassigned"}, /* 8.12 */ + { 0x1c, "Unassigned"}, /* 8.12 */ - { 0x1d, "SGsAP-STATUS"}, /* 8.18 */ - { 0x1e, "Unassigned"}, - { 0x1f, "SGsAP-UE-UNREACHABLE"}, /* 8.21 */ - { 0, NULL } + { 0x1d, "SGsAP-STATUS"}, /* 8.18 */ + { 0x1e, "Unassigned"}, + { 0x1f, "SGsAP-UE-UNREACHABLE"}, /* 8.21 */ + { 0, NULL } }; static value_string_ext sgsap_msg_strings_ext = VALUE_STRING_EXT_INIT(sgsap_msg_strings); -#define NUM_SGSAP_MSG (sizeof(sgsap_msg_strings)/sizeof(value_string)) +#define NUM_SGSAP_MSG (sizeof(sgsap_msg_strings)/sizeof(value_string)) static gint ett_sgsap_msg[NUM_SGSAP_MSG]; static void (*sgsap_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = { - sgsap_paging_req, /* 0x01, "SGsAP-PAGING-REQUEST" 8.14 */ - sgsap_paging_rej, /* 0x02, "SGsAP-PAGING-REJECT" 8.13 */ + sgsap_paging_req, /* 0x01, "SGsAP-PAGING-REQUEST" 8.14 */ + sgsap_paging_rej, /* 0x02, "SGsAP-PAGING-REJECT" 8.13 */ /* * 0 0 0 0 0 0 1 1 * to * 0 0 0 0 0 1 0 1 * Unassigned: treated as an unknown Message type */ - 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 */ + 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 */ /* * 0 0 0 1 1 0 0 0 * to * 0 0 0 1 1 0 0 1 * Unassigned: treated as an unknown Message type */ - NULL, /* 0x18, "Unassigned" */ - NULL, /* 0x19, "Unassigned" */ + NULL, /* 0x18, "Unassigned" */ + NULL, /* 0x19, "Unassigned" */ - sgsap_mm_info_req, /* 0x1a, "SGsAP-MM-INFORMATION-REQUEST" 8.12 */ - sgsap_release_req, /* 0x1b, "SGsAP-RELEASE-REQUEST" 8.23 */ + sgsap_mm_info_req, /* 0x1a, "SGsAP-MM-INFORMATION-REQUEST" 8.12 */ + sgsap_release_req, /* 0x1b, "SGsAP-RELEASE-REQUEST" 8.23 */ /* - * 0 0 0 1 1 1 0 0 Unassigned: treated as an unknown Message type 7 + * 0 0 0 1 1 1 0 0 Unassigned: treated as an unknown Message type 7 */ - NULL, /* 0x1c, "Unassigned" */ + NULL, /* 0x1c, "Unassigned" */ - sgsap_status, /* 0x1d, "SGsAP-STATUS" 8.18 */ - NULL, /* 0x1e, "Unassigned" */ - sgsap_ue_unreachable, /* 0x1f, "SGsAP-UE-UNREACHABLE" 8.21 */ + sgsap_status, /* 0x1d, "SGsAP-STATUS" 8.18 */ + NULL, /* 0x1e, "Unassigned" */ + sgsap_ue_unreachable, /* 0x1f, "SGsAP-UE-UNREACHABLE" 8.21 */ - NULL, /* NONE */ + NULL, /* NONE */ }; -static void get_sgsap_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn) +static void get_sgsap_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p) { - gint idx; + gint idx; - *msg_str = match_strval_idx_ext((guint32) (oct & 0xff), &sgsap_msg_strings_ext, &idx); - *ett_tree = ett_sgsap_msg[idx]; - *hf_idx = hf_sgsap_msg_type; - *msg_fcn = sgsap_msg_fcn[idx]; + *msg_str = match_strval_idx_ext((guint32) (oct & 0xff), &sgsap_msg_strings_ext, &idx); + *ett_tree = ett_sgsap_msg[idx]; + *hf_idx = hf_sgsap_msg_type; + *msg_fcn_p = sgsap_msg_fcn[idx]; - return; + return; } static void dissect_sgsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - 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)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len); - guint8 oct; - - /* Save pinfo */ - gpinfo = pinfo; - len = tvb_length(tvb); - - /* 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 = NULL; - ett_tree = -1; - hf_idx = -1; - msg_str = NULL; - - get_sgsap_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn); - - if(msg_str){ - col_add_fstr(pinfo->cinfo, COL_INFO, "%s", msg_str); - }else{ - proto_tree_add_text(tree, tvb, offset, 1,"Unknown message 0x%x",oct); - 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 == NULL) - { - proto_tree_add_text(sgsap_tree, tvb, offset, len - offset, - "Message Elements"); - } - else - { - (*msg_fcn)(tvb, sgsap_tree, pinfo, offset, len - offset); - } + 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; + + /* Save pinfo */ + gpinfo = pinfo; + len = tvb_length(tvb); + + /* 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{ + proto_tree_add_text(tree, tvb, offset, 1, "Unknown message 0x%x", oct); + 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) + { + proto_tree_add_text(sgsap_tree, tvb, offset, len - offset, + "Message Elements"); + } + else + { + (*msg_fcn_p)(tvb, sgsap_tree, pinfo, offset, len - offset); + } } @@ -1459,22 +1459,22 @@ void proto_register_sgsap(void) { }, { &hf_sgsap_eps_location_update_type, { "EPS location update type", "sgsap.eps_location_update_type", - FT_UINT8, BASE_DEC, VALS(sgsap_eps_location_update_type_values),0x0, + FT_UINT8, BASE_DEC, VALS(sgsap_eps_location_update_type_values), 0x0, NULL, HFILL } }, { &hf_sgsap_service_indicator_value, { "Service indicator", "sgsap.service_indicator", - FT_UINT8, BASE_DEC, VALS(sgsap_service_indicator_values),0x0, + FT_UINT8, BASE_DEC, VALS(sgsap_service_indicator_values), 0x0, NULL, HFILL } }, { &hf_sgsap_sgs_cause, { "SGs cause", "sgsap.sgs_cause", - FT_UINT8, BASE_DEC|BASE_EXT_STRING, &sgsap_sgs_cause_values_ext,0x0, + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &sgsap_sgs_cause_values_ext, 0x0, NULL, HFILL } }, { &hf_sgsap_ue_emm_mode, { "UE EMM mode", "sgsap.ue_emm_mode", - FT_UINT8, BASE_DEC, VALS(sgsap_ue_emm_mode_values),0x0, + FT_UINT8, BASE_DEC, VALS(sgsap_ue_emm_mode_values), 0x0, NULL, HFILL } }, { &hf_sgsap_eci, @@ -1489,12 +1489,12 @@ void proto_register_sgsap(void) { }, { &hf_sgsap_imsi_det_eps, { "IMSI detach from EPS service type", "sgsap.imsi_det_eps", - FT_UINT8, BASE_DEC, VALS(sgsap_imsi_det_from_eps_serv_type_values),0x0, + FT_UINT8, BASE_DEC, VALS(sgsap_imsi_det_from_eps_serv_type_values), 0x0, NULL, HFILL } }, { &hf_sgsap_lcs_indic, { "LCS indicator", "sgsap.lcs_indicator", - FT_UINT8, BASE_DEC, VALS(sgsap_lcs_indic_values),0x0, + FT_UINT8, BASE_DEC, VALS(sgsap_lcs_indic_values), 0x0, NULL, HFILL } }, { &hf_sgsap_mme_name, @@ -1507,7 +1507,7 @@ void proto_register_sgsap(void) { FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} }, - { &hf_sgsap_imeisv, + { &hf_sgsap_imeisv, {"IMEISV", "sgsap.imeisv", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} @@ -1515,7 +1515,7 @@ void proto_register_sgsap(void) { }; /* Setup protocol subtree array */ -#define NUM_INDIVIDUAL_ELEMS 1 +#define NUM_INDIVIDUAL_ELEMS 1 gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_SGSAP_ELEM + NUM_SGSAP_MSG]; @@ -1552,7 +1552,7 @@ proto_reg_handoff_sgsap(void) /* The registered SCTP port number for SGsAP is 29118. * The payload protocol identifier to be used for SGsAP is 0. */ - static gboolean Initialized=FALSE; + static gboolean Initialized = FALSE; static dissector_handle_t sgsap_handle; static guint SctpPort; @@ -1568,8 +1568,9 @@ proto_reg_handoff_sgsap(void) } } - SctpPort=gbl_sgsapSctpPort; + SctpPort = gbl_sgsapSctpPort; if (SctpPort != 0) { dissector_add_uint("sctp.port", SctpPort, sgsap_handle); } } + |