diff options
author | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2008-11-23 21:08:46 +0000 |
---|---|---|
committer | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2008-11-23 21:08:46 +0000 |
commit | ef77b885ef7375f6d4d0a49a4f9852363f4541eb (patch) | |
tree | bb40b2160b8143ee78fb21679cc3b9be647d1a19 | |
parent | 63c2ef4315b6c53f6920dc19bf15877f59792897 (diff) |
Move some of the BSSMAP LE stuff to packet-gsm_bssmap_le.c
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@26832 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r-- | epan/dissectors/packet-gsm_a_bssmap.c | 398 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_common.h | 20 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_bssmap_le.c | 554 |
3 files changed, 562 insertions, 410 deletions
diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c index 960c94a239..6e3047edab 100644 --- a/epan/dissectors/packet-gsm_a_bssmap.c +++ b/epan/dissectors/packet-gsm_a_bssmap.c @@ -331,19 +331,6 @@ static const value_string bssmap_positioning_method_vals[] = { { 0, NULL} }; -static const value_string bssmap_position_method_failure_diagnostic_vals[] = { - { 0, "Congestion" }, - { 1, "insufficientResources" }, - { 2, "insufficientMeasurementData" }, - { 3, "inconsistentMeasurementData" }, - { 4, "locationProcedureNotCompleted" }, - { 5, "locationProcedureNotSupportedByTargetMS" }, - { 6, "qoSNotAttainable" }, - { 7, "positionMethodNotAvailableInNetwork" }, - { 8, "positionMethodNotAvailableInLocaitonArea" }, - { 0, NULL} -}; - static const value_string bssmap_positioning_methods_usage[] = { { 0, "Attempted unsuccessfully due to failure or interruption" }, { 1, "Attempted successfully - results not used to generate location" }, @@ -353,45 +340,6 @@ static const value_string bssmap_positioning_methods_usage[] = { { 0, NULL} }; -/* Client Category definitions */ -static const value_string bssmap_client_category[] = { - { 0, "Value Added Client" }, - { 2, "PLMN Operator" }, - { 3, "Emergency Services"}, - { 4, "Lawful Intercept Services"}, - { 0, NULL} -}; - -/* Client Subtype definitions */ -static const value_string bssmap_client_subtype[] = { - { 0, "unspecified" }, - { 1, "broadcast service" }, - { 2, "O&M" }, - { 3, "anonymous statistics" }, - { 4, "Target MS service support" }, - { 0, NULL} -}; - -static const value_string bssmap_lcs_cause_value[] = { - { 0, "Unspecified" }, - { 1, "System Failure" }, - { 2, "Protocol Error" }, - { 3, "Data missing in position request" }, - { 4, "Unexpected data value in position request" }, - { 5, "Position method failure" }, - { 6, "Target MS Unreachable" }, - { 7, "Location request aborted" }, - { 8, "Facility not supported" }, - { 9, "Inter-BSC Handover Ongoing" }, - { 10, "Intra-BSC Handover Complete" }, - { 11, "Congestion" }, - { 12, "Inter NSE cell change" }, - { 13, "Routing Area Update" }, - { 14, "PTMSI reallocation" }, - { 15, "Suspension of GPRS services" }, - { 0, NULL} -}; - /* Location Information definitions */ static const value_string bssmap_location_information_vals[] = { { 0, "current geographic location" }, @@ -400,42 +348,6 @@ static const value_string bssmap_location_information_vals[] = { { 0, NULL} }; -/* Velocity Requested definitions */ -static const value_string bssmap_velocity_requested_vals[] = { - { 0, "do not report velocity" }, - { 1, "report velocity if available" }, - { 0, NULL} -}; - -/* Vertical Coordinate definitions */ -static const value_string bssmap_vertical_coordinate_indicator_vals[] = { - { 0, "vertical coordinate not requested" }, - { 1, "vertical coordinate is requested" }, - { 0, NULL} -}; - -/* Horizontal Accuracy definitions */ -static const value_string bssmap_horizontal_accuracy_indicator_vals[] = { - { 0, "horizontal accuracy is not specified" }, - { 1, "horizontal accuracy is specified" }, - { 0, NULL} -}; - -/* Vertical Accuracy definitions */ -static const value_string bssmap_vertical_accuracy_indicator_vals[] = { - { 0, "vertical accuracy is not specified" }, - { 1, "vertical accuracy is specified" }, - { 0, NULL} -}; - -/* Response Time definitions */ -static const value_string bssmap_response_time_definitions_vals[] = { - { 0, "Response Time is not specified" }, - { 1, "Low Delay" }, - { 2, "Delay Tolerant" }, - { 3, "reserved" }, - { 0, NULL} -}; /* Initialize the protocol and registered fields */ static int proto_a_bssmap = -1; @@ -496,22 +408,8 @@ static int hf_gsm_a_bssmap_spare = -1; static int hf_gsm_a_bssmap_positioning_data_discriminator = -1; static int hf_gsm_a_bssmap_positioning_method = -1; static int hf_gsm_a_bssmap_positioning_method_usage = -1; -static int hf_gsm_a_bssmap_lcs_cause_value = -1; -static int hf_gsm_a_bssmap_diagnostic_value = -1; -static int hf_gsm_a_bssmap_client_category = -1; -static int hf_gsm_a_bssmap_client_subtype = -1; static int hf_gsm_a_bssmap_location_type_location_information = -1; static int hf_gsm_a_bssmap_location_type_positioning_method = -1; -static int hf_gsm_a_bssmap_velocity_requested = -1; -static int hf_gsm_a_bssmap_vertical_coordinate_indicator = -1; -static int hf_gsm_a_bssmap_horizontal_accuracy_indicator = -1; -static int hf_gsm_a_bssmap_horizontal_accuracy = -1; -static int hf_gsm_a_bssmap_vertical_accuracy = -1; -static int hf_gsm_a_bssmap_vertical_accuracy_indicator = -1; -static int hf_gsm_a_bssmap_response_time_category = -1; -static int hf_gsm_a_bssmap_current_deciphering_key_value = -1; -static int hf_gsm_a_bssmap_next_deciphering_key_value = -1; -static int hf_gsm_a_bssmap_ciphering_key_flag = -1; /* Initialize the subtree pointers */ static gint ett_bssmap_msg = -1; @@ -604,7 +502,7 @@ typedef enum BE_LOC_TYPE, /. Location Type ./ BE_LOC_EST, /. Location Estimate ./ BE_POS_DATA, /. Positioning Data ./ - BE_LCS_CAUSE, /. LCS Cause ./ + BE_LCS_CAUSE, /. 3.2.2.66 LCS Cause ./ BE_LCS_CLIENT, /. LCS Client Type ./ BE_APDU, /. APDU ./ BE_NE_ID, /. Network Element Identity ./ @@ -2672,60 +2570,7 @@ be_conf_evo_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, * (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_) -{ - guint64 verticalCoordIndicator, velocityRequested, horizontalAccuracyIndicator, verticalAccuracyIndicator; - guint16 bitCount; - - bitCount = offset << 3; - - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare, tvb, bitCount, 6, FALSE); - bitCount = bitCount + 6; - - /* Extract Velocity requested element */ - proto_tree_add_bits_ret_val(tree, hf_gsm_a_bssmap_velocity_requested, tvb, bitCount, 1, &velocityRequested, FALSE); - bitCount++; - - /* Extract vertical coordinator element */ - proto_tree_add_bits_ret_val(tree, hf_gsm_a_bssmap_vertical_coordinate_indicator, tvb, bitCount, 1, &verticalCoordIndicator, FALSE); - bitCount++; - - /* Extract horizontal accuracy element */ - proto_tree_add_bits_ret_val(tree, hf_gsm_a_bssmap_horizontal_accuracy_indicator, tvb, bitCount, 1, &horizontalAccuracyIndicator, FALSE); - bitCount++; - - if(horizontalAccuracyIndicator == 1) - { - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_horizontal_accuracy, tvb, bitCount, 7, FALSE); - bitCount = bitCount + 7; - } - else - { - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare, tvb, bitCount, 7, FALSE); - bitCount = bitCount + 7; - } - - /* Extract vertical accuracy element */ - proto_tree_add_bits_ret_val(tree, hf_gsm_a_bssmap_vertical_accuracy_indicator, tvb, bitCount, 1, &verticalAccuracyIndicator, FALSE); - bitCount++; - - if(verticalAccuracyIndicator == 1) - { - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_vertical_accuracy, tvb, bitCount, 7, FALSE); - bitCount = bitCount + 7; - } - else - { - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare, tvb, bitCount, 7, FALSE); - bitCount = bitCount + 7; - } - - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_response_time_category, tvb, bitCount, 2, FALSE); - bitCount = bitCount + 2; - return(len); -} /* * 3.2.2.61 LSA Access Control Suppression */ @@ -2843,51 +2688,15 @@ 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. + * Dissected in packet-gsm_bssap_le.c */ -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; - /* cause value */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_lcs_cause_value, tvb, curr_offset, 1, FALSE); - curr_offset++; - - if (len == 2) - { - /* Diagnostic value (note) */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_diagnostic_value, tvb, curr_offset, 1, FALSE); - curr_offset++; - } - - return(curr_offset - offset); -} /* * 3.2.2.67 LCS Client Type * LCS Client Type element of 3GPP TS 49.031 BSSAP-LE. + * Dissected in packet-gsm_bssap_le.c */ -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; - guint8 bitCount; - - bitCount = offset<<3; - curr_offset = offset; - - /* Extract the client category and add to protocol tree */ - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_client_category, tvb, bitCount, 4, FALSE); - bitCount = bitCount + 4; - - /* Extract the client subtype and add to protocol tree */ - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_client_subtype, tvb, bitCount, 4, FALSE); - bitCount = bitCount + 4; - curr_offset++; - return(curr_offset - offset); -} /* * 3.2.2.68 3GPP TS 48.008 version 6.9.0 Release 6 */ @@ -2981,33 +2790,8 @@ be_gps_assist_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U /* * 3.2.2.71 Deciphering Keys * Deciphering Key element of 3GPP TS 49.031 BSSAP-LE. + * Dissected in packet-gsm_bssmap_le.c */ -static guint8 -be_decihp_keys(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) -{ - gint bit_offset; - - /* Spare bits */ - bit_offset = (offset<<3); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare, tvb, bit_offset, 7, FALSE); - bit_offset += 7; - - /* Extract the Ciphering Key Flag and add to protocol tree */ - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_ciphering_key_flag, tvb, bit_offset, 1, FALSE); - bit_offset++; - offset++; - - /* Extract the Current Deciphering Key Value and add to protocol tree */ - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_current_deciphering_key_value, tvb, bit_offset, 56, FALSE); - bit_offset += 56; - offset += 7; - - /* Extract the Next Deciphering Key Value and add to protocol tree */ - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_next_deciphering_key_value, tvb, bit_offset, 56, FALSE); - offset += 7; - - return(len); -} /* 3.2.2.72 Return Error Request * Return Error Request element of 3GPP TS 49.031 BSSAP-LE. @@ -3672,75 +3456,75 @@ guint8 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui NULL, /* Trace Type */ NULL, /* TriggerID */ NULL, /* Trace Reference */ - NULL, /* TransactionID */ - de_mid, /* Mobile Identity */ - NULL, /* OMCID */ - be_for_ind, /* Forward Indicator */ + NULL, /* TransactionID */ + de_mid, /* Mobile Identity */ + NULL, /* OMCID */ + be_for_ind, /* Forward Indicator */ be_chosen_enc_alg, /* Chosen Encryption Algorithm */ - be_cct_pool, /* Circuit Pool */ - NULL, /* Circuit Pool List */ - NULL, /* Time Indication */ - NULL, /* Resource Situation */ - be_curr_chan_1, /* Current Channel Type 1 */ - be_que_ind, /* Queueing Indicator */ - be_speech_ver, /* Speech Version */ - be_ass_req, /* Assignment Requirement */ - NULL /* no associated data */, /* Talker Flag */ - NULL /* no associated data */, /* Connection Release Requested */ + be_cct_pool, /* Circuit Pool */ + NULL, /* Circuit Pool List */ + NULL, /* Time Indication */ + NULL, /* Resource Situation */ + be_curr_chan_1, /* Current Channel Type 1 */ + be_que_ind, /* Queueing Indicator */ + be_speech_ver, /* Speech Version */ + be_ass_req, /* Assignment Requirement */ + NULL /* no associated data */, /* Talker Flag */ + NULL /* no associated data */, /* Connection Release Requested */ de_d_gb_call_ref, /* Group Call Reference */ - NULL, /* eMLPP Priority */ + NULL, /* eMLPP Priority */ be_conf_evo_ind, /* Configuration Evolution Indication */ - NULL /* no decode required */, /* Old BSS to New BSS Information */ - be_lsa_id, /* LSA Identifier */ - be_lsa_id_list, /* LSA Identifier List */ - be_lsa_info, /* LSA Information */ - be_lcs_qos, /* LCS QoS */ - NULL, /* LSA access control suppression */ - be_lcs_prio, /* LCS Priority */ - be_loc_type, /* Location Type */ - be_loc_est, /* Location Estimate */ - be_pos_data, /* Positioning Data */ - be_lcs_cause, /* LCS Cause */ - be_lcs_client, /* LCS Client Type */ - be_apdu, /* APDU */ - NULL, /* Network Element Identity */ + NULL /* no decode required */, /* Old BSS to New BSS Information */ + be_lsa_id, /* LSA Identifier */ + be_lsa_id_list, /* LSA Identifier List */ + be_lsa_info, /* LSA Information */ + NULL, /* LCS QoS Dissected in packet-gsm_bssmap_le.c*/ + NULL, /* LSA access control suppression */ + be_lcs_prio, /* LCS Priority */ + be_loc_type, /* Location Type */ + be_loc_est, /* Location Estimate */ + be_pos_data, /* Positioning Data */ + NULL, /* 3.2.2.66 LCS Cause Dissected in packet-gsm_bssmap_le.c */ + NULL, /* LCS Client Type Dissected in packet-gsm_bssmap_le.c */ + be_apdu, /* APDU */ + NULL, /* Network Element Identity */ be_gps_assist_data, /* GPS Assistance Data */ - be_decihp_keys, /* Deciphering Keys */ - be_ret_err_req, /* Return Error Request */ + NULL, /* Deciphering Keys (dissected in packet-gsm_bssmap_le)*/ + be_ret_err_req, /* Return Error Request */ be_ret_err_cause, /* Return Error Cause */ - be_seg, /* Segmentation */ - be_serv_ho, /* Service Handover */ + be_seg, /* Segmentation */ + be_serv_ho, /* Service Handover */ be_src_rnc_to_tar_rnc_umts, /* Source RNC to target RNC transparent information (UMTS) */ be_src_rnc_to_tar_rnc_cdma, /* Source RNC to target RNC transparent information (cdma2000) */ - be_geran_cls_m, /* GERAN Classmark */ - NULL, /* GERAN BSC Container */ + be_geran_cls_m, /* GERAN Classmark */ + NULL, /* GERAN BSC Container */ be_new_bss_to_old_bss_inf, /* New BSS to Old BSS Information */ be_inter_sys_inf, /* Inter-System Information */ be_sna_acc_inf, /* SNA Access Information */ - NULL, /* VSTK_RAND Information */ - NULL, /* VSTK Information */ + NULL, /* VSTK_RAND Information */ + NULL, /* VSTK Information */ be_paging_inf, /* Paging Information */ - de_mid, /* 3.2.2.86 IMEI (use same dissector as IMSI)*/ + de_mid, /* 3.2.2.86 IMEI (use same dissector as IMSI)*/ be_vel_est, /* Velocity Estimate */ be_vgcs_feat_flg, /* VGCS Feature Flags */ be_talker_pri, /* Talker Priority */ - NULL, /* no data Emergency Set Indication */ + NULL, /* no data Emergency Set Indication */ be_talker_id, /* Talker Identity */ be_cell_id_list_seg, /* Cell Identifier List Segment */ - be_sms_to_vgcs, /* SMS to VGCS */ + be_sms_to_vgcs, /* SMS to VGCS */ be_vgcs_talker_mode, /* VGCS Talker Mode */ - NULL, /* VGCS/VBS Cell Status */ + NULL, /* VGCS/VBS Cell Status */ be_cell_id_lst_seg_f_est_cells, /* Cell Identifier List Segment for established cells */ be_cell_id_lst_seg_f_cell_tb_est, /* Cell Identifier List Segment for cells to be established */ be_cell_id_lst_seg_f_rel_cell, /* Cell Identifier List Segment for released cells - no user present */ be_cell_id_lst_seg_f_not_est_cell, /* Cell Identifier List Segment for not established cells - no establishment possible */ - be_ganss_ass_dta, /* GANSS Assistance Data */ - be_ganss_pos_dta, /* GANSS Positioning Data */ - be_ganss_loc_type, /* GANSS Location Type */ - NULL, /* Application Data */ - NULL, /* Data Identity */ - be_app_data_inf, /* Application Data Information */ - NULL, /* MSISDN */ + be_ganss_ass_dta, /* GANSS Assistance Data */ + be_ganss_pos_dta, /* GANSS Positioning Data */ + be_ganss_loc_type, /* GANSS Location Type */ + NULL, /* Application Data */ + NULL, /* Data Identity */ + be_app_data_inf, /* Application Data Information */ + NULL, /* MSISDN */ be_aoip_trans_lay_add, /* AoIP Transport Layer Address */ be_speech_codec_lst, /* Speech Codec List */ be_speech_codec, /* Speech Codec */ @@ -5370,7 +5154,7 @@ bssmap_perf_loc_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) /* 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, ""); + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_QOS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, ""); /* 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 */ @@ -5404,9 +5188,9 @@ bssmap_perf_loc_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) /* Positioning Data 3.2.2.65 O 3-n */ ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_POS_DATA].value, BSSAP_PDU_TYPE_BSSMAP, BE_POS_DATA, ""); /* 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, ""); + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_DECIPH_KEYS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_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, ""); + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, ""); /* Velocity Estimate 3.2.2.87 O 3-n */ ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VEL_EST].value, BSSAP_PDU_TYPE_BSSMAP, BE_VEL_EST, ""); /* GANSS Positioning Data 3.2.2.96 O 3-n */ @@ -5428,7 +5212,7 @@ bssmap_perf_loc_abort(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len 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, ""); + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, ""); EXTRANEOUS_DATA_CHECK(curr_len, 0); } @@ -6171,26 +5955,6 @@ proto_register_gsm_a_bssmap(void) FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods_usage), 0x0, "Usage", HFILL } }, - { &hf_gsm_a_bssmap_lcs_cause_value, - { "Cause Value", "gsm_a_bssmap.lcsCauseValue", - FT_UINT8, BASE_HEX, VALS(bssmap_lcs_cause_value), 0x0, - "Cause Value", HFILL} - }, - { &hf_gsm_a_bssmap_diagnostic_value, - { "Diagnostic Value", "gsm_a_bssmap.diagnosticValue", - FT_UINT8, BASE_HEX, VALS(bssmap_position_method_failure_diagnostic_vals), 0x0, - "Diagnostic Value", HFILL} - }, - { &hf_gsm_a_bssmap_client_category, - { "Client Category", "gsm_a_bssmap.lcsClientType.clientCategory", - FT_UINT8, BASE_HEX, VALS(bssmap_client_category), 0x0, - "Client Category", HFILL} - }, - { &hf_gsm_a_bssmap_client_subtype, - { "Client Subtype", "gsm_a_bssmap.lcsClientType.clientSubtype", - FT_UINT8, BASE_HEX, VALS(bssmap_client_subtype), 0x0, - "Client Subtype", HFILL} - }, { &hf_gsm_a_bssmap_location_type_location_information, { "Location Information", "gsm_a_bssmap.locationType.locationInformation", FT_UINT8, BASE_HEX, VALS(bssmap_location_information_vals), 0x0, @@ -6201,56 +5965,6 @@ proto_register_gsm_a_bssmap(void) FT_UINT8, BASE_HEX, VALS(bssmap_positioning_method_vals), 0x0, "Positioning Method", HFILL} }, - { &hf_gsm_a_bssmap_velocity_requested, - { "Velocity Requested", "gsm_a_bssmap.lcsQos.velocityRequested", - FT_UINT8, BASE_HEX, VALS(bssmap_velocity_requested_vals), 0x0, - "Velocity Requested", HFILL} - }, - { &hf_gsm_a_bssmap_vertical_coordinate_indicator, - { "Vertical Coordinate Indicator", "gsm_a_bssmap.lcsQos.verticalCoordinateIndicator", - FT_UINT8, BASE_HEX, VALS(bssmap_vertical_coordinate_indicator_vals), 0x0, - "Vertical Coordinate Indicator", HFILL} - }, - { &hf_gsm_a_bssmap_horizontal_accuracy_indicator, - { "Horizontal Accuracy Indicator", "gsm_a_bssmap.lcsQos.horizontalAccuracyIndicator", - FT_UINT8, BASE_HEX, VALS(bssmap_horizontal_accuracy_indicator_vals), 0x0, - "Horizontal Accuracy Indicator", HFILL} - }, - { &hf_gsm_a_bssmap_horizontal_accuracy, - { "Horizontal Accuracy", "gsm_a_bssmap.lcsQos.horizontalAccuracy", - FT_UINT8, BASE_HEX, NULL, 0x0, - "Horizontal Accuracy", HFILL} - }, - { &hf_gsm_a_bssmap_vertical_accuracy, - { "Vertical Accuracy", "gsm_a_bssmap.lcsQos.verticalAccuracy", - FT_UINT8, BASE_HEX, NULL, 0x0, - "Vertical Accuracy", HFILL} - }, - { &hf_gsm_a_bssmap_vertical_accuracy_indicator, - { "Vertical Accuracy Indicator", "gsm_a_bssmap.lcsQos.verticalAccuracyIndicator", - FT_UINT8, BASE_HEX, VALS(bssmap_vertical_accuracy_indicator_vals), 0x0, - "Vertical Accuracy Indicator", HFILL} - }, - { &hf_gsm_a_bssmap_response_time_category, - { "Response Time Category", "gsm_a_bssmap.lcsQos.responseTimeCategory", - FT_UINT8, BASE_HEX, VALS(bssmap_response_time_definitions_vals), 0x0, - "Response Time Category", HFILL} - }, - { &hf_gsm_a_bssmap_ciphering_key_flag, - { "Ciphering Key Flag", "gsm_a_bssmap.decipheringKeys.flag", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Ciphering Key Flag", HFILL} - }, - { &hf_gsm_a_bssmap_current_deciphering_key_value, - { "Current Deciphering Key Value", "gsm_a_bssmap.decipheringKeys.current", - FT_UINT8, BASE_DEC, NULL, 0x0, "Current Deciphering Key Value", - HFILL} - }, - { &hf_gsm_a_bssmap_next_deciphering_key_value, - { "Next Deciphering Key Value", "gsm_a_bssmap.decipheringKeys.next", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Next Deciphering Key Value", HFILL} - }, }; /* Setup protocol subtree array */ diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h index 42e09eaca0..a223ad86ba 100644 --- a/epan/dissectors/packet-gsm_a_common.h +++ b/epan/dissectors/packet-gsm_a_common.h @@ -636,8 +636,8 @@ typedef enum BE_LOC_TYPE, /* Location Type */ BE_LOC_EST, /* Location Estimate */ BE_POS_DATA, /* Positioning Data */ - BE_LCS_CAUSE, /* LCS Cause */ - BE_LCS_CLIENT, /* LCS Client Type */ + BE_LCS_CAUSE, /* 3.2.2.66 LCS Cause */ + BE_LCS_CLIENT, /* 10.14 LCS Client Type */ BE_APDU, /* APDU */ BE_NE_ID, /* Network Element Identity */ BE_GPS_ASSIST_DATA, /* GPS Assistance Data */ @@ -693,25 +693,25 @@ typedef enum DE_BMAPLE_LCS_PRIO, /* LCS Priority */ DE_BMAPLE_LOC_TYPE, /* Location Type */ DE_BMAPLE_GANSS_LOC_TYPE, /* GANSS Location Type */ - DE_BMAPLE_GEO_LOC, /* Geographic Location */ + DE_BMAPLE_GEO_LOC, /* 10.9 Geographic Location */ DE_BMAPLE_POS_DATA, /* Positioning Data */ DE_BMAPLE_GANSS_POS_DATA, /* GANSS Positioning Data */ DE_BMAPLE_VELOC_DATA, /* Velocity Data */ DE_BMAPLE_LCS_CAUSE, /* LCS Cause */ DE_BMAPLE_LCS_CLIENT_TYPE, /* LCS Client Type */ - DE_BMAPLE_APDU, /* APDU */ + DE_BMAPLE_APDU, /* 10.3 APDU */ DE_BMAPLE_NETWORK_ELEM_ID, /* Network Element Identity */ - DE_BMAPLE_REQ_GPS_ASSIST_D, /* Requested GPS Assistance Data */ + DE_BMAPLE_REQ_GPS_ASSIST_D, /* 10.10 Requested GPS Assistance Data */ DE_BMAPLE_REQ_GNSS_ASSIST_D,/* Requested GANSS Assistance Data */ - DE_BMAPLE_DECIPH_KEYS, /* Deciphering Keys */ + DE_BMAPLE_DECIPH_KEYS, /* 10.8 Deciphering Keys */ DE_BMAPLE_RETURN_ERROR_REQ, /* Return Error Request */ DE_BMAPLE_RETURN_ERROR_CAUSE, /* Return Error Cause */ DE_BMAPLE_SEGMENTATION, /* Segmentation */ DE_BMAPLE_CLASSMARK_TYPE_3, /* Classmark Information Type 3 */ - DE_BMAPLE_CAUSE, /* Cause */ - DE_BMAPLE_CELL_IDENTIFIER, /* Cell Identifier */ - DE_BMAPLE_CHOSEN_CHANNEL, /* Chosen Channel */ - DE_BMAPLE_IMSI, /* IMSI */ + DE_BMAPLE_CAUSE, /* 10.4 Cause */ + DE_BMAPLE_CELL_IDENTIFIER, /* 10.5 Cell Identifier */ + DE_BMAPLE_CHOSEN_CHANNEL, /* 10.6 Chosen Channel */ + DE_BMAPLE_IMSI, /* 10.11 IMSI */ DE_BMAPLE_RES1, /* Reserved */ DE_BMAPLE_RES2, /* Reserved */ DE_BMAPLE_RES3, /* Reserved */ diff --git a/epan/dissectors/packet-gsm_bssmap_le.c b/epan/dissectors/packet-gsm_bssmap_le.c index e79a42e54e..bb1f926c70 100644 --- a/epan/dissectors/packet-gsm_bssmap_le.c +++ b/epan/dissectors/packet-gsm_bssmap_le.c @@ -145,6 +145,43 @@ static const value_string gsm_apdu_protocol_id_strings[] = { { 0, NULL }, }; +/* Velocity Requested definitions */ +static const value_string bssmap_le_velocity_requested_vals[] = { + { 0, "do not report velocity" }, + { 1, "report velocity if available" }, + { 0, NULL} +}; + +/* Vertical Coordinate definitions */ +static const value_string bssmap_le_vertical_coordinate_indicator_vals[] = { + { 0, "vertical coordinate not requested" }, + { 1, "vertical coordinate is requested" }, + { 0, NULL} +}; + +/* Horizontal Accuracy definitions */ +static const value_string bssmap_le_horizontal_accuracy_indicator_vals[] = { + { 0, "horizontal accuracy is not specified" }, + { 1, "horizontal accuracy is specified" }, + { 0, NULL} +}; + +/* Vertical Accuracy definitions */ +static const value_string bssmap_le_vertical_accuracy_indicator_vals[] = { + { 0, "vertical accuracy is not specified" }, + { 1, "vertical accuracy is specified" }, + { 0, NULL} +}; + +/* Response Time definitions */ +static const value_string bssmap_le_response_time_definitions_vals[] = { + { 0, "Response Time is not specified" }, + { 1, "Low Delay" }, + { 2, "Delay Tolerant" }, + { 3, "reserved" }, + { 0, NULL} +}; + /* Initialize the protocol and registered fields */ static int proto_bssmap_le = -1; int hf_gsm_bssmap_le_elem_id = -1; @@ -155,6 +192,26 @@ int hf_gsm_bssmap_le_elem_id = -1; */ static int hf_gsm_bssmap_le_msg_type = -1; static int hf_gsm_bssmap_le_apdu_protocol_id = -1; +static int hf_gsm_bssmap_le_spare = -1; +static int hf_gsm_bssmap_le_ciphering_key_flag = -1; +static int hf_gsm_bssmap_le_current_deciphering_key_value = -1; +static int hf_gsm_bssmap_le_next_deciphering_key_value = -1; +static int hf_gsm_bssmap_le_lcs_cause_value =-1; +static int hf_gsm_bssmap_le_diagnostic_value = -1; +static int hf_gsm_bssmap_le_client_category = -1; +static int hf_gsm_bssmap_le_client_subtype = -1; +static int hf_gsm_bssmap_le_velocity_requested = -1; +static int hf_gsm_bssmap_le_positioning_data_discriminator = -1; +static int hf_gsm_bssmap_le_positioning_method = -1; +static int hf_gsm_bssmap_le_positioning_method_usage = -1; +static int hf_gsm_bssmap_le_location_type_location_information = -1; +static int hf_gsm_bssmap_le_location_type_positioning_method = -1; +static int hf_gsm_bssmap_le_vertical_coordinate_indicator = -1; +static int hf_gsm_bssmap_le_horizontal_accuracy_indicator = -1; +static int hf_gsm_bssmap_le_horizontal_accuracy = -1; +static int hf_gsm_bssmap_le_vertical_accuracy_indicator = -1; +static int hf_gsm_bssmap_le_vertical_accuracy = -1; +static int hf_gsm_bssmap_le_response_time_category = -1; /* Initialize the subtree pointers */ static gint ett_bssmap_le_msg = -1; @@ -167,34 +224,9 @@ static proto_tree *g_tree; #define NUM_GSM_BSSMAP_LE_ELEM (sizeof(gsm_bssmap_le_elem_strings)/sizeof(value_string)) gint ett_gsm_bssmap_le_elem[NUM_GSM_BSSMAP_LE_ELEM]; -/* Dissector for the LCS Capability element */ -static guint8 -be_lcs_capability(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) -{ - /* Extract the LCS Capability element and add to protocol tree */ - proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet"); - return len; -} - -/* Dissector for the Packet Measurement Report element */ -static guint8 -be_packet_meas_rep(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) -{ - /* Extract the Packet Measurement Report element and add to protocol tree */ - proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet"); - - return len; -} - -/* Dissector for the Measured Cell Identity List element */ -static guint8 -be_measured_cell_identity(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) -{ - /* Extract the Measured Cell Identity List element and add to protocol tree */ - proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet"); - - return len; -} +/* + * 10.3 APDU + */ static guint8 de_bmaple_apdu(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) @@ -249,6 +281,336 @@ de_bmaple_apdu(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar return(curr_offset - offset); } +/* + * 10.4 Cause + * coded as the value part of the Cause IE defined in 3GPP TS 48.008 + */ +/* + * 10.5 Cell Identifier + * coded as the value part of the Cell Identifier IE defined in 3GPP TS 48.008 + */ +/* + * 10.6 Chosen Channel + * coded as the value part of the Chosen Channel IE defined in 3GPP TS 48.008 + */ +/* + * 10.7 Classmark Information Type 3 + * coded as the value part of the Classmark Information Type 3 IE defined in 3GPP TS 48.008 + */ +/* + * 10.8 Deciphering Keys + */ +static guint8 +de_bmaple_decihp_keys(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) +{ + gint bit_offset; + + /* Spare bits */ + bit_offset = (offset<<3); + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bit_offset, 7, FALSE); + bit_offset += 7; + + /* Extract the Ciphering Key Flag and add to protocol tree */ + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_ciphering_key_flag, tvb, bit_offset, 1, FALSE); + bit_offset++; + offset++; + + /* Extract the Current Deciphering Key Value and add to protocol tree */ + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_current_deciphering_key_value, tvb, bit_offset, 56, FALSE); + bit_offset += 56; + offset += 7; + + /* Extract the Next Deciphering Key Value and add to protocol tree */ + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_next_deciphering_key_value, tvb, bit_offset, 56, FALSE); + offset += 7; + + return(len); +} +/* + * 10.9 Geographic Location + * contains an octet sequence identical to that for Geographical Information + * defined in 3GPP TS 23.032.. + */ +/* + * 10.10 Requested GPS Assistance Data + */ +/* + * 10.11 IMSI + * coded as the value part of the Mobile Identity IE defined in 3GPP TS 24.008 (NOTE 1) + * NOTE 1: The Type of identity field in the Mobile Identity IE shall + * be ignored by the receiver + */ +/* + * 10.12 (void) + */ +/* + * 10.13 LCS Cause + */ +static const value_string bssmap_le_lcs_cause_values[] = { + { 0, "Unspecified" }, + { 1, "System Failure" }, + { 2, "Protocol Error" }, + { 3, "Data missing in position request" }, + { 4, "Unexpected data value in position request" }, + { 5, "Position method failure" }, + { 6, "Target MS Unreachable" }, + { 7, "Location request aborted" }, + { 8, "Facility not supported" }, + { 9, "Inter-BSC Handover Ongoing" }, + { 10, "Intra-BSC Handover Complete" }, + { 11, "Congestion" }, + { 12, "Inter NSE cell change" }, + { 13, "Routing Area Update" }, + { 14, "PTMSI reallocation" }, + { 15, "Suspension of GPRS services" }, + { 0, NULL} +}; + +static const value_string bssmap_le_position_method_failure_diagnostic_vals[] = { + { 0, "Congestion" }, + { 1, "insufficientResources" }, + { 2, "insufficientMeasurementData" }, + { 3, "inconsistentMeasurementData" }, + { 4, "locationProcedureNotCompleted" }, + { 5, "locationProcedureNotSupportedByTargetMS" }, + { 6, "qoSNotAttainable" }, + { 7, "positionMethodNotAvailableInNetwork" }, + { 8, "positionMethodNotAvailableInLocaitonArea" }, + { 0, NULL} +}; +static guint8 +de_bmaple_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; + + /* cause value */ + proto_tree_add_item(tree, hf_gsm_bssmap_le_lcs_cause_value, tvb, curr_offset, 1, FALSE); + curr_offset++; + + if (len == 2) + { + /* Diagnostic value (note) */ + proto_tree_add_item(tree, hf_gsm_bssmap_le_diagnostic_value, tvb, curr_offset, 1, FALSE); + curr_offset++; + } + + return(curr_offset - offset); +} +/* + * 10.14 LCS Client Type + */ +/* Client Category definitions */ +static const value_string bssmap_le_client_category[] = { + { 0, "Value Added Client" }, + { 2, "PLMN Operator" }, + { 3, "Emergency Services"}, + { 4, "Lawful Intercept Services"}, + { 0, NULL} +}; + +/* Client Subtype definitions */ +static const value_string bssmap_le_client_subtype[] = { + { 0, "unspecified" }, + { 1, "broadcast service" }, + { 2, "O&M" }, + { 3, "anonymous statistics" }, + { 4, "Target MS service support" }, + { 0, NULL} +}; + +static guint8 +de_bmaple_client(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) +{ + guint32 curr_offset; + guint8 bitCount; + + bitCount = offset<<3; + curr_offset = offset; + + /* Extract the client category and add to protocol tree */ + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_client_category, tvb, bitCount, 4, FALSE); + bitCount = bitCount + 4; + + /* Extract the client subtype and add to protocol tree */ + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_client_subtype, tvb, bitCount, 4, FALSE); + bitCount = bitCount + 4; + curr_offset++; + + return(curr_offset - offset); +} +/* + * 10.15 LCS Priority + * coded as the LCS-Priority octet in 3GPP TS 29.002 + */ +/* + * 10.16 LCS QoS + */ +static guint8 +de_bmaple_lcs_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) +{ + guint64 verticalCoordIndicator, velocityRequested, horizontalAccuracyIndicator, verticalAccuracyIndicator; + guint16 bitCount; + + bitCount = offset << 3; + + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 6, FALSE); + bitCount = bitCount + 6; + + /* Extract Velocity requested element */ + proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_velocity_requested, tvb, bitCount, 1, &velocityRequested, FALSE); + bitCount++; + + /* Extract vertical coordinator element */ + proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_vertical_coordinate_indicator, tvb, bitCount, 1, &verticalCoordIndicator, FALSE); + bitCount++; + + /* Extract horizontal accuracy element */ + proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_horizontal_accuracy_indicator, tvb, bitCount, 1, &horizontalAccuracyIndicator, FALSE); + bitCount++; + + if(horizontalAccuracyIndicator == 1) + { + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_horizontal_accuracy, tvb, bitCount, 7, FALSE); + bitCount = bitCount + 7; + } + else + { + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 7, FALSE); + bitCount = bitCount + 7; + } + + /* Extract vertical accuracy element */ + proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_vertical_accuracy_indicator, tvb, bitCount, 1, &verticalAccuracyIndicator, FALSE); + bitCount++; + + if(verticalAccuracyIndicator == 1) + { + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_vertical_accuracy, tvb, bitCount, 7, FALSE); + bitCount = bitCount + 7; + } + else + { + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 7, FALSE); + bitCount = bitCount + 7; + } + + proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_response_time_category, tvb, bitCount, 2, FALSE); + bitCount = bitCount + 2; + + return(len); +} +/* + * 10.17 (void) + */ +/* + * 10.18 Location Type + */ +/* + * 10.19 Network Element Identity + */ +/* + * 10.20 Positioning Data + */ +static guint8 +de_bmaple_pos_dta(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) +{ + tvbuff_t *data_tvb; + guint32 curr_offset; + + curr_offset = offset; + + data_tvb = tvb_new_subset(tvb, curr_offset, len, len); + dissect_geographical_description(data_tvb, g_pinfo, tree); + + return(len); +} +/* + * 10.21 Return Error Request + */ +/* + * 10.22 Return Error Cause + */ +/* + * 10.23 (void) + */ +/* + * 10.24 Segmentation + */ +/* + * 10.25 (void) + */ +/* + * 10.26 LCS Capability + * coded as the value part of the LCS Capability + * information element in 3GPP TS 48.018, not including + * 3GPP TS 48.018 IEI and length indicator + */ +/* Dissector for the LCS Capability element */ +static guint8 +be_lcs_capability(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) +{ + /* Extract the LCS Capability element and add to protocol tree */ + proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet"); + return len; +} + +/* + * 10.27 Packet Measurement Report + * coded as the Packet Measurement Report + * message or the Packet Enhanced Measurement Report message + * starting with the 6-bit MESSAGE_TYPE (see clause 11 in + * 3GPP TS 44.060) and ending with the Non-distribution contents + * (i.e. the RLC/MAC padding bits are not included). The end of the + * message is padded with 0-bits to the nearest octet boundary. + */ +/* Dissector for the Packet Measurement Report element */ +static guint8 +be_packet_meas_rep(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) +{ + /* Extract the Packet Measurement Report element and add to protocol tree */ + proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet"); + + return len; +} + +/* + * 10.28 Cell Identity List + * coded as the value part of the Cell Identity List IE + * defined in 3GPP TS 48.071. + */ +/* Dissector for the Measured Cell Identity List element */ +static guint8 +be_measured_cell_identity(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) +{ + /* Extract the Measured Cell Identity List element and add to protocol tree */ + proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet"); + + return len; +} + +/* + * 10.29 IMEI + * IMEI coded as the value part of the Mobile Identity IE defined in + * 3GPP TS 24.008 (NOTE 1) + * NOTE 1: The Type of identity field in the Mobile Identity IE shall + * be ignored by the receiver. + */ +/* + * 10.30 Velocity Data + * contains an octet sequence identical to that for Description of + * Velocity defined in 3GPP TS 23.032. + */ +/* + * 10.31 Requested GANSS Assistance Data + */ +/* + * 10.32 GANSS Positioning Data + */ +/* + * 10.33 GANSS Location Type + */ #define NUM_GSM_BSSMAP_LE_MSG (sizeof(gsm_bssmap_le_msg_strings)/sizeof(value_string)) @@ -265,29 +627,29 @@ Note this enum must be of the same size as the element decoding list below typedef enum { - DE_BMAPLE_LCSQOS, / LCS QOS / + DE_BMAPLE_LCSQOS, / 10.16 LCS QoS / DE_BMAPLE_LCS_PRIO, / LCS Priority / - DE_BMAPLE_LOC_TYPE, / Location Type / + DE_BMAPLE_LOC_TYPE, / 10.18 Location Type / DE_BMAPLE_GANSS_LOC_TYPE, / GANSS Location Type / - DE_BMAPLE_GEO_LOC, / Geographic Location / - DE_BMAPLE_POS_DATA, / Positioning Data / + DE_BMAPLE_GEO_LOC, / 10.9 Geographic Location / + DE_BMAPLE_POS_DATA, / 10.20 Positioning Data / DE_BMAPLE_GANSS_POS_DATA, / GANSS Positioning Data / DE_BMAPLE_VELOC_DATA, / Velocity Data / - DE_BMAPLE_LCS_CAUSE, / LCS Cause / + DE_BMAPLE_LCS_CAUSE, / 10.13 LCS Cause / DE_BMAPLE_LCS_CLIENT_TYPE, / LCS Client Type / - DE_BMAPLE_APDU, / APDU / + DE_BMAPLE_APDU, / 10.3 APDU / DE_BMAPLE_NETWORK_ELEM_ID, / Network Element Identity / - DE_BMAPLE_REQ_GPS_ASSIST_D, / Requested GPS Assistance Data / + DE_BMAPLE_REQ_GPS_ASSIST_D, / 10.10 Requested GPS Assistance Data / DE_BMAPLE_REQ_GNSS_ASSIST_D,/ Requested GANSS Assistance Data / - DE_BMAPLE_DECIPH_KEYS, / Deciphering Keys / + DE_BMAPLE_DECIPH_KEYS, / 10.8 Deciphering Keys / DE_BMAPLE_RETURN_ERROR_REQ, / Return Error Request / DE_BMAPLE_RETURN_ERROR_CAUSE, / Return Error Cause / DE_BMAPLE_SEGMENTATION, / Segmentation / - DE_BMAPLE_CLASSMARK_TYPE_3, / Classmark Information Type 3 / - DE_BMAPLE_CAUSE, / Cause / - DE_BMAPLE_CELL_IDENTIFIER, / Cell Identifier / - DE_BMAPLE_CHOSEN_CHANNEL, / Chosen Channel / - DE_BMAPLE_IMSI, / IMSI / + DE_BMAPLE_CLASSMARK_TYPE_3, / 10.7 Classmark Information Type 3 / + DE_BMAPLE_CAUSE, / 10.4 Cause / + DE_BMAPLE_CELL_IDENTIFIER, / 10.5 Cell Identifier / + DE_BMAPLE_CHOSEN_CHANNEL, / 10.6 Chosen Channel / + DE_BMAPLE_IMSI, / 10.11 IMSI / DE_BMAPLE_RES1, / Reserved / DE_BMAPLE_RES2, / Reserved / DE_BMAPLE_RES3, / Reserved / @@ -303,29 +665,29 @@ bssmap_le_elem_idx_t; guint8 (*bssmap_le_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = { /* NOTE: The null types below are defined elsewhere. i.e in packet-gsm_a_bssmap.c */ - NULL, /* LCS QoS */ - NULL, /* LCS Priority */ - NULL, /* Location Type */ - be_ganss_loc_type, /* GANSS Location Type */ - NULL, /* Geographic Location */ - NULL, /* Positioning Data */ + de_bmaple_lcs_qos, /* 10.16 LCS QoS */ + NULL, /* LCS Priority */ + NULL, /* 10.18 Location Type */ + be_ganss_loc_type, /* GANSS Location Type */ + NULL, /* 10.9 Geographic Location */ + de_bmaple_pos_dta, /* 10.20 Positioning Data */ be_ganss_pos_dta, /* GANSS Positioning Data */ NULL, /* Velocity Data */ - NULL, /* LCS Cause */ - NULL, /* LCS Client Type */ + de_bmaple_cause, /* 10.13 LCS Cause */ + de_bmaple_client, /* LCS Client Type */ de_bmaple_apdu, /* APDU */ NULL, /* Network Element Identity */ NULL, /* Requested GPS Assitance Data */ be_ganss_ass_dta, /* Requested GANSS Assistance Data */ - NULL, /* Deciphering Keys */ + de_bmaple_decihp_keys, /* 10.8 Deciphering Keys */ NULL, /* Return Error Request */ NULL, /* Return Error Cause */ NULL, /* Segmentation */ - NULL, /* Classmark Information Type 3 */ + NULL, /* 10.7 Classmark Information Type 3 */ NULL, /* Cause */ NULL, /* Cell Identifier */ - NULL, /* Chosen Channel */ - de_mid, /* IMSI */ + NULL, /* 10.6 Chosen Channel */ + de_mid, /* 10.11 IMSI */ NULL, /* Reserved */ NULL, /* Reserved */ NULL, /* Reserved */ @@ -358,13 +720,13 @@ bssmap_le_perf_loc_request(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin /* Classmark Information Type 3 9.1.3 O 3-14 */ ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_3, ""); /* LCS Client Type 9.1.4 C (note 3) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CLIENT].value, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_CLIENT, ""); + ELEM_OPT_TLV(BSSMAP_LE_LCS_CLIENT_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE, ""); /* Chosen Channel 9.1.5 O 2 */ ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, ""); /* LCS Priority 9.1.6 O 3-n */ ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_PRIO].value, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO, ""); /* LCS QoS 9.1.6a C (note 1) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_QOS].value, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_QOS, ""); + ELEM_OPT_TLV(BSSMAP_LE_LCS_QOS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, ""); /* GPS Assistance Data 9.1.7 C (note 2) 3-n */ ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GPS_ASSIST_DATA].value, GSM_A_PDU_TYPE_BSSMAP, BE_GPS_ASSIST_DATA, ""); /* APDU 9.1.8 O 3-n */ @@ -404,11 +766,11 @@ bssmap_le_perf_loc_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l /* Location Estimate 9.2.1 C (note 1) 3-n */ ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LOC_EST].value, BSSAP_PDU_TYPE_BSSMAP, BE_LOC_EST, ""); /* Positioning Data 9.2.2 O 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_POS_DATA].value, BSSAP_PDU_TYPE_BSSMAP, BE_POS_DATA, ""); + ELEM_OPT_TLV(BE_POS_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_POS_DATA, ""); /* Deciphering Keys 9.2.3 C (note 2) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_DECIPH_KEYS].value, BSSAP_PDU_TYPE_BSSMAP, BE_DECIPH_KEYS, ""); + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BSSMAP_LE_DECIPHERING_KEYS].value, GSM_PDU_TYPE_BSSMAP_LE, BSSMAP_LE_DECIPHERING_KEYS, ""); /* LCS Cause 9.2.4 C (note 3) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_CAUSE, ""); + ELEM_OPT_TLV(gsm_bssmap_le_elem_strings[BSSMAP_LE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, BSSMAP_LE_LCS_CAUSE, ""); /* Velocity Estimate 9.2.5 O 3-n */ ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VEL_EST].value, BSSAP_PDU_TYPE_BSSMAP, BE_VEL_EST, ""); /* GANSS Positioning Data 9.2.6 O 3-n */ @@ -518,6 +880,82 @@ proto_register_gsm_bssmap_le(void) FT_UINT8, BASE_DEC, VALS(gsm_apdu_protocol_id_strings), 0x0, "APDU embedded protocol id", HFILL } }, + { &hf_gsm_bssmap_le_spare, + { "Spare", "gsm_bssmap_le.spare", + FT_UINT8, BASE_HEX, NULL, 0x0, + "Spare", HFILL} + }, + { &hf_gsm_bssmap_le_ciphering_key_flag, + { "Ciphering Key Flag", "gsm_bssmap_le.decipheringKeys.flag", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Ciphering Key Flag", HFILL} + }, + { &hf_gsm_bssmap_le_current_deciphering_key_value, + { "Current Deciphering Key Value", "gsm_bssmap_le.decipheringKeys.current", + FT_UINT8, BASE_DEC, NULL, 0x0, "Current Deciphering Key Value", + HFILL} + }, + { &hf_gsm_bssmap_le_next_deciphering_key_value, + { "Next Deciphering Key Value", "gsm_bssmap_le.decipheringKeys.next", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Next Deciphering Key Value", HFILL} + }, + { &hf_gsm_bssmap_le_lcs_cause_value, + { "Cause Value", "gsm_bssmap_le.lcsCauseValue", + FT_UINT8, BASE_HEX, VALS(bssmap_le_lcs_cause_values), 0x0, + "Cause Value", HFILL} + }, + { &hf_gsm_bssmap_le_diagnostic_value, + { "Diagnostic Value", "gsm_bssmap_le.diagnosticValue", + FT_UINT8, BASE_HEX, VALS(bssmap_le_position_method_failure_diagnostic_vals), 0x0, + "Diagnostic Value", HFILL} + }, + { &hf_gsm_bssmap_le_client_category, + { "Client Category", "gsm_bssmap_le.lcsClientType.clientCategory", + FT_UINT8, BASE_HEX, VALS(bssmap_le_client_category), 0x0, + "Client Category", HFILL} + }, + { &hf_gsm_bssmap_le_client_subtype, + { "Client Subtype", "gsm_bssmap_le.lcsClientType.clientSubtype", + FT_UINT8, BASE_HEX, VALS(bssmap_le_client_subtype), 0x0, + "Client Subtype", HFILL} + }, + { &hf_gsm_bssmap_le_velocity_requested, + { "Velocity Requested", "gsm_bssmap_le.lcsQos.velocityRequested", + FT_UINT8, BASE_HEX, VALS(bssmap_le_velocity_requested_vals), 0x0, + "Velocity Requested", HFILL} + }, + { &hf_gsm_bssmap_le_vertical_coordinate_indicator, + { "Vertical Coordinate Indicator", "gsm_bssmap_le.lcsQos.verticalCoordinateIndicator", + FT_UINT8, BASE_HEX, VALS(bssmap_le_vertical_coordinate_indicator_vals), 0x0, + "Vertical Coordinate Indicator", HFILL} + }, + { &hf_gsm_bssmap_le_horizontal_accuracy_indicator, + { "Horizontal Accuracy Indicator", "gsm_bssmap_le.lcsQos.horizontalAccuracyIndicator", + FT_UINT8, BASE_HEX, VALS(bssmap_le_horizontal_accuracy_indicator_vals), 0x0, + "Horizontal Accuracy Indicator", HFILL} + }, + { &hf_gsm_bssmap_le_horizontal_accuracy, + { "Horizontal Accuracy", "gsm_bssmap_le.lcsQos.horizontalAccuracy", + FT_UINT8, BASE_HEX, NULL, 0x0, + "Horizontal Accuracy", HFILL} + }, + { &hf_gsm_bssmap_le_vertical_accuracy, + { "Vertical Accuracy", "gsm_bssmap_le.lcsQos.verticalAccuracy", + FT_UINT8, BASE_HEX, NULL, 0x0, + "Vertical Accuracy", HFILL} + }, + { &hf_gsm_bssmap_le_vertical_accuracy_indicator, + { "Vertical Accuracy Indicator", "gsm_bssmap_le.lcsQos.verticalAccuracyIndicator", + FT_UINT8, BASE_HEX, VALS(bssmap_le_vertical_accuracy_indicator_vals), 0x0, + "Vertical Accuracy Indicator", HFILL} + }, + { &hf_gsm_bssmap_le_response_time_category, + { "Response Time Category", "gsm_bssmap_le.lcsQos.responseTimeCategory", + FT_UINT8, BASE_HEX, VALS(bssmap_le_response_time_definitions_vals), 0x0, + "Response Time Category", HFILL} + }, + }; /* Setup protocol subtree array */ #define NUM_INDIVIDUAL_ELEMS 1 |