Upgrade NAS dissector to v11.4.0 (Release 11)

svn path=/trunk/; revision=45325
This commit is contained in:
Pascal Quantin 2012-10-04 21:23:06 +00:00
parent 6afaa3ed63
commit 04ba20fa0e
4 changed files with 346 additions and 53 deletions

View File

@ -66,6 +66,18 @@ const value_string gsm_common_elem_strings[] = {
{ 0, NULL }
};
static const value_string gsm_a_skip_ind_vals[] = {
{ 0, "No indication of selected PLMN"},
{ 1, "First PLMN in the broadcast system information"},
{ 2, "Second PLMN in the broadcast system information"},
{ 3, "Third PLMN in the broadcast system information"},
{ 4, "Fourth PLMN in the broadcast sytem information"},
{ 5, "Fifth PLMN in the broadcast system information"},
{ 6, "Reserved"},
{ 7, "Reserved"},
{ 0, NULL }
};
static const true_false_string gsm_a_extension_value = {
"No Extension",
"Extended"
@ -3709,7 +3721,7 @@ proto_register_gsm_a_common(void)
},
{ &hf_gsm_a_skip_ind,
{ "Skip Indicator", "gsm_a.skip.ind",
FT_UINT8, BASE_DEC, NULL, 0xf0,
FT_UINT8, BASE_DEC, VALS(gsm_a_skip_ind_vals), 0xf0,
NULL, HFILL }
},
{ &hf_gsm_a_b7spare,

View File

@ -1073,6 +1073,7 @@ dtap_elem_idx_t;
typedef enum
{
/* GPRS Mobility Management Information Elements [3] 10.5.5 */
DE_ADD_UPD_TYPE, /* [11] 10.5.5.0 Additional Update Type */
DE_ATTACH_RES, /* [7] 10.5.5.1 Attach Result*/
DE_ATTACH_TYPE, /* [7] 10.5.5.2 Attach Type */
DE_CIPH_ALG, /* [7] 10.5.5.3 Cipher Algorithm */
@ -1099,6 +1100,7 @@ typedef enum
DE_CELL_NOT, /* [7] 10.5.5.21 Cell Notification */
DE_PS_LCS_CAP, /* [7] 10.5.5.22 PS LCS Capability */
DE_NET_FEAT_SUP, /* [7] 10.5.5.23 Network Feature Support */
DE_ADD_NET_FEAT_SUP, /* [11] 10.5.5.23a Additional network feature support */
DE_RAT_INFO_CONTAINER, /* [7] 10.5.5.24 Inter RAT information container */
DE_REQ_MS_INFO, /* [7] 10.5.5.25 Requested MS information */
DE_UE_NETWORK_CAP, /* [7] 10.5.5.26 UE network capability */

View File

@ -14,7 +14,7 @@
* Vienna (ftw.)Betriebs-GmbH within the Project Metawin.
*
* Added Dissection of Radio Resource Management Information Elements
* and othere enhancements and fixes.
* and other enhancements and fixes.
* Copyright 2005 - 2009, Anders Broman [AT] ericsson.com
* Small bugfixes, mainly in Qos and TFT by Nils Ljungberg and Stefan Boman [AT] ericsson.com
*
@ -72,6 +72,12 @@
* Stage 3
* (3GPP TS 24.008 version 10.6.1 Release 10)
*
* Reference [11]
* Mobile radio interface Layer 3 specification;
* Core network protocols;
* Stage 3
* (3GPP TS 24.008 version 11.4.0 Release 11)
*
* $Id$
*
* Wireshark - Network traffic analyzer
@ -1531,8 +1537,8 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
switch ((oct & 0x18) >> 3)
{
case 0x00: str = "No rate adaption"; break;
case 0x01: str = "V.110, I.460/X.30 rate adaptation"; break;
case 0x02: str = "ITU-T X.31 flag stuffing"; break;
case 0x01: str = "Rate adaptation according to ITU-T Rec. V.110 and ITU-T Rec. X.30"; break;
case 0x02: str = "Flag stuffing according to ITU-T Rec. X.31"; break;
default:
str = "Other rate adaption (see octet 5a)";
break;
@ -1547,7 +1553,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
switch (oct & 0x07)
{
case 0x01: str = "I.440/450"; break;
case 0x01: str = "According to ITU-T Rec. Q.920 and ITU-T Rec. Q.930"; break;
case 0x02: str = "Reserved: was allocated in earlier phases of the protocol"; break;
case 0x03: str = "Reserved: was allocated in earlier phases of the protocol"; break;
case 0x04: str = "Reserved: was allocated in earlier phases of the protocol"; break;
@ -1595,8 +1601,8 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
switch ((oct & 0x18) >> 3)
{
case 0x00: str = "V.120"; break;
case 0x01: str = "H.223 & H.245"; break;
case 0x00: str = "According to ITU-T Rec. V.120"; break;
case 0x01: str = "According to ITU-T Rec. H.223 and ITU-T Rec. H.245"; break;
case 0x02: str = "PIAFS"; break;
default:
str = "Reserved";
@ -1763,12 +1769,12 @@ bc_octet_6:
switch (oct & 0x0f)
{
case 0x01: str = "0.3 kbit/s Recommendation X.1 and V.110"; break;
case 0x02: str = "1.2 kbit/s Recommendation X.1 and V.110"; break;
case 0x03: str = "2.4 kbit/s Recommendation X.1 and V.110"; break;
case 0x04: str = "4.8 kbit/s Recommendation X.1 and V.110"; break;
case 0x05: str = "9.6 kbit/s Recommendation X.1 and V.110"; break;
case 0x06: str = "12.0 kbit/s transparent (non compliance with X.1 and V.110)"; break;
case 0x01: str = "0.3 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x02: str = "1.2 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x03: str = "2.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x04: str = "4.8 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x05: str = "9.6 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x06: str = "12.0 kbit/s transparent (non compliance with ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x07: str = "Reserved: was allocated in earlier phases of the protocol"; break;
default:
str = "Reserved";
@ -1893,12 +1899,12 @@ bc_octet_6:
switch (oct & 0x1f)
{
case 0x00: str = "None"; break;
case 0x01: str = "V.21"; break;
case 0x02: str = "V.22"; break;
case 0x03: str = "V.22 bis"; break;
case 0x01: str = "According to ITU-T Rec. V.21"; break;
case 0x02: str = "According to ITU-T Rec. V.22"; break;
case 0x03: str = "According to ITU-T Rec. V.22 bis"; break;
case 0x04: str = "Reserved: was allocated in earlier phases of the protocol"; break;
case 0x05: str = "V.26 ter"; break;
case 0x06: str = "V.32"; break;
case 0x05: str = "According to ITU-T Rec. V.26 ter"; break;
case 0x06: str = "According to ITU-T Rec. V.32"; break;
case 0x07: str = "Modem for undefined interface"; break;
case 0x08: str = "Autobauding type 1"; break;
default:
@ -1937,7 +1943,7 @@ bc_octet_6:
switch ((oct & 0x60) >> 5)
{
case 0x00: str = "No other modem type specified in this field"; break;
case 0x02: str = "V.34"; break;
case 0x02: str = "According to ITU-T Rec. V.34"; break;
default:
str = "Reserved";
break;
@ -1953,17 +1959,17 @@ bc_octet_6:
switch (oct & 0x1f)
{
case 0x00: str = "Fixed network user rate not applicable/No meaning is associated with this value"; break;
case 0x01: str = "9.6 kbit/s Recommendation X.1 and V.110"; break;
case 0x02: str = "14.4 kbit/s Recommendation X.1 and V.110"; break;
case 0x03: str = "19.2 kbit/s Recommendation X.1 and V.110"; break;
case 0x04: str = "28.8 kbit/s Recommendation X.1 and V.110"; break;
case 0x05: str = "38.4 kbit/s Recommendation X.1 and V.110"; break;
case 0x06: str = "48.0 kbit/s Recommendation X.1 and V.110(synch)"; break;
case 0x07: str = "56.0 kbit/s Recommendation X.1 and V.110(synch) /bit transparent"; break;
case 0x01: str = "9.6 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x02: str = "14.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x03: str = "19.2 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x04: str = "28.8 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x05: str = "38.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"; break;
case 0x06: str = "48.0 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110 (synch))"; break;
case 0x07: str = "56.0 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110 (synch) /bit transparent)"; break;
case 0x08: str = "64.0 kbit/s bit transparent"; break;
case 0x09: str = "33.6 kbit/s bit transparent"; break;
case 0x0a: str = "32.0 kbit/s Recommendation I.460"; break;
case 0x0b: str = "31.2 kbit/s Recommendation V.34"; break;
case 0x0a: str = "32.0 kbit/s (according to ITU-T Rec. I.460)"; break;
case 0x0b: str = "31.2 kbit/s (according to ITU-T Rec. V.34)"; break;
default:
str = "Reserved";
break;
@ -2229,7 +2235,7 @@ bc_octet_7:
switch (oct & 0x1f)
{
case 0x06: str = "Reserved: was allocated in earlier phases of the protocol"; break;
case 0x08: str = "ISO 6429, codeset 0 (DC1/DC3)"; break;
case 0x08: str = "According to ISO/IEC 6429, codeset 0 (DC1/DC3)"; break;
case 0x09: str = "Reserved: was allocated but never used in earlier phases of the protocol"; break;
case 0x0a: str = "Videotex profile 1"; break;
case 0x0c: str = "COPnoFlCt (Character oriented Protocol with no Flow Control mechanism)"; break;
@ -2442,13 +2448,13 @@ const value_string gsm_a_dtap_type_of_number_values[] = {
const value_string gsm_a_dtap_numbering_plan_id_values[] = {
{ 0x00, "unknown" },
{ 0x01, "ISDN/Telephony Numbering (Rec ITU-T E.164)" },
{ 0x01, "ISDN/Telephony Numbering (ITU-T Rec. E.164 / ITU-T Rec. E.163)" },
{ 0x02, "spare" },
{ 0x03, "Data Numbering (ITU-T Rec. X.121)" },
{ 0x04, "Telex Numbering (ITU-T Rec. F.69)" },
{ 0x08, "National Numbering" },
{ 0x09, "Private Numbering" },
{ 0x0d, "reserved for CTS (see 3GPP TS 44.056 [91])" },
{ 0x0d, "Reserved for CTS (see 3GPP TS 44.056)" },
{ 0x0f, "Reserved for extension" },
{ 0, NULL }
};
@ -2536,7 +2542,7 @@ de_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
* Helper function for sub address decoding
*/
const value_string gsm_a_dtap_type_of_sub_addr_values[] = {
{ 0x00, "NSAP (X.213/ISO 8348 AD2)" },
{ 0x00, "NSAP (ITU-T Rec. X.213/ISO 8348 AD2)" },
{ 0x02, "User specified" },
{ 0, NULL }
};
@ -3346,8 +3352,8 @@ static const range_string gsm_a_dtap_u2u_prot_discr_vals[] = {
{ 0x02, 0x02, "X.244" },
{ 0x03, 0x03, "Reserved for system management convergence function" },
{ 0x04, 0x04, "IA5 characters" },
{ 0x07, 0x07, "Rec.V.120 rate adaption" },
{ 0x08, 0x08, "Q.931 (I.451) user-network call control messages" },
{ 0x07, 0x07, "Rate adaption according to ITU-T Rec. V.120" },
{ 0x08, 0x08, "User-network call control messages according to ITU-T Rec. Q.931" },
{ 0x10, 0x3F, "Reserved for other network layer or layer 3 protocols" },
{ 0x40, 0x4E, "National use" },
{ 0x4F, 0x4F, "3GPP capability exchange protocol" },
@ -4762,6 +4768,7 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
case 2: str = "IMEI"; break;
case 3: str = "IMEISV"; break;
case 4: str = "TMSI"; break;
case 5: str = "P-TMSI, RAI, P-TMSI signature"; break;
default:
str = "Reserved";
break;
@ -4797,6 +4804,12 @@ dtap_mm_id_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
ELEM_OPT_TV_SHORT(0xE0, GSM_A_PDU_TYPE_GM, DE_PTMSI_TYPE, NULL);
ELEM_OPT_TLV( 0x1B, GSM_A_PDU_TYPE_GM, DE_RAI_2, " - Routing area identification");
ELEM_OPT_TLV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG_2, " - P-TMSI signature");
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}

View File

@ -151,6 +151,7 @@ const value_string gsm_a_dtap_msg_sm_strings[] = {
const value_string gsm_gm_elem_strings[] = {
/* GPRS Mobility Management Information Elements 10.5.5 */
{ 0x00, "Additional Update Type" },
{ 0x00, "Attach Result" },
{ 0x00, "Attach Type" },
{ 0x00, "Cipher Algorithm" },
@ -177,6 +178,7 @@ const value_string gsm_gm_elem_strings[] = {
{ 0x00, "Cell Notification" },
{ 0x00, "PS LCS Capability" },
{ 0x00, "Network Feature Support" },
{ 0x00, "Additional Network Feature Support" },
{ 0x00, "Inter RAT information container" },
{ 0x00, "Requested MS information" },
{ 0x00, "UE network capability" },
@ -253,6 +255,7 @@ static int hf_gsm_a_sm_ip4_address = -1;
static int hf_gsm_a_sm_ip4_mask = -1;
static int hf_gsm_a_sm_ip6_address = -1;
static int hf_gsm_a_sm_ip6_mask = -1;
static int hf_gsm_a_sm_ip6_prefix_length = -1;
static int hf_gsm_a_sm_tft_protocol_header = -1;
static int hf_gsm_a_sm_tft_port = -1;
static int hf_gsm_a_sm_tft_port_low = -1;
@ -269,6 +272,7 @@ static int hf_gsm_a_gm_sm_value = -1;
static int hf_gsm_a_gm_link_dir = -1;
static int hf_gsm_a_gm_cause = -1;
static int hf_gsm_a_gm_add_upd_type = -1;
static int hf_gsm_a_gm_fop = -1;
static int hf_gsm_a_gm_res_of_attach = -1;
static int hf_gsm_a_gm_type_of_ciph_alg = -1;
@ -313,6 +317,7 @@ static int hf_gsm_a_gm_lcs_molr = -1;
static int hf_gsm_a_gm_mbms = -1;
static int hf_gsm_a_gm_ims_vops = -1;
static int hf_gsm_a_gm_emc_bs = -1;
static int hf_gsm_a_gm_gprs_sms = -1;
static int hf_gsm_a_gm_req_ms_info_irat = -1;
static int hf_gsm_a_gm_req_ms_info_irat2 = -1;
static int hf_gsm_a_gm_ue_usage_setting = -1;
@ -334,6 +339,10 @@ static int hf_gsm_a_sm_qos_max_bitrate_upl_ext = -1;
static int hf_gsm_a_sm_qos_max_bitrate_downl_ext = -1;
static int hf_gsm_a_sm_qos_guar_bitrate_upl_ext = -1;
static int hf_gsm_a_sm_qos_guar_bitrate_downl_ext = -1;
static int hf_gsm_a_sm_qos_max_bitrate_upl_ext2 = -1;
static int hf_gsm_a_sm_qos_max_bitrate_downl_ext2 = -1;
static int hf_gsm_a_sm_qos_guar_bitrate_upl_ext2 = -1;
static int hf_gsm_a_sm_qos_guar_bitrate_downl_ext2 = -1;
static int hf_gsm_a_sm_cause = -1;
static int hf_gsm_a_sm_cause_2 = -1;
static int hf_gsm_a_sm_llc_sapi = -1;
@ -401,6 +410,8 @@ static int hf_gsm_a_gm_rac_dtr_cap = -1;
static int hf_gsm_a_gm_rac_emsr_cap = -1;
static int hf_gsm_a_gm_rac_fast_down_freq_switch_cap = -1;
static int hf_gsm_a_gm_rac_tighter_cap = -1;
static int hf_gsm_a_gm_rac_fanr_cap = -1;
static int hf_gsm_a_gm_rac_ipa_cap = -1;
static int hf_gsm_a_sm_ti_flag = -1;
static int hf_gsm_a_sm_ext = -1;
@ -427,6 +438,7 @@ static int hf_gsm_a_gmm_net_cap_isr = -1;
static int hf_gsm_a_gmm_net_cap_srvcc_to_geran = -1;
static int hf_gsm_a_gmm_net_cap_epc = -1;
static int hf_gsm_a_gmm_net_cap_nf = -1;
static int hf_gsm_a_gmm_net_geran_net_sharing = -1;
/* Initialize the subtree pointers */
static gint ett_tc_component = -1;
@ -463,6 +475,29 @@ gint ett_gsm_gm_elem[NUM_GSM_GM_ELEM];
static const gchar *pdp_str[2]={ "PDP-INACTIVE", "PDP-ACTIVE" };
/*
* [9] 10.5.5.0 Additional Update Type
*/
static const true_false_string gsm_a_gm_add_upd_type_value = {
"SMS only",
"No additional information (shall be interpreted as request for combined attach or combined tracking area updating)"
};
static guint16
de_gmm_add_upd_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset, bit_offset;
curr_offset = offset;
bit_offset = (curr_offset<<3)+4;
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
bit_offset += 3;
proto_tree_add_bits_item(tree, hf_gsm_a_gm_add_upd_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
return (curr_offset - offset);
}
/*
* [9] 10.5.5.1 Attach result
*/
static const value_string gsm_a_gm_res_of_attach_vals[] = {
@ -1007,6 +1042,11 @@ static const true_false_string gsm_a_gmm_net_cap_nf_vals = {
"Mobile station does not support the notification procedure"
};
static const true_false_string gsm_a_gmm_net_geran_net_vals = {
"Mobile station supports GERAN network sharing",
"Mobile station does not support GERAN network sharing"
};
guint16
de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
@ -1080,8 +1120,8 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o
/* bit 2: NF capability */
proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_nf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* bits 1: Spare bit */
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
/* bits 1: GERAN network sharing capability */
proto_tree_add_item(tree, hf_gsm_a_gmm_net_geran_net_sharing, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
@ -1274,17 +1314,17 @@ static const value_string gsm_a_gm_geran_to_eutra_support_in_geran_ptm_vals[] =
static const value_string gsm_a_gm_alt_efta_multi_slot_class_vals[] = {
{ 0x00, "No Alternative EFTA multislot class is indicated. Use (DTM) EGPRS (high) multislot class only" },
{ 0x01, "Alternative EFTA multislot class is Multislot class 19" },
{ 0x02, "Alternative EFTA multislot class is Multislot class 20" },
{ 0x03, "Alternative EFTA multislot class is Multislot class 21" },
{ 0x04, "Alternative EFTA multislot class is Multislot class 22" },
{ 0x05, "Alternative EFTA multislot class is Multislot class 23" },
{ 0x06, "Alternative EFTA multislot class is Multislot class 24" },
{ 0x07, "Alternative EFTA multislot class is Multislot class 25" },
{ 0x08, "Alternative EFTA multislot class is Multislot class 26" },
{ 0x09, "Alternative EFTA multislot class is Multislot class 27" },
{ 0x0a, "Alternative EFTA multislot class is Multislot class 28" },
{ 0x0b, "Alternative EFTA multislot class is Multislot class 29" },
{ 0x01, "Alternative EFTA multislot class 1" },
{ 0x02, "Alternative EFTA multislot class 2" },
{ 0x03, "Alternative EFTA multislot class 3" },
{ 0x04, "Unused" },
{ 0x05, "Unused" },
{ 0x06, "Unused" },
{ 0x07, "Unused" },
{ 0x08, "Unused" },
{ 0x09, "Unused" },
{ 0x0a, "Unused" },
{ 0x0b, "Unused" },
{ 0x0c, "Unused" },
{ 0x0d, "Unused" },
{ 0x0e, "Unused" },
@ -2840,6 +2880,32 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui
bit_offset += bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
/*
* Release 11
*/
/*
* FANR Capability
*/
bits_needed = 1;
GET_DATA;
proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_fanr_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
/*
* IPA Capability
*/
bits_needed = 1;
GET_DATA;
proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ipa_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += bits_needed;
curr_bits_length -= bits_needed;
oct <<= bits_needed;
bits_in_oct -= bits_needed;
/*
@ -2895,6 +2961,7 @@ static const range_string gmm_cause_vals[] = {
{ 0x17, 0x17, "GSM authentication unacceptable"},
{ 0x18, 0x18, "Protocol error, unspecified"},
{ 0x19, 0x19, "Not authorized for this CSG"},
{ 0x1c, 0x1c, "SMS provided via GPRS in this routing area"},
{ 0x20, 0x20, "Service option not supported"}, /* Annex G.4 */
{ 0x21, 0x21, "Requested service option not subscribed"}, /* Annex G.4 */
{ 0x22, 0x22, "Service option temporarily out of order"}, /* Annex G.4 */
@ -3220,6 +3287,27 @@ de_gmm_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu
return (curr_offset - offset);
}
/*
* [7] 10.5.5.23a Additional network feature support
*/
static const true_false_string gsm_a_gm_gprs_sms_value = {
"SMS via GPRS not supported",
"SMS via GPRS supported"
};
static guint16
de_gmm_add_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 7, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_gsm_a_gm_gprs_sms, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
return (curr_offset - offset);
}
/* [7] 10.5.5.24 Inter RAT information container */
static guint16
de_gmm_rat_info_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
@ -3834,6 +3922,7 @@ static const range_string gsm_a_sm_pco_ms2net_prot_vals[] = {
{ 0x000e, 0x000e, "MSISDN Request" },
{ 0x000f, 0x000f, "IFOM-Support-Request" },
{ 0x0010, 0x0010, "IPv4 Link MTU Request" },
{ 0x0011, 0x0011, "MS support of Local address in TFT indicator" },
{ 0xff00, 0xffff, "Operator Specific Use" },
{ 0, 0, NULL }
};
@ -3854,6 +3943,7 @@ static const range_string gsm_a_sm_pco_net2ms_prot_vals[] = {
{ 0x000e, 0x000e, "MSISDN" },
{ 0x000f, 0x000f, "IFOM-Support" },
{ 0x0010, 0x0010, "IPv4 Link MTU" },
{ 0x0011, 0x0011, "Network support of Local address in TFT indicator" },
{ 0xff00, 0xffff, "Operator Specific Use" },
{ 0, 0, NULL }
};
@ -3945,6 +4035,7 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
case 0x000A:
case 0x000B:
case 0x000F:
case 0x0011:
break;
case 0x0004:
if ((link_dir == P2P_DIR_DL) && (e_len == 1)) {
@ -4298,6 +4389,19 @@ qos_calc_ext_bitrate(guint8 oct)
return 128000 + (oct - 0xba) * 2000;
}
static guint32
qos_calc_ext2_bitrate(guint8 oct)
{
if (oct <= 0x3d)
return (256 + oct * 4);
if (oct <= 0xa1)
return (500 + (oct-0x3d) * 10);
if (oct <= 0xf6)
return (1500 + (oct-0xa1) * 100);
return 10000;
}
guint16
de_sm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
@ -4550,6 +4654,69 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
curr_offset += 1;
/* Maximum bit rate for downlink (extended-2) Octet 19 */
oct = tvb_get_guint8(tvb, curr_offset);
if (oct == 0x00)
str = "Use the value indicated by the Maximum bit rate for downlink";
else
{
temp32 = qos_calc_ext2_bitrate(oct);
str = ep_strdup_printf("%u Mbps", temp32);
}
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_downl_ext2, tvb,
curr_offset, 1, oct, "%s (%u)", str, oct);
curr_offset += 1;
NO_MORE_DATA_CHECK(len);
/* Guaranteed bit rate for downlink (extended-2) Octet 20 */
oct = tvb_get_guint8(tvb, curr_offset);
if (oct == 0x00)
str = "Use the value indicated by the Guaranteed bit rate for downlink";
else
{
temp32 = qos_calc_ext2_bitrate(oct);
str = ep_strdup_printf("%u Mbps", temp32);
}
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_downl_ext2, tvb,
curr_offset, 1, oct, "%s (%u)", str, oct);
curr_offset += 1;
NO_MORE_DATA_CHECK(len);
/* Maximum bit rate for uplink (extended-2) Octet 21 */
oct = tvb_get_guint8(tvb, curr_offset);
if (oct == 0x00)
str = "Use the value indicated by the Maximum bit rate for uplink";
else
{
temp32 = qos_calc_ext2_bitrate(oct);
str = ep_strdup_printf("%u Mbps", temp32);
}
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_upl_ext2, tvb,
curr_offset, 1, oct, "%s (%u)", str, oct);
curr_offset += 1;
NO_MORE_DATA_CHECK(len);
/* Guaranteed bit rate for uplink (extended-2) Octet 22 */
oct = tvb_get_guint8(tvb, curr_offset);
if (oct == 0x00)
str = "Use the value indicated by the Guaranteed bit rate for uplink";
else
{
temp32 = qos_calc_ext2_bitrate(oct);
str = ep_strdup_printf("%u Mbps", temp32);
}
proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_upl_ext2, tvb,
curr_offset, 1, oct, "%s (%u)", str, oct);
curr_offset += 1;
EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo);
return (curr_offset - offset);
@ -4590,6 +4757,8 @@ static const value_string gsm_a_sm_cause_vals[] = {
{ 0x34, "Single address bearers only allowed" },
{ 0x38, "Collision with network initiated request" },
{ 0x3c, "Bearer handling not supported" },
{ 0x41, "Maximum number of PDP contexts reached" },
{ 0x42, "Requested APN not supported in current RAT and PLMN combination" },
{ 0x51, "Invalid transaction identifier value" },
{ 0x5f, "Semantically incorrect message" },
{ 0x60, "Invalid mandatory information" },
@ -4939,6 +5108,17 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
pf_length -= 8;
break;
case 0x11:
str = "IPv4 local address type";
proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip4_address, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
curr_offset += 4;
curr_len -= 4;
proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip4_mask, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
curr_offset += 4;
curr_len -= 4;
pf_length -= 8;
break;
case 0x20:
str = "IPv6 remote address type";
proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
@ -4950,6 +5130,28 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
pf_length -= 32;
break;
case 0x21:
str = "IPv6 remote address/prefix length type";
proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
curr_offset += 16;
curr_len -= 16;
proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_prefix_length, tvb, curr_offset, 1, ENC_NA);
curr_offset += 1;
curr_len -= 1;
pf_length -= 17;
break;
case 0x23:
str = "IPv6 local address/prefix length type";
proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
curr_offset += 16;
curr_len -= 16;
proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_prefix_length, tvb, curr_offset, 1, ENC_NA);
curr_offset += 1;
curr_len -= 1;
pf_length -= 17;
break;
case 0x30:
str = "Protocol identifier/Next header type";
proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_protocol_header, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
@ -5267,6 +5469,7 @@ de_sm_connectivity_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = {
/* GPRS Mobility Management Information Elements 10.5.5 */
de_gmm_add_upd_type, /* Additional Update Type */
de_gmm_attach_res, /* Attach Result */
de_gmm_attach_type, /* Attach Type */
de_gmm_ciph_alg, /* Cipher Algorithm */
@ -5293,6 +5496,7 @@ guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
NULL /* no associated data */, /* Cell Notification */
de_gmm_ps_lcs_cap, /* PS LCS Capability */
de_gmm_net_feat_supp, /* Network Feature Support */
de_gmm_add_net_feat_supp, /* Network Feature Support */
de_gmm_rat_info_container, /* Inter RAT information container */
de_gmm_req_ms_info, /* Requested MS information */
NULL, /* UE network capability */
@ -5400,6 +5604,10 @@ dtap_gmm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV(0x14, GSM_A_PDU_TYPE_GM, DE_LAI_2, " - Old location area identification");
ELEM_OPT_TV_SHORT(0xF0, GSM_A_PDU_TYPE_GM, DE_ADD_UPD_TYPE, NULL);
ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_GM, DE_NET_RES_ID_CONT, " - TMSI based NRI container");
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@ -5462,6 +5670,8 @@ dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
ELEM_OPT_TLV(0x66, GSM_A_PDU_TYPE_GM, DE_ADD_NET_FEAT_SUP, NULL);
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@ -5866,6 +6076,10 @@ dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
ELEM_OPT_TLV(0x14, GSM_A_PDU_TYPE_GM, DE_LAI_2, " - Old location area identification");
ELEM_OPT_TV_SHORT(0xF0, GSM_A_PDU_TYPE_GM, DE_ADD_UPD_TYPE, NULL);
ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_GM, DE_NET_RES_ID_CONT, " - TMSI based NRI container");
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@ -5928,6 +6142,8 @@ dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
ELEM_OPT_TLV(0x66, GSM_A_PDU_TYPE_GM, DE_ADD_NET_FEAT_SUP, NULL);
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@ -6556,8 +6772,9 @@ dtap_sm_deact_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint
ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
/* MBMS context status 10.5.7.6 TLV 2 - 18 */
ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL);
ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value");
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@ -6581,8 +6798,7 @@ dtap_sm_deact_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint
ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
/* MBMS context status 10.5.7.6 TLV 2 - 18 */
ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL);
ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo);
}
@ -7043,6 +7259,11 @@ proto_register_gsm_a_gm(void)
FT_IPv6, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_ip6_prefix_length,
{ "IPv6 prefix length", "gsm_a.gm.sm.ip6_prefix_length",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_tft_protocol_header,
{ "Protocol/header", "gsm_a.gm.sm.tft.protocol_header",
FT_UINT8, BASE_HEX|BASE_EXT_STRING, (&ipproto_val_ext), 0x0,
@ -7128,6 +7349,11 @@ proto_register_gsm_a_gm(void)
FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gmm_cause_vals), 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_gm_add_upd_type,
{ "Additional update type", "gsm_a.gm.gmm.add_upd_type",
FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_add_upd_type_value), 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_gm_fop,
{ "Follow-on proceed", "gsm_a.gm.gmm.fop",
FT_BOOLEAN, 8, NULL, 0x08,
@ -7348,6 +7574,11 @@ proto_register_gsm_a_gm(void)
FT_BOOLEAN, 8, TFS(&gsm_a_gm_emc_bs_value), 0x01,
"Emergency bearer services indicator", HFILL }
},
{ &hf_gsm_a_gm_gprs_sms,
{ "GPRS-SMS", "gsm_a.gm.gmm.gprs_sms",
FT_BOOLEAN, 8, TFS(&gsm_a_gm_gprs_sms_value), 0x01,
NULL, HFILL }
},
{ &hf_gsm_a_gm_req_ms_info_irat,
{ "I-RAT", "gsm_a.gm.gmm.req_ms_info_irat",
FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_req_ms_info_irat_vals), 0x0,
@ -7453,6 +7684,26 @@ proto_register_gsm_a_gm(void)
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_qos_max_bitrate_upl_ext2,
{ "Maximum bitrate for uplink (extended-2)", "gsm_a.gm.sm.qos.max_bitrate_upl_ext2",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_qos_max_bitrate_downl_ext2,
{ "Maximum bitrate for downlink (extended-2)", "gsm_a.gm.sm.qos.max_bitrate_downl_ext2",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_qos_guar_bitrate_upl_ext2,
{ "Guaranteed bitrate for uplink (extended-2)", "gsm_a.gm.sm.qos.guar_bitrate_upl_ext2",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_qos_guar_bitrate_downl_ext2,
{ "Guaranteed bitrate for downlink (extended-2)", "gsm_a.gm.sm.qos.guar_bitrate_downl_ext2",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_cause,
{ "SM Cause", "gsm_a.gm.sm.cause",
FT_UINT8, BASE_DEC, NULL, 0x0,
@ -7584,15 +7835,20 @@ proto_register_gsm_a_gm(void)
NULL, HFILL }
},
{ &hf_gsm_a_gmm_net_cap_epc,
{ "EPC Capability", "gsm_a.gm.gmm.net_cap.epc",
{ "EPC capability", "gsm_a.gm.gmm.net_cap.epc",
FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_epc_vals), 0x04,
NULL, HFILL }
},
{ &hf_gsm_a_gmm_net_cap_nf,
{ "NF Capability", "gsm_a.gm.gmm.net_cap.nf",
{ "NF capability", "gsm_a.gm.gmm.net_cap.nf",
FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_nf_vals), 0x02,
NULL, HFILL }
},
{ &hf_gsm_a_gmm_net_geran_net_sharing,
{ "GERAN network sharing capability", "gsm_a.gm.gmm.net_cap.geran_net_sharing",
FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_geran_net_vals), 0x01,
NULL, HFILL }
},
{ &hf_gsm_a_sm_tmgi,
{ "Temporary Mobile Group Identity (TMGI)", "gsm_a.gm.sm.tmgi",
FT_UINT24, BASE_HEX, NULL, 0x0,
@ -7903,6 +8159,16 @@ proto_register_gsm_a_gm(void)
FT_UINT8, BASE_DEC, VALS(tighter_cap_level_vals), 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_gm_rac_fanr_cap,
{ "Fast Ack/Nack Reporting Capability", "gsm_a.gm.gmm.rac.fanr_cap",
FT_UINT8, BASE_DEC, TFS(&tfs_supported_not_supported), 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_gm_rac_ipa_cap,
{ "Immediate Packet Assignment Capability", "gsm_a.gm.gmm.rac.ipa_cap",
FT_UINT8, BASE_DEC, TFS(&tfs_supported_not_supported), 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_sm_ti_flag,
{ "TI Flag", "gsm_a.gm.sm.ti_flag",
FT_BOOLEAN, 8, TFS(&gsm_a_sm_ti_flag_vals), 0x80,