Update towards 48.008 8.4.0

svn path=/trunk/; revision=26558
This commit is contained in:
Anders Broman 2008-10-26 19:44:06 +00:00
parent e6eaa7c82e
commit 799b8635f3
3 changed files with 646 additions and 73 deletions

View File

@ -314,6 +314,7 @@ static int hf_gsm_a_bssmap_ch_mode = -1;
static int hf_gsm_a_bssmap_be_rnc_id = -1;
static int hf_gsm_a_bssmap_apdu_protocol_id = -1;
static int hf_gsm_a_bssmap_periodicity = -1;
static int hf_gsm_a_bssmap_lcs_pri = -1;
/* Initialize the subtree pointers */
static gint ett_bssmap_msg = -1;
@ -409,7 +410,7 @@ typedef enum
BE_LCS_CLIENT, /. LCS Client Type ./
BE_APDU, /. APDU ./
BE_NE_ID, /. Network Element Identity ./
BE_GSP_ASSIST_DATA, /. GPS Assistance Data ./
BE_GPS_ASSIST_DATA, /. GPS Assistance Data ./
BE_DECIPH_KEYS, /. Deciphering Keys ./
BE_RET_ERR_REQ, /. Return Error Request ./
BE_RET_ERR_CAUSE, /. Return Error Cause ./
@ -2130,12 +2131,67 @@ be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc
* 3.2.2.60 LCS QoS
* (The QoS octets 3 to n are coded in the same way as the equivalent octets
* in the LCS QoS element of 3GPP TS 49.031.)
*/
static guint8
be_lcs_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
/*
proto_tree_add_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, curr_offset, 1, FALSE);
*/
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.61 LSA Access Control Suppression
*/
/*
* 3.2.2.62 LCS Priority
* The Priority octets 3 to n are coded in the same way as the equivalent octets
* in the LCS Priority element of 3GPP TS 49.031.
*/
/* Location Information definitions */
static const value_string lcs_priority_vals[] = {
{ 0, "highest" },
{ 1, "normal" },
{ 0, NULL}
};
static guint8
be_lcs_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
/* This octet is coded as the LCS-Priority octet in 3GPP TS 29.002 */
proto_tree_add_item(tree, hf_gsm_a_bssmap_lcs_pri, tvb, curr_offset, 1, FALSE);
return(len);
}
/*
* 3.2.2.63 Location Type (Location Type element of 3GPP TS 49.031 BSSAP-LE.)
*/
static guint8
be_loc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
/*
proto_tree_add_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, curr_offset, 1, FALSE);
*/
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.64 Location Estimate
* The Location Estimate field is composed of 1 or more octets with an internal structure
@ -2177,10 +2233,34 @@ be_pos_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha
* 3.2.2.66 LCS Cause
* LCS Cause element of 3GPP TS 49.031 BSSAP-LE.
*/
static guint8
be_lcs_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.67 LCS Client Type
* LCS Client Type element of 3GPP TS 49.031 BSSAP-LE.
*/
static guint8
be_lcs_client(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.68 3GPP TS 48.008 version 6.9.0 Release 6
*/
@ -2254,14 +2334,29 @@ be_apdu(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_s
/*
* 3.2.2.69 Network Element Identity
* Network Element Identity element of 3GPP TS 49.031 BSSAP-LE.
*/
/*
* 3.2.2.70 GPS Assistance Data
* Requested GPS Data element of 3GPP TS 49.031 BSSAP-LE.
*
*/
static guint8
be_gps_assist_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.71 Deciphering Keys
* Deciphering Key element of 3GPP TS 49.031 BSSAP-LE.
*/
#if 0
static guint8
be_decihp_keys(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
@ -2276,40 +2371,93 @@ be_decihp_keys(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g
return(len);
}
#endif
/* 3.2.2.72 Return Error Request
* Return Error Request element of 3GPP TS 49.031 BSSAP-LE.
* 3.2.2.73 Return Error Cause
* Return Error Cause element of 3GPP TS 49.031 BSSAP-LE.
* 3.2.2.74 Segmentation
* Segmentation element of 3GPP TS 49.031 BSSAP-LE.
* 3.2.2.75 Service Handover
* 3.2.2.76 Source RNC to target RNC transparent information (UMTS)
* 3.2.2.77 Source RNC to target RNC transparent information (cdma2000)
* 3.2.2.78 GERAN Classmark
* 3.2.2.79 GERAN BSC Container
* 3.2.2.80 New BSS to Old BSS Information
* 3.2.2.81 Inter-System Information
* 3.2.2.82 SNA Access Information
* 3.2.2.83 VSTK_RAND Information
* 3.2.2.84 VSTK information
* 3.2.2.85 Paging Information
* 3.2.2.86 IMEI
* 3.2.2.87 Velocity Estimate
* 3.2.2.88 VGCS Feature Flags
* 3.2.2.89 Talker Priority
* 3.2.2.90 Emergency Set Indicatio
* 3.2.2.91 Talker Identity
* 3.2.2.92 SMS to VGCS
* 3.2.2.93 VGCS talker mode
* 3.2.2.94 VGCS/VBS Cell Status
* 3.2.2.95 GANSS Assistance Data
* 3.2.2.96 GANSS Positioning Data
* 3.2.2.97 GANSS Location Type
* 3.2.2.98 Application Data
* 3.2.2.99 Data Identity
* 3.2.2.100 Application Data Information
* 3.2.2.101 MSISDN
*/
static guint8
be_ret_err_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.73 Return Error Cause
* Return Error Cause element of 3GPP TS 49.031 BSSAP-LE.
*/
static guint8
be_ret_err_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.74 Segmentation
* Segmentation element of 3GPP TS 49.031 BSSAP-LE.
*/
static guint8
be_seg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.75 Service Handover
*/
static guint8
be_serv_ho(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset+1, len -1, "Not decoded yet");
return(len);
}
/*
* 3.2.2.76 Source RNC to target RNC transparent information (UMTS)
* 3.2.2.77 Source RNC to target RNC transparent information (cdma2000)
* 3.2.2.78 GERAN Classmark
* 3.2.2.79 GERAN BSC Container
* 3.2.2.80 New BSS to Old BSS Information
* 3.2.2.81 Inter-System Information
* 3.2.2.82 SNA Access Information
* 3.2.2.83 VSTK_RAND Information
* 3.2.2.84 VSTK information
* 3.2.2.85 Paging Information
* 3.2.2.86 IMEI
* 3.2.2.87 Velocity Estimate
* 3.2.2.88 VGCS Feature Flags
* 3.2.2.89 Talker Priority
* 3.2.2.90 Emergency Set Indicatio
* 3.2.2.91 Talker Identity
* 3.2.2.92 SMS to VGCS
* 3.2.2.93 VGCS talker mode
* 3.2.2.94 VGCS/VBS Cell Status
* 3.2.2.95 GANSS Assistance Data
* 3.2.2.96 GANSS Positioning Data
* 3.2.2.97 GANSS Location Type
* 3.2.2.98 Application Data
* 3.2.2.99 Data Identity
* 3.2.2.100 Application Data Information
* 3.2.2.101 MSISDN
* 3.2.2.102 AoIP Transport Layer Address
* 3.2.2.103 Speech Codec List
* 3.2.2.104 Speech Codec
@ -2337,7 +2485,7 @@ guint8 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
NULL, /* Reserved */
NULL, /* Reserved */
de_ms_cm_2, /* Classmark Information Type 2 */
NULL, /* Classmark Information Type 3 */
de_ms_cm_3, /* Classmark Information Type 3 */
NULL, /* Interference Band To Be Used */
de_rr_cause, /* RR Cause */
NULL, /* Reserved */
@ -2380,21 +2528,59 @@ guint8 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
NULL, /* LSA Identifier */
NULL, /* LSA Identifier List */
NULL, /* LSA Information */
NULL, /* LCS QoS */
be_lcs_qos, /* LCS QoS */
NULL, /* LSA access control suppression */
NULL, /* LCS Priority */
NULL, /* Location Type */
be_lcs_prio, /* LCS Priority */
be_loc_type, /* Location Type */
be_loc_est, /* Location Estimate */
be_pos_data, /* Positioning Data */
NULL, /* LCS Cause */
NULL, /* LCS Client Type */
be_lcs_cause, /* LCS Cause */
be_lcs_client, /* LCS Client Type */
be_apdu, /* APDU */
NULL, /* Network Element Identity */
NULL, /* GPS Assistance Data */
NULL, /* Deciphering Keys */
NULL, /* Return Error Request */
NULL, /* Return Error Cause */
NULL, /* Segmentation */
be_gps_assist_data, /* GPS Assistance Data */
be_decihp_keys, /* Deciphering Keys */
be_ret_err_req, /* Return Error Request */
be_ret_err_cause, /* Return Error Cause */
be_seg, /* Segmentation */
be_serv_ho, /* Service Handover */
NULL, /* Source RNC to target RNC transparent information (UMTS) */
NULL, /* Source RNC to target RNC transparent information (cdma2000) */
NULL, /* GERAN Classmark */
NULL, /* GERAN BSC Container */
NULL, /* New BSS to Old BSS Information */
NULL, /* Inter-System Information */
NULL, /* SNA Access Information */
NULL, /* VSTK_RAND Information */
NULL, /* VSTK Information */
NULL, /* Paging Information */
NULL, /* IMEI */
NULL, /* Velocity Estimate */
NULL, /* VGCS Feature Flags */
NULL, /* Talker Priority */
NULL, /* Emergency Set Indication */
NULL, /* Talker Identity */
NULL, /* Cell Identifier List Segment */
NULL, /* SMS to VGCS */
NULL, /* VGCS Talker Mode */
NULL, /* VGCS/VBS Cell Status */
NULL, /* Cell Identifier List Segment for established cells */
NULL, /* Cell Identifier List Segment for cells to be established */
NULL, /* Cell Identifier List Segment for released cells - no user present */
NULL, /* Cell Identifier List Segment for not established cells - no establishment possible */
NULL, /* GANSS Assistance Data */
NULL, /* GANSS Positioning Data */
NULL, /* GANSS Location Type */
NULL, /* Application Data */
NULL, /* Data Identity */
NULL, /* Application Data Information */
NULL, /* MSISDN */
NULL, /* AoIP Transport Layer Address */
NULL, /* Speech Codec List */
NULL, /* Speech Codec */
NULL, /* Call Identifier */
NULL, /* Call Identifier List */
NULL, /* NONE */
};
@ -3264,7 +3450,7 @@ bssmap_cl3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
/* LSA Identifier List 3.2.2.16 BSS-MSC O (note 2) 3+3n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST, "");
/* PADU 3.2.2.68 BSS-MSC O (note 3) 3-n */
/* APDU 3.2.2.68 BSS-MSC O (note 3) 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, "");
/* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */
@ -3617,8 +3803,10 @@ Cell Identifier List Segment
*
Channel Type 3.2.2.11 BSS-MSC M (note 3, 4) 5
Cell Identifier 3.2.2.17 BSS-MSC M 3-10
ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, "");
ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, "");
Chosen Channel 3.2.2.33 BSS-MSC O (note 2) 2
ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, "");
Circuit Identity Code 3.2.2.2 BSS-MSC O (note 5) 3
Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2
*
@ -3793,22 +3981,42 @@ bssmap_conn_oriented(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
/*
* 3.2.1.71 PERFORM LOCATION REQUEST
*/
/*
Location Type 3.2.2.63 M 3-n
Cell Identifier 3.2.2.17 O 5-10
ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, "");
Classmark Information Type 3 3.2.2.20 O 3-14
LCS Client Type 3.2.2.67 C (note 3) 3-n
Chosen Channel 3.2.2.33 O 2
LCS Priority 3.2.2.62 O 3-n
LCS QoS 3.2.2.60 C (note 1) 3-n
GPS Assistance Data 3.2.2.70 C (note 2) 3-n
APDU 3.2.2.68 O 3-n
IMSI 3.2.2.6 O (note 4) 5-10
IMEI 3.2.2.86 O (note 4) 10
GANSS Location Type 3.2.2.97 C 3
GANSS Assistance Data 3.2.2.95 C (note 5) 3-n
*/
static void
bssmap_perf_loc_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
guint curr_len;
curr_offset = offset;
curr_len = len;
/* Location Type 3.2.2.63 M 3-n */
ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LOC_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_LOC_TYPE , "");
/* Cell Identifier 3.2.2.17 O 5-10 */
ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, "");
/* Classmark Information Type 3 3.2.2.20 O 3-14 */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_3, "");
/* LCS Client Type 3.2.2.67 C (note 3) 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CLIENT].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_CLIENT, "");
/* Chosen Channel 3.2.2.33 O 2 */
ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, "");
/* LCS Priority 3.2.2.62 O 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_PRIO, "");
/* LCS QoS 3.2.2.60 C (note 1) 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_QOS].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_QOS, "");
/* GPS Assistance Data 3.2.2.70 C (note 2) 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GPS_ASSIST_DATA].value, BSSAP_PDU_TYPE_BSSMAP, BE_GPS_ASSIST_DATA, "");
/* APDU 3.2.2.68 O 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, "");
/* IMSI 3.2.2.6 O (note 4) 5-10 */
ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, "");
/* IMEI 3.2.2.86 O (note 4) 10 */
/* GANSS Location Type 3.2.2.97 C 3 */
/* GANSS Assistance Data 3.2.2.95 C (note 5) 3-n */
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* 3.2.1.72 PERFORM LOCATION RESPONSE
*/
@ -3829,6 +4037,7 @@ bssmap_perf_loc_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
/* Deciphering Keys 3.2.2.71 C (note 2) 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_DECIPH_KEYS].value, BSSAP_PDU_TYPE_BSSMAP, BE_DECIPH_KEYS, "");
/* LCS Cause 3.2.2.66 C (note 3) 3-n */
ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_CAUSE, "");
/* Velocity Estimate 3.2.2.87 O 3-n */
/* GANSS Positioning Data 3.2.2.96 O 3-n */
@ -3837,9 +4046,22 @@ bssmap_perf_loc_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
/*
* 3.2.1.73 PERFORM LOCATION ABORT
*/
/*
LCS Cause 3.2.2.66 M 3-n
*/
static void
bssmap_perf_loc_abort(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
guint curr_len;
curr_offset = offset;
curr_len = len;
/* LCS Cause 3.2.2.66 M 3-n */
ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_CAUSE, "");
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* 3.2.1.74 CONNECTIONLESS INFORMATION
*/
@ -3977,10 +4199,10 @@ static void (*bssmap_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset,
NULL, /* Suspend */
NULL, /* Resume */
bssmap_conn_oriented, /* Connection Oriented Information */
NULL, /* Perform Location Request */
bssmap_perf_loc_req, /* Perform Location Request */
bssmap_lsa_info, /* LSA Information */
bssmap_perf_loc_res, /* Perform Location Response */
NULL, /* Perform Location Abort */
bssmap_perf_loc_abort, /* Perform Location Abort */
bssmap_common_id, /* Common Id */
bssmap_reset, /* Reset */
NULL /* no associated data */, /* Reset Acknowledge */
@ -4226,6 +4448,11 @@ proto_register_gsm_a_bssmap(void)
FT_UINT8, BASE_DEC, NULL, 0x0,
"Periodicity", HFILL }
},
{ &hf_gsm_a_bssmap_lcs_pri,
{ "Periodicity", "gsm_a_bssmap.lcs_pri",
FT_UINT8, BASE_DEC, VALS(lcs_priority_vals), 0x0,
"Periodicity", HFILL }
},
};
/* Setup protocol subtree array */

View File

@ -169,6 +169,31 @@ static const value_string CMSP_vals[] = {
{ 1, "Network initiated MO CM connection request supported for at least one CM protocol"},
{ 0, NULL }
};
/* A5/4 algorithm supported */
static const value_string A5_7_algorithm_sup_vals[] = {
{ 0, "encryption algorithm A5/7 not available"},
{ 1, "encryption algorithm A5/7 available"},
{ 0, NULL }
};
/* A5/4 algorithm supported */
static const value_string A5_6_algorithm_sup_vals[] = {
{ 0, "encryption algorithm A5/6 not available"},
{ 1, "encryption algorithm A5/6 available"},
{ 0, NULL }
};
/* A5/5 algorithm supported */
static const value_string A5_5_algorithm_sup_vals[] = {
{ 0, "encryption algorithm A5/5 not available"},
{ 1, "encryption algorithm A5/5 available"},
{ 0, NULL }
};
/* A5/4 algorithm supported */
static const value_string A5_4_algorithm_sup_vals[] = {
{ 0, "encryption algorithm A5/4 not available"},
{ 1, "encryption algorithm A5/4 available"},
{ 0, NULL }
};
/* A5/3 algorithm supported (octet 5, bit 2) */
static const value_string A5_3_algorithm_sup_vals[] = {
{ 0, "encryption algorithm A5/3 not available"},
@ -199,6 +224,32 @@ static const value_string oddevenind_vals[] = {
{ 0, NULL }
};
static const value_string true_false_vals[] = {
{ 0, "false" },
{ 1, "true" },
{ 0, NULL}
};
static const value_string gsm_a_sms_vals[] = {
{0, "1/4 timeslot (~144 microseconds)" },
{1, "2/4 timeslot (~288 microseconds)" },
{2, "3/4 timeslot (~433 microseconds)" },
{3, "4/4 timeslot (~577 microseconds)" },
{4, "5/4 timeslot (~721 microseconds)" },
{5, "6/4 timeslot (~865 microseconds)" },
{6, "7/4 timeslot (~1009 microseconds)" },
{7, "8/4 timeslot (~1154 microseconds)" },
{8, "9/4 timeslot (~1298 microseconds)" },
{9, "10/4 timeslot (~1442 microseconds)" },
{10, "11/4 timeslot (~1586 microseconds)" },
{11, "12/4 timeslot (~1730 microseconds)" },
{12, "13/4 timeslot (~1874 microseconds)" },
{13, "14/4 timeslot (~2019 microseconds)" },
{14, "15/4 timeslot (~2163 microseconds)" },
{15, "16/4 timeslot (~2307 microseconds)" },
{ 0, NULL}
};
/* Initialize the protocol and registered fields */
static int proto_a_common = -1;
@ -225,6 +276,10 @@ static int hf_gsm_a_LCS_VA_cap = -1;
static int hf_gsm_a_UCS2_treatment = -1;
static int hf_gsm_a_SoLSA = -1;
static int hf_gsm_a_CMSP = -1;
static int hf_gsm_a_A5_7_algorithm_sup= -1;
static int hf_gsm_a_A5_6_algorithm_sup= -1;
static int hf_gsm_a_A5_5_algorithm_sup= -1;
static int hf_gsm_a_A5_4_algorithm_sup= -1;
static int hf_gsm_a_A5_3_algorithm_sup= -1;
static int hf_gsm_a_A5_2_algorithm_sup = -1;
@ -239,6 +294,22 @@ int hf_gsm_a_skip_ind = -1;
static int hf_gsm_a_b7spare = -1;
int hf_gsm_a_b8spare = -1;
static int hf_gsm_a_spare_bits = -1;
static int hf_gsm_a_multi_bnd_sup_fields = -1;
static int hf_gsm_a_pgsm_supported = -1;
static int hf_gsm_a_egsm_supported = -1;
static int hf_gsm_a_gsm1800_supported = -1;
static int hf_gsm_a_ass_radio_cap1 = -1;
static int hf_gsm_a_ass_radio_cap2 = -1;
static int hf_gsm_a_rsupport = -1;
static int hf_gsm_a_r_capabilities = -1;
static int hf_gsm_a_multislot_capabilities = -1;
static int hf_gsm_a_multislot_class = -1;
static int hf_gsm_a_ucs2_treatment = -1;
static int hf_gsm_a_extended_measurement_cap = -1;
static int hf_gsm_a_ms_measurement_capability = -1;
static int hf_gsm_a_sms_value =-1;
static int hf_gsm_a_sm_value =-1;
static char a_bigbuf[1024];
@ -1199,7 +1270,8 @@ de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
}
/*
* [3] 10.5.1.6
* [3] 10.5.1.6 Mobile Station Classmark 2
* 3GPP TS 24.008 version 7.8.0 Release 7
*/
guint8
de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
@ -1243,7 +1315,7 @@ de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad
/* CM3 (octet 5, bit 8) */
proto_tree_add_item(tree, hf_gsm_a_CM3, tvb, curr_offset, 1, FALSE);
/* spare bit 7 */
proto_tree_add_item(tree, hf_gsm_a_b7spare, tvb, curr_offset, 1, FALSE);
proto_tree_add_item(tree, hf_gsm_a_b7spare, tvb, curr_offset, 1, FALSE);
/* LCS VA capability (LCS value added location request notification capability) (octet 5,bit 6) */
proto_tree_add_item(tree, hf_gsm_a_LCS_VA_cap, tvb, curr_offset, 1, FALSE);
/* UCS2 treatment (octet 5, bit 5) */
@ -1263,6 +1335,191 @@ de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad
return(curr_offset - offset);
}
/*
* [3] 10.5.1.7 Mobile Station Classmark 3
* 3GPP TS 24.008 version 7.8.0 Release 7
*/
guint8
de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guint32 bit_offset; /* Offset in bits */
proto_tree *subtree;
proto_item *item;
guint64 multi_bnd_sup_fields,rsupport, multislotCapability, msMeasurementCapability;
curr_offset = offset;
bit_offset = curr_offset << 3;
/* Spare bit */
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, FALSE);
bit_offset++;
/* Multiband supported field
* { < Multiband supported : { 000 } >
* < A5 bits >
* | < Multiband supported : { 101 | 110 } >
* < A5 bits >
* < Associated Radio Capability 2 : bit(4) >
* < Associated Radio Capability 1 : bit(4) >
* | < Multiband supported : { 001 | 010 | 100 } >
* < A5 bits >
* < spare bit >(4)
* < Associated Radio Capability 1 : bit(4) > }
*/
item = proto_tree_add_bits_ret_val(tree, hf_gsm_a_multi_bnd_sup_fields, tvb, bit_offset, 3, &multi_bnd_sup_fields, FALSE);
subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_MS_CM_3]);
proto_tree_add_bits_item(subtree, hf_gsm_a_gsm1800_supported, tvb, bit_offset, 1, FALSE);
bit_offset++;
proto_tree_add_bits_item(subtree, hf_gsm_a_egsm_supported, tvb, bit_offset, 1, FALSE);
bit_offset++;
proto_tree_add_bits_item(subtree, hf_gsm_a_pgsm_supported, tvb, bit_offset, 1, FALSE);
bit_offset++;
/* < A5 bits > */
proto_tree_add_bits_item(tree, hf_gsm_a_A5_4_algorithm_sup, tvb, bit_offset, 1, FALSE);
bit_offset++;
proto_tree_add_bits_item(tree, hf_gsm_a_A5_5_algorithm_sup, tvb, bit_offset, 1, FALSE);
bit_offset++;
proto_tree_add_bits_item(tree, hf_gsm_a_A5_6_algorithm_sup, tvb, bit_offset, 1, FALSE);
bit_offset++;
proto_tree_add_bits_item(subtree, hf_gsm_a_A5_7_algorithm_sup, tvb, bit_offset, 1, FALSE);
bit_offset++;
switch(multi_bnd_sup_fields){
case 0:
/* A5 bits dissected so done */
break;
/*
* | < Multiband supported : { 001 | 010 | 100 } >
*/
case 1:
case 2:
case 4:
/* < spare bit >(4) */
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 4, FALSE);
bit_offset+=4;
/* < Associated Radio Capability 1 : bit(4) > */
proto_tree_add_bits_item(subtree, hf_gsm_a_ass_radio_cap1, tvb, bit_offset, 4, FALSE);
bit_offset+=4;
break;
/* < Multiband supported : { 101 | 110 } > */
case 5:
/* fall trough */
case 6:
/* < Associated Radio Capability 2 : bit(4) > */
proto_tree_add_bits_item(subtree, hf_gsm_a_ass_radio_cap2, tvb, bit_offset, 4, FALSE);
bit_offset+=4;
/* < Associated Radio Capability 1 : bit(4) > */
proto_tree_add_bits_item(subtree, hf_gsm_a_ass_radio_cap1, tvb, bit_offset, 4, FALSE);
bit_offset+=4;
break;
default:
break;
}
/* Extract R Support */
proto_tree_add_bits_ret_val(tree, hf_gsm_a_rsupport, tvb, bit_offset, 1, &rsupport, FALSE);
bit_offset++;
if(rsupport == 1)
{
/*
* { 0 | 1 < R Support > }
* Extract R Capabilities
*/
proto_tree_add_bits_item(tree, hf_gsm_a_r_capabilities, tvb, bit_offset, 3, FALSE);
bit_offset = bit_offset + 3;
}
/*
* { 0 | 1 < HSCSD Multi Slot Capability > }
* Extract Multislot capability
*/
proto_tree_add_bits_ret_val(tree, hf_gsm_a_multislot_capabilities, tvb, bit_offset, 1, &multislotCapability, FALSE);
bit_offset++;
if(multislotCapability == 1)
{
/* Extract Multislot Class */
proto_tree_add_bits_item(tree, hf_gsm_a_multislot_class, tvb, bit_offset, 5, FALSE);
bit_offset = bit_offset + 5;
}
/* < UCS2 treatment: bit > */
proto_tree_add_bits_item(tree, hf_gsm_a_ucs2_treatment, tvb, bit_offset, 1, FALSE);
bit_offset = bit_offset + 1;
/* < Extended Measurement Capability : bit > */
proto_tree_add_bits_item(tree, hf_gsm_a_extended_measurement_cap, tvb, bit_offset, 1, FALSE);
bit_offset = bit_offset + 1;
/* { 0 | 1 < MS measurement capability > }
* Extract MS Measurement capability
*/
proto_tree_add_bits_ret_val(tree, hf_gsm_a_ms_measurement_capability, tvb, bit_offset, 1, &msMeasurementCapability, FALSE);
bit_offset = bit_offset + 1;
if(msMeasurementCapability == 1)
{
/* Extract SMS Value n/4 */
proto_tree_add_bits_item(tree, hf_gsm_a_sms_value, tvb, bit_offset, 4, FALSE);
bit_offset = bit_offset + 4;
/* Extract SM Value n/4 */
proto_tree_add_bits_item(tree, hf_gsm_a_sm_value, tvb, bit_offset, 4, FALSE);
bit_offset = bit_offset + 4;
}
/*
{ 0 | 1 < MS Positioning Method Capability > }
{ 0 | 1 < ECSD Multi Slot Capability > }
{ 0 | 1 < 8-PSK Struct > }
{ 0 | 1 < GSM 400 Bands Supported : { 01 | 10 | 11 } >
< GSM 400 Associated Radio Capability: bit(4) > }
{ 0 | 1 <GSM 850 Associated Radio Capability : bit(4) > }
{ 0 | 1 <GSM 1900 Associated Radio Capability : bit(4) > }
< UMTS FDD Radio Access Technology Capability : bit >
< UMTS 3.84 Mcps TDD Radio Access Technology Capability : bit >
< CDMA 2000 Radio Access Technology Capability : bit >
{ 0 | 1 < DTM GPRS Multi Slot Class : bit(2) >
< Single Slot DTM : bit >
{0 | 1< DTM EGPRS Multi Slot Class : bit(2) > } }
{ 0 | 1 < Single Band Support > } -- Release 4 starts here:
{ 0 | 1 <GSM 750 Associated Radio Capability : bit(4)>}
< UMTS 1.28 Mcps TDD Radio Access Technology Capability : bit >
< GERAN Feature Package 1 : bit >
{ 0 | 1 < Extended DTM GPRS Multi Slot Class : bit(2) >
< Extended DTM EGPRS Multi Slot Class : bit(2) > }
{ 0 | 1 < High Multislot Capability : bit(2) > } ---Release 5 starts here.
{ 0 | 1 < GERAN Iu Mode Capabilities > } -- "1" also means support of GERAN Iu mode
< GERAN Feature Package 2 : bit >
< GMSK Multislot Power Profile : bit (2) >
< 8-PSK Multislot Power Profile : bit (2) >
{ 0 | 1 < T-GSM 400 Bands Supported : { 01 | 10 | 11 } > -- Release 6 starts here.
< T-GSM 400 Associated Radio Capability: bit(4) > }
{ 0 | 1 < T-GSM 900 Associated Radio Capability: bit(4) > }
< Downlink Advanced Receiver Performance : bit (2)>
< DTM Enhancements Capability : bit >
{ 0 | 1 < DTM GPRS High Multi Slot Class : bit(3) >
< Offset required : bit>
{ 0 | 1 < DTM EGPRS High Multi Slot Class : bit(3) > } }
< Repeated ACCH Capability : bit >
{ 0 | 1 <GSM 710 Associated Radio Capability : bit(4)>} -- Release 7 starts here.
{ 0 | 1 <T-GSM 810 Associated Radio Capability : bit(4)>}
< Ciphering Mode Setting Capability : bit >
0 | 1 < Multislot Capability Reduction for Downlink Dual Carrier : bit (3) > } -- "1" also means that
the mobile station supports dual carrier in the downlink during DTM
< spare bits > ;
*/
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(len);
}
/*
* [3] 10.5.1.8
*/
@ -1495,7 +1752,7 @@ guint8 (*common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
de_mid, /* Mobile Identity */
de_ms_cm_1, /* Mobile Station Classmark 1 */
de_ms_cm_2, /* Mobile Station Classmark 2 */
NULL, /* Mobile Station Classmark 3 */
de_ms_cm_3, /* Mobile Station Classmark 3 */
de_spare_nibble, /* Spare Half Octet */
de_d_gb_call_ref, /* Descriptive group or broadcast call reference */
NULL /* handled inline */, /* Group Cipher Key Number */
@ -1616,6 +1873,26 @@ proto_register_gsm_a_common(void)
FT_UINT8,BASE_DEC, VALS(CMSP_vals), 0x04,
"CMSP: CM Service Prompt", HFILL }
},
{ &hf_gsm_a_A5_7_algorithm_sup,
{ "A5/7 algorithm supported","gsm_a.A5_7_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_7_algorithm_sup_vals), 0x0,
"A5/7 algorithm supported", HFILL }
},
{ &hf_gsm_a_A5_6_algorithm_sup,
{ "A5/6 algorithm supported","gsm_a.A5_6_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_6_algorithm_sup_vals), 0x0,
"A5/6 algorithm supported", HFILL }
},
{ &hf_gsm_a_A5_5_algorithm_sup,
{ "A5/5 algorithm supported","gsm_a.A5_5_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_5_algorithm_sup_vals), 0x0,
"A5/5 algorithm supported", HFILL }
},
{ &hf_gsm_a_A5_4_algorithm_sup,
{ "A5/4 algorithm supported","gsm_a.A5_4_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_4_algorithm_sup_vals), 0x0,
"A5/4 algorithm supported", HFILL }
},
{ &hf_gsm_a_A5_3_algorithm_sup,
{ "A5/3 algorithm supported","gsm_a.A5_3_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_3_algorithm_sup_vals), 0x02,
@ -1676,6 +1953,74 @@ proto_register_gsm_a_common(void)
FT_UINT8,BASE_DEC, NULL, 0x80,
"Spare", HFILL }
},
{ &hf_gsm_a_spare_bits,
{ "Spare bit(s)","gsm_a.spare_bits",
FT_UINT8,BASE_DEC, NULL, 0x0,
"Spare bit(s)", HFILL }
},
{ &hf_gsm_a_multi_bnd_sup_fields,
{ "Multiband supported field","gsm_a.multi_bnd_sup_fields",
FT_UINT8,BASE_DEC, NULL, 0x0,
"Multiband supported field", HFILL }
},
{ &hf_gsm_a_pgsm_supported,
{ "P-GSM Supported", "gsm_a.classmark3.pgsmSupported",
FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"P-GSM Supported", HFILL}
},
{ &hf_gsm_a_egsm_supported,
{ "E-GSM or R-GSM Supported", "gsm_a.classmark3.egsmSupported",
FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"E-GSM or R-GSM Supported", HFILL}
},
{ &hf_gsm_a_gsm1800_supported,
{ "GSM 1800 Supported", "gsm_a.classmark3.gsm1800Supported",
FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"GSM 1800 Supported", HFILL}
},
{ &hf_gsm_a_ass_radio_cap1,
{ "Associated Radio Capability 1", "gsm_a.classmark3.ass_radio_cap1",
FT_UINT8, BASE_DEC, NULL, 0x0,"Associated Radio Capability 1", HFILL}
},
{ &hf_gsm_a_ass_radio_cap2,
{ "Associated Radio Capability 1", "gsm_a.classmark3.ass_radio_cap2",
FT_UINT8, BASE_DEC, NULL, 0x0,"Associated Radio Capability 1", HFILL}
},
{ &hf_gsm_a_rsupport,
{ "R Support", "gsm_a.classmark3.rsupport",
FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"R Support", HFILL}
},
{ &hf_gsm_a_r_capabilities,
{ "R-GSM band Associated Radio Capability", "gsm_a.classmark3.r_capabilities",
FT_UINT8, BASE_DEC, NULL, 0x0,"R-GSM band Associated Radio Capability", HFILL}
},
{ &hf_gsm_a_multislot_capabilities,
{ "HSCSD Multi Slot Capability", "gsm_a.classmark3.multislot_capabilities",
FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"HSCSD Multi Slot Capability", HFILL}
},
{ &hf_gsm_a_multislot_class,
{ "HSCSD Multi Slot Class", "gsm_a.classmark3.multislot_cap",
FT_UINT8, BASE_DEC, NULL, 0x0,"HSCSD Multi Slot Class", HFILL}
},
{ &hf_gsm_a_ucs2_treatment,
{ "UCS2 treatment ","gsm_a.UCS2_treatment",
FT_UINT8,BASE_DEC, VALS(UCS2_treatment_vals), 0x0,
"UCS2 treatment ", HFILL }
},
{ &hf_gsm_a_extended_measurement_cap,
{ "Extended Measurement Capability", "gsm_a.classmark3.ext_meas_cap",
FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"Extended Measurement Capability", HFILL}
},
{ &hf_gsm_a_ms_measurement_capability,
{ "MS measurement capability", "gsm_a.classmark3.ms_measurement_capability",
FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"MS measurement capability", HFILL}
},
{ &hf_gsm_a_sms_value,
{ "SMS_VALUE (Switch-Measure-Switch)", "gsm_a.classmark3.sms_value",
FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,"SMS_VALUE (Switch-Measure-Switch)", HFILL}
},
{ &hf_gsm_a_sm_value,
{ "SM_VALUE (Switch-Measure", "gsm_a.classmark3.sm_value",
FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,"SM_VALUE (Switch-Measure", HFILL}
},
};
/* Setup protocol subtree array */

View File

@ -465,6 +465,7 @@ guint8 de_bearer_cap_uplink(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
guint8 de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
guint8 de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
guint8 de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
guint8 de_sm_apn(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
guint8 de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
@ -611,7 +612,7 @@ typedef enum
BE_LCS_CLIENT, /* LCS Client Type */
BE_APDU, /* APDU */
BE_NE_ID, /* Network Element Identity */
BE_GSP_ASSIST_DATA, /* GPS Assistance Data */
BE_GPS_ASSIST_DATA, /* GPS Assistance Data */
BE_DECIPH_KEYS, /* Deciphering Keys */
BE_RET_ERR_REQ, /* Return Error Request */
BE_RET_ERR_CAUSE, /* Return Error Cause */