summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2015-08-04 14:56:46 -0700
committerGerald Combs <gerald@wireshark.org>2015-08-04 23:22:29 +0000
commitad4ab2a3f1763c236f60aa6020c9ec4baf42f159 (patch)
tree5c2b65482e86f1e9a17f0116b914313b9de61742
parent4d673b24cd6bb7a8b8c1150b65f1f94d464af91b (diff)
downloadwireshark-ad4ab2a3f1763c236f60aa6020c9ec4baf42f159.tar.gz
Convert the GSM A stats to new "generic stat API".
These are largely untested, but the two abis captures on the wiki seem to work OK. The menu item names could also use some work. Patches welcome. Change-Id: I19a5b5fe3476b49d1dd0b684cbb7f367c6ebd4b4 Reviewed-on: https://code.wireshark.org/review/9869 Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Gerald Combs <gerald@wireshark.org>
-rw-r--r--epan/dissectors/packet-gsm_a_common.c363
-rw-r--r--ui/gtk/CMakeLists.txt1
-rw-r--r--ui/gtk/Makefile.common1
-rw-r--r--ui/gtk/gsm_a_stat.c770
-rw-r--r--ui/gtk/main_menubar.c25
5 files changed, 363 insertions, 797 deletions
diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c
index c9835b8d97..c2b0c6c6b7 100644
--- a/epan/dissectors/packet-gsm_a_common.c
+++ b/epan/dissectors/packet-gsm_a_common.c
@@ -33,7 +33,9 @@
#include <epan/to_str.h>
#include <epan/expert.h>
#include <epan/tap.h>
+#include <epan/stat_tap_ui.h>
#include "packet-gsm_a_common.h"
+#include "packet-bssap.h"
#include "packet-gmr1_common.h"
#include "packet-e212.h"
@@ -3564,6 +3566,202 @@ guint16 (*common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo
NULL, /* NONE */
};
+/* TAP STAT INFO */
+typedef enum
+{
+ IEI_COLUMN,
+ MSG_NAME_COLUMN,
+ COUNT_COLUMN,
+} gsm_a_stat_columns;
+
+static stat_tap_table_item gsm_a_stat_fields[] = {
+ {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "IEI", "%d"},
+ {TABLE_ITEM_STRING, TAP_ALIGN_LEFT, "Message Name", "%-25s"},
+ {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "Count", "%d"}
+ };
+
+void gsm_a_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data, const char *table_title, const value_string *msg_strings)
+{
+ int num_fields = sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item);
+ new_stat_tap_table* table;
+ guint i;
+ stat_tap_table_item_type items[sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item)];
+
+ items[IEI_COLUMN].type = TABLE_ITEM_UINT;
+ items[MSG_NAME_COLUMN].type = TABLE_ITEM_STRING;
+ items[COUNT_COLUMN].type = TABLE_ITEM_UINT;
+ items[COUNT_COLUMN].value.uint_value = 0;
+
+ table = new_stat_tap_init_table(table_title, num_fields, 0, NULL, gui_callback, gui_data);
+ new_stat_tap_add_table(new_stat, table);
+
+ /* Add a row for each value type */
+ for (i = 0; i < 256; i++)
+ {
+ const char *ocs = try_val_to_str(i, msg_strings);
+ if (!ocs) ocs = g_strdup_printf("Unknown message %d", i);
+
+ items[IEI_COLUMN].value.uint_value = i;
+ items[MSG_NAME_COLUMN].value.string_value = ocs;
+ new_stat_tap_init_table_row(table, i, num_fields, items);
+ }
+}
+
+void gsm_a_bssmap_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F BSSMAP Statistics", gsm_a_bssmap_msg_strings);
+}
+
+void gsm_a_dtap_mm_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP Mobility Management Statistics", gsm_a_dtap_msg_mm_strings);
+}
+
+void gsm_a_dtap_rr_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP Radio Resource Management Statistics", gsm_a_dtap_msg_rr_strings);
+}
+
+void gsm_a_dtap_cc_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP Call Control Statistics", gsm_a_dtap_msg_cc_strings);
+}
+
+void gsm_a_dtap_gmm_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP GPRS Mobility Management Statistics", gsm_a_dtap_msg_gmm_strings);
+}
+
+void gsm_a_dtap_sm_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP GPRS Session Management Statistics", gsm_a_dtap_msg_sm_strings);
+}
+
+void gsm_a_dtap_sms_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP Short Message Service Statistics", gsm_a_dtap_msg_sms_strings);
+}
+
+void gsm_a_dtap_tp_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP Special Conformance Testing Functions", gsm_a_dtap_msg_tp_strings);
+}
+
+void gsm_a_dtap_ss_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F DTAP Supplementary Services Statistics", gsm_a_dtap_msg_ss_strings);
+}
+
+void gsm_a_sacch_rr_stat_init(new_stat_tap_ui* new_stat, new_stat_tap_gui_init_cb gui_callback, void* gui_data)
+{
+ gsm_a_stat_init(new_stat, gui_callback, gui_data,
+ "GSM A-I/F SACCH Statistics", gsm_a_rr_short_pd_msg_strings);
+}
+
+static gboolean
+gsm_a_stat_packet(void *tapdata, const void *gatr_ptr, guint8 pdu_type, int protocol_disc)
+{
+ new_stat_data_t* stat_data = (new_stat_data_t*)tapdata;
+ const gsm_a_tap_rec_t *gatr = (const gsm_a_tap_rec_t *) gatr_ptr;
+ new_stat_tap_table* table;
+ stat_tap_table_item_type* msg_data;
+ guint i = 0;
+
+ if (gatr->pdu_type != pdu_type) return FALSE;
+ if (pdu_type == BSSAP_PDU_TYPE_DTAP && (int)gatr->protocol_disc != protocol_disc) return FALSE;
+ if (pdu_type == GSM_A_PDU_TYPE_SACCH && gatr->protocol_disc != 0) return FALSE;
+
+ table = g_array_index(stat_data->new_stat_tap_data->tables, new_stat_tap_table*, i);
+ msg_data = new_stat_tap_get_field_data(table, gatr->message_type, COUNT_COLUMN);
+ msg_data->value.uint_value++;
+ new_stat_tap_set_field_data(table, gatr->message_type, COUNT_COLUMN, msg_data);
+
+ return TRUE;
+}
+
+static gboolean
+gsm_a_bssmap_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_BSSMAP, 0);
+}
+
+static gboolean
+gsm_a_dtap_mm_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_MM);
+}
+
+static gboolean
+gsm_a_dtap_rr_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_RR);
+}
+
+static gboolean
+gsm_a_dtap_cc_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_CC);
+}
+
+static gboolean
+gsm_a_dtap_gmm_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_GMM);
+}
+
+static gboolean
+gsm_a_dtap_sms_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_SMS);
+}
+
+static gboolean
+gsm_a_dtap_sm_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_SM);
+}
+
+static gboolean
+gsm_a_dtap_ss_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_SS);
+}
+
+static gboolean
+gsm_a_dtap_tp_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, BSSAP_PDU_TYPE_DTAP, PD_TP);
+}
+
+static gboolean
+gsm_a_sacch_rr_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *gatr_ptr)
+{
+ return gsm_a_stat_packet(tapdata, gatr_ptr, GSM_A_PDU_TYPE_SACCH, 0);
+}
+
+static void
+gsm_a_stat_reset(new_stat_tap_table* table)
+{
+ guint element;
+ stat_tap_table_item_type* item_data;
+
+ for (element = 0; element < table->num_elements; element++)
+ {
+ item_data = new_stat_tap_get_field_data(table, element, COUNT_COLUMN);
+ item_data->value.uint_value = 0;
+ new_stat_tap_set_field_data(table, element, COUNT_COLUMN, item_data);
+ }
+}
+
/* Register the protocol with Wireshark */
void
proto_register_gsm_a_common(void)
@@ -4503,6 +4701,160 @@ proto_register_gsm_a_common(void)
expert_module_t* expert_a_common;
+ static tap_param gsm_a_stat_params[] = {
+ { PARAM_FILTER, "filter", "Filter", NULL, TRUE }
+ };
+
+ static new_stat_tap_ui gsm_a_bssmap_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface BSSMAP",
+ "gsm_a",
+ "gsm_a,bssmap",
+ gsm_a_bssmap_stat_init,
+ gsm_a_bssmap_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_mm_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP Mobility Management",
+ "gsm_a",
+ "gsm_a,dtap_mm",
+ gsm_a_dtap_mm_stat_init,
+ gsm_a_dtap_mm_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_rr_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP Radio Resource Management",
+ "gsm_a",
+ "gsm_a,dtap_rr",
+ gsm_a_dtap_rr_stat_init,
+ gsm_a_dtap_rr_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_cc_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP Call Control",
+ "gsm_a",
+ "gsm_a,dtap_cc",
+ gsm_a_dtap_cc_stat_init,
+ gsm_a_dtap_cc_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_gmm_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP GPRS Mobility Management",
+ "gsm_a",
+ "gsm_a,dtap_gmm",
+ gsm_a_dtap_gmm_stat_init,
+ gsm_a_dtap_gmm_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_sm_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP GPRS Session Management",
+ "gsm_a",
+ "gsm_a,dtap_sm",
+ gsm_a_dtap_sm_stat_init,
+ gsm_a_dtap_sm_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_sms_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP Short Message Service",
+ "gsm_a",
+ "gsm_a,dtap_sms",
+ gsm_a_dtap_sms_stat_init,
+ gsm_a_dtap_sms_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_tp_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP Special Conformance Testing Functions",
+ "gsm_a",
+ "gsm_a,dtap_tp",
+ gsm_a_dtap_tp_stat_init,
+ gsm_a_dtap_tp_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_dtap_ss_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface DTAP Supplementary Services",
+ "gsm_a",
+ "gsm_a,dtap_ss",
+ gsm_a_dtap_ss_stat_init,
+ gsm_a_dtap_ss_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
+ static new_stat_tap_ui gsm_a_sacch_rr_stat_table = {
+ REGISTER_STAT_GROUP_TELEPHONY_GSM,
+ "A-Interface SACCH",
+ "gsm_a",
+ "gsm_a,dtap_sacch",
+ gsm_a_sacch_rr_stat_init,
+ gsm_a_sacch_rr_stat_packet,
+ gsm_a_stat_reset,
+ NULL,
+ NULL,
+ sizeof(gsm_a_stat_fields)/sizeof(stat_tap_table_item), gsm_a_stat_fields,
+ sizeof(gsm_a_stat_params)/sizeof(tap_param), gsm_a_stat_params,
+ NULL
+ };
+
last_offset = NUM_INDIVIDUAL_ELEMS;
ett[0] = &ett_gsm_a_plmn;
@@ -4525,6 +4877,17 @@ proto_register_gsm_a_common(void)
gsm_a_tap = register_tap("gsm_a");
+
+ register_new_stat_tap_ui(&gsm_a_bssmap_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_mm_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_rr_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_cc_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_gmm_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_sms_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_sm_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_ss_stat_table);
+ register_new_stat_tap_ui(&gsm_a_dtap_tp_stat_table);
+ register_new_stat_tap_ui(&gsm_a_sacch_rr_stat_table);
}
/*
diff --git a/ui/gtk/CMakeLists.txt b/ui/gtk/CMakeLists.txt
index a6f3a3be4d..29952eafc3 100644
--- a/ui/gtk/CMakeLists.txt
+++ b/ui/gtk/CMakeLists.txt
@@ -202,7 +202,6 @@ set(WIRESHARK_TAP_SRC
expert_comp_dlg.c
flow_graph.c
funnel_stat.c
- gsm_a_stat.c
gsm_map_stat.c
gsm_map_summary.c
iax2_analysis.c
diff --git a/ui/gtk/Makefile.common b/ui/gtk/Makefile.common
index 25a85192ec..9245cca297 100644
--- a/ui/gtk/Makefile.common
+++ b/ui/gtk/Makefile.common
@@ -153,7 +153,6 @@ WIRESHARK_TAP_SRC = \
export_pdu_dlg.c \
flow_graph.c \
funnel_stat.c \
- gsm_a_stat.c \
gsm_map_stat.c \
gsm_map_summary.c \
iax2_analysis.c \
diff --git a/ui/gtk/gsm_a_stat.c b/ui/gtk/gsm_a_stat.c
deleted file mode 100644
index 75f0b5daa2..0000000000
--- a/ui/gtk/gsm_a_stat.c
+++ /dev/null
@@ -1,770 +0,0 @@
-/* gsm_a_stat.c
- *
- * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
- * In association with Telos Technology Inc.
- *
- * MUCH code modified from service_response_time_table.c.
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/*
- * This TAP provides statistics for the GSM A-Interface:
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <gtk/gtk.h>
-
-#include "epan/packet_info.h"
-#include "epan/value_string.h"
-#include <epan/stat_tap_ui.h>
-#include <epan/tap.h>
-#include <epan/dissectors/packet-bssap.h>
-#include <epan/dissectors/packet-gsm_a_common.h>
-
-#include "ui/simple_dialog.h"
-
-#include "ui/gtk/gui_stat_menu.h"
-#include "ui/gtk/dlg_utils.h"
-#include "ui/gtk/gui_utils.h"
-
-
-void register_tap_listener_gtkgsm_a_stat(void);
-
-enum
-{
- IEI_COLUMN,
- MSG_NAME_COLUMN,
- COUNT_COLUMN,
- N_COLUMN /* The number of columns */
-};
-
-typedef struct _gsm_a_stat_dlg_t {
- GtkWidget *win;
- GtkWidget *scrolled_win;
- GtkWidget *table;
-} gsm_a_stat_dlg_t;
-
-typedef struct _gsm_a_stat_t {
- int bssmap_message_type[0xff];
- int dtap_mm_message_type[0xff];
- int dtap_rr_message_type[0xff];
- int dtap_cc_message_type[0xff];
- int dtap_gmm_message_type[0xff];
- int dtap_sms_message_type[0xff];
- int dtap_sm_message_type[0xff];
- int dtap_ss_message_type[0xff];
- int dtap_tp_message_type[0xff];
- int sacch_rr_message_type[0xff];
-} gsm_a_stat_t;
-
-
-static gsm_a_stat_dlg_t dlg_bssmap;
-static gsm_a_stat_dlg_t dlg_dtap_mm;
-static gsm_a_stat_dlg_t dlg_dtap_rr;
-static gsm_a_stat_dlg_t dlg_dtap_cc;
-static gsm_a_stat_dlg_t dlg_dtap_gmm;
-static gsm_a_stat_dlg_t dlg_dtap_sms;
-static gsm_a_stat_dlg_t dlg_dtap_sm;
-static gsm_a_stat_dlg_t dlg_dtap_ss;
-static gsm_a_stat_dlg_t dlg_dtap_tp;
-static gsm_a_stat_dlg_t dlg_sacch_rr;
-static gsm_a_stat_t gsm_a_stat;
-
-/* Create list */
-static
-GtkWidget* create_list(void)
-{
-
- GtkListStore *list_store;
- GtkWidget *list;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- GtkTreeSortable *sortable;
- GtkTreeView *list_view;
- GtkTreeSelection *selection;
-
- /* Create the store */
- list_store = gtk_list_store_new(N_COLUMN, /* Total number of columns XXX*/
- G_TYPE_UINT, /* IEI */
- G_TYPE_STRING, /* Message Name */
- G_TYPE_UINT); /* Count */
-
- /* Create a view */
- list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
-
- list_view = GTK_TREE_VIEW(list);
- sortable = GTK_TREE_SORTABLE(list_store);
-
- /* Speed up the list display */
- gtk_tree_view_set_fixed_height_mode(list_view, TRUE);
-
- /* Setup the sortable columns */
- gtk_tree_sortable_set_sort_column_id(sortable, IEI_COLUMN, GTK_SORT_ASCENDING);
- gtk_tree_view_set_headers_clickable(list_view, FALSE);
-
- /* The view now holds a reference. We can get rid of our own reference */
- g_object_unref (G_OBJECT (list_store));
-
- /*
- * Create the first column packet, associating the "text" attribute of the
- * cell_renderer to the first column of the model
- */
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("IEI", renderer,
- "text", IEI_COLUMN,
- NULL);
-
- /* gtk_tree_view_column_set_cell_data_func(column, renderer, present_as_hex_func,
- GINT_TO_POINTER(IEI_COLUMN), NULL);
- */
-
- gtk_tree_view_column_set_sort_column_id(column, IEI_COLUMN);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 50);
-
- /* Add the column to the view. */
- gtk_tree_view_append_column (list_view, column);
-
- /* Second column.. Message Name. */
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Message Name", renderer,
- "text", MSG_NAME_COLUMN,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MSG_NAME_COLUMN);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 280);
- gtk_tree_view_append_column (list_view, column);
-
- /* Third column.. Count. */
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Count", renderer,
- "text", COUNT_COLUMN,
- NULL);
-
-
- gtk_tree_view_column_set_sort_column_id(column, COUNT_COLUMN);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 50);
- gtk_tree_view_append_column (list_view, column);
-
- /* Now enable the sorting of each column */
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(list_view), TRUE);
- gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(list_view), TRUE);
-
- /* Setup the selection handler */
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
-
- return list;
-
-}
-static void
-gsm_a_stat_reset(
- void *tapdata)
-{
- gsm_a_stat_t *stat_p = (gsm_a_stat_t *)tapdata;
-
- memset(stat_p, 0, sizeof(gsm_a_stat_t));
-}
-
-
-static gboolean
-gsm_a_stat_packet(
- void *tapdata,
- packet_info *pinfo _U_,
- epan_dissect_t *edt _U_,
- const void *data)
-{
- gsm_a_stat_t *stat_p = (gsm_a_stat_t *)tapdata;
- const gsm_a_tap_rec_t *data_p = (const gsm_a_tap_rec_t *)data;
-
- switch (data_p->pdu_type)
- {
- case BSSAP_PDU_TYPE_BSSMAP:
- stat_p->bssmap_message_type[data_p->message_type]++;
- break;
-
- case BSSAP_PDU_TYPE_DTAP:
- switch (data_p->protocol_disc)
- {
- case PD_CC:
- stat_p->dtap_cc_message_type[data_p->message_type]++;
- break;
- case PD_MM:
- stat_p->dtap_mm_message_type[data_p->message_type]++;
- break;
- case PD_RR:
- stat_p->dtap_rr_message_type[data_p->message_type]++;
- break;
- case PD_GMM:
- stat_p->dtap_gmm_message_type[data_p->message_type]++;
- break;
- case PD_SMS:
- stat_p->dtap_sms_message_type[data_p->message_type]++;
- break;
- case PD_SM:
- stat_p->dtap_sm_message_type[data_p->message_type]++;
- break;
- case PD_SS:
- stat_p->dtap_ss_message_type[data_p->message_type]++;
- break;
- case PD_TP:
- stat_p->dtap_tp_message_type[data_p->message_type]++;
- break;
- default:
- /*
- * unsupported PD
- */
- return(FALSE);
- }
- break;
-
- case GSM_A_PDU_TYPE_SACCH:
- switch (data_p->protocol_disc)
- {
- case 0:
- stat_p->sacch_rr_message_type[data_p->message_type]++;
- break;
- default:
- /* unknown Short PD */
- break;
- }
- break;
-
- default:
- /*
- * unknown PDU type !!!
- */
- return(FALSE);
- }
-
- return(TRUE);
-}
-
-
-static void
-gsm_a_stat_draw_aux(
- gsm_a_stat_dlg_t *dlg_p,
- int *message_count,
- const value_string *msg_strings)
-{
- GtkListStore *list_store;
- GtkTreeIter iter;
- int i;
-
-
- if (dlg_p->win != NULL){
- i = 0;
- list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (dlg_p->table))); /* Get store */
-
- while (msg_strings[i].strptr){
- /* Creates a new row at position. iter will be changed to point to this new row.
- * If position is larger than the number of rows on the list, then the new row will be appended to the list.
- * The row will be filled with the values given to this function.
- * :
- * should generally be preferred when inserting rows in a sorted list store.
- */
- gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT,
- IEI_COLUMN, msg_strings[i].value,
- MSG_NAME_COLUMN, (char *)msg_strings[i].strptr,
- COUNT_COLUMN, message_count[msg_strings[i].value],
- -1);
- i++;
- }
- }
-}
-
-static void
-gsm_a_stat_draw(
- void *tapdata)
-{
- gsm_a_stat_t *stat_p = (gsm_a_stat_t *)tapdata;
-
- if (!tapdata) return;
-
- if (dlg_bssmap.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_bssmap,
- stat_p->bssmap_message_type,
- gsm_a_bssmap_msg_strings);
- }
-
- if (dlg_dtap_mm.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_mm,
- stat_p->dtap_mm_message_type,
- gsm_a_dtap_msg_mm_strings);
- }
-
- if (dlg_dtap_rr.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_rr,
- stat_p->dtap_rr_message_type,
- gsm_a_dtap_msg_rr_strings);
- }
-
- if (dlg_dtap_cc.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_cc,
- stat_p->dtap_cc_message_type,
- gsm_a_dtap_msg_cc_strings);
- }
-
- if (dlg_dtap_gmm.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_gmm,
- stat_p->dtap_gmm_message_type,
- gsm_a_dtap_msg_gmm_strings);
- }
-
- if (dlg_dtap_sms.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_sms,
- stat_p->dtap_sms_message_type,
- gsm_a_dtap_msg_sms_strings);
- }
-
- if (dlg_dtap_sm.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_sm,
- stat_p->dtap_sm_message_type,
- gsm_a_dtap_msg_sm_strings);
- }
-
- if (dlg_dtap_ss.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_ss,
- stat_p->dtap_ss_message_type,
- gsm_a_dtap_msg_ss_strings);
- }
-
- if (dlg_dtap_tp.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_dtap_tp,
- stat_p->dtap_tp_message_type,
- gsm_a_dtap_msg_tp_strings);
- }
-
- if (dlg_sacch_rr.win != NULL)
- {
- gsm_a_stat_draw_aux(&dlg_sacch_rr,
- stat_p->sacch_rr_message_type,
- gsm_a_rr_short_pd_msg_strings);
- }
-}
-
-
-
-static void
-gsm_a_stat_gtk_win_destroy_cb(
- GtkWindow *win _U_,
- gpointer user_data)
-{
- memset((void *) user_data, 0, sizeof(gsm_a_stat_dlg_t));
-}
-
-
-static void
-gsm_a_stat_gtk_win_create(
- gsm_a_stat_dlg_t *dlg_p,
- const char *title)
-{
- GtkWidget *vbox;
- GtkWidget *bt_close;
- GtkWidget *bbox;
-
-
- dlg_p->win = dlg_window_new(title); /* transient_for top_level */
- gtk_window_set_destroy_with_parent (GTK_WINDOW(dlg_p->win), TRUE);
- gtk_window_set_default_size(GTK_WINDOW(dlg_p->win), 490, 500);
-
- vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
- gtk_container_add(GTK_CONTAINER(dlg_p->win), vbox);
- gtk_container_set_border_width(GTK_CONTAINER(vbox), 12);
-
- dlg_p->scrolled_win = scrolled_window_new(NULL, NULL);
- gtk_box_pack_start(GTK_BOX(vbox), dlg_p->scrolled_win, TRUE, TRUE, 0);
-
- dlg_p->table = create_list();
- gtk_container_add(GTK_CONTAINER(dlg_p->scrolled_win), dlg_p->table);
-
- /* Button row. */
- bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL);
- gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
-
- bt_close = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), GTK_STOCK_CLOSE);
- window_set_cancel_button(dlg_p->win, bt_close, window_cancel_button_cb);
-
- g_signal_connect(dlg_p->win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
- g_signal_connect(dlg_p->win, "destroy", G_CALLBACK(gsm_a_stat_gtk_win_destroy_cb), dlg_p);
-
- gtk_widget_show_all(dlg_p->win);
- window_present(dlg_p->win);
-}
-
-void gsm_a_stat_gtk_bssmap_cb(GtkAction *action _U_, gpointer user_data _U_ )
-{
- /* int i;*/
-
-
- /*
- * if the window is already open, bring it to front
- */
- if (dlg_bssmap.win)
- {
- gdk_window_raise(gtk_widget_get_window(dlg_bssmap.win));
- return;
- }
-
- gsm_a_stat_gtk_win_create(&dlg_bssmap, "GSM A-I/F BSSMAP Statistics");
- gsm_a_stat_draw(&gsm_a_stat);
-}
-
-
-static void
-gsm_a_stat_gtk_bssmap_init(
- const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_bssmap_cb(NULL, NULL);
-}
-
-static void
-gsm_a_stat_gtk_dtap_cb(
- GtkAction *action _U_,
- gpointer user_data _U_,
- gsm_a_stat_dlg_t *dlg_dtap_p,
- const char *title,
- const value_string *dtap_msg_strings _U_)
-{
-
- /*
- * if the window is already open, bring it to front
- */
- if (dlg_dtap_p->win)
- {
- gdk_window_raise(gtk_widget_get_window(dlg_dtap_p->win));
- return;
- }
-
- gsm_a_stat_gtk_win_create(dlg_dtap_p, title);
-
- gsm_a_stat_draw(&gsm_a_stat);
-}
-
-void
-gsm_a_stat_gtk_dtap_mm_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_mm,
- "GSM A-I/F DTAP Mobility Management Statistics",
- gsm_a_dtap_msg_mm_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_mm_init(const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_dtap_mm_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_dtap_rr_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_rr,
- "GSM A-I/F DTAP Radio Resource Management Statistics",
- gsm_a_dtap_msg_rr_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_rr_init(const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_dtap_rr_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_dtap_cc_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_cc,
- "GSM A-I/F DTAP Call Control Statistics",
- gsm_a_dtap_msg_cc_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_cc_init(const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_dtap_cc_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_dtap_gmm_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_gmm,
- "GSM A-I/F DTAP GPRS Mobility Management Statistics",
- gsm_a_dtap_msg_gmm_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_gmm_init(const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_dtap_gmm_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_dtap_sms_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_sms,
- "GSM A-I/F DTAP Short Message Service Statistics",
- gsm_a_dtap_msg_sms_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_sms_init(const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_dtap_sms_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_dtap_sm_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_sm,
- "GSM A-I/F DTAP GPRS Session Management Statistics",
- gsm_a_dtap_msg_sm_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_sm_init(const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_dtap_sm_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_dtap_ss_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_ss,
- "GSM A-I/F DTAP Supplementary Services Statistics",
- gsm_a_dtap_msg_ss_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_ss_init(
- const char *opt_arg _U_,
- void *userdata _U_)
-{
- gsm_a_stat_gtk_dtap_ss_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_dtap_tp_cb(GtkAction *action, gpointer user_data )
-{
- gsm_a_stat_gtk_dtap_cb(action, user_data, &dlg_dtap_tp,
- "GSM A-I/F DTAP Special Conformance Testing Functions Statistics",
- gsm_a_dtap_msg_tp_strings);
-}
-
-static void
-gsm_a_stat_gtk_dtap_tp_init(
- const char *opt_arg _U_,
- void *userdata _U_)
-{
- gsm_a_stat_gtk_dtap_tp_cb(NULL, NULL);
-}
-
-void
-gsm_a_stat_gtk_sacch_rr_cb(GtkAction *action _U_, gpointer user_data _U_ )
-{
-
- /*
- * if the window is already open, bring it to front
- */
- if (dlg_sacch_rr.win)
- {
- gdk_window_raise(gtk_widget_get_window(dlg_sacch_rr.win));
- return;
- }
-
- gsm_a_stat_gtk_win_create(&dlg_sacch_rr, "GSM A-I/F SACCH Statistics");
- gsm_a_stat_draw(&gsm_a_stat);
-}
-
-static void
-gsm_a_stat_gtk_sacch_rr_init(
- const char *opt_arg _U_,
- void* userdata _U_)
-{
- gsm_a_stat_gtk_sacch_rr_cb(NULL, NULL);
-}
-
-static stat_tap_ui gsm_a_stat_bssmap_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,bssmap",
- gsm_a_stat_gtk_bssmap_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_mm_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_mm",
- gsm_a_stat_gtk_dtap_mm_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_rr_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_rr",
- gsm_a_stat_gtk_dtap_rr_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_cc_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_cc",
- gsm_a_stat_gtk_dtap_cc_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_gmm_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_gmm",
- gsm_a_stat_gtk_dtap_gmm_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_sms_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_sms",
- gsm_a_stat_gtk_dtap_sms_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_sm_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_sm",
- gsm_a_stat_gtk_dtap_sm_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_ss_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_ss",
- gsm_a_stat_gtk_dtap_ss_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_dtap_tp_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,dtap_tp",
- gsm_a_stat_gtk_dtap_tp_init,
- 0,
- NULL
-};
-
-static stat_tap_ui gsm_a_stat_sacch_rr_ui = {
- REGISTER_STAT_GROUP_GENERIC,
- NULL,
- "gsm_a,sacch",
- gsm_a_stat_gtk_sacch_rr_init,
- 0,
- NULL
-};
-
-void
-register_tap_listener_gtkgsm_a_stat(void)
-{
- GString *err_p;
-
-
- memset((void *) &gsm_a_stat, 0, sizeof(gsm_a_stat_t));
-
- err_p =
- register_tap_listener("gsm_a", &gsm_a_stat, NULL, 0,
- gsm_a_stat_reset,
- gsm_a_stat_packet,
- gsm_a_stat_draw);
-
- if (err_p != NULL)
- {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_p->str);
- g_string_free(err_p, TRUE);
-
- exit(1);
- }
-
- register_stat_tap_ui(&gsm_a_stat_bssmap_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_mm_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_rr_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_cc_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_gmm_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_sms_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_sm_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_ss_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_dtap_tp_ui,NULL);
-
- register_stat_tap_ui(&gsm_a_stat_sacch_rr_ui,NULL);
-}
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local variables:
- * c-basic-offset: 4
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * vi: set shiftwidth=4 tabstop=8 expandtab:
- * :indentSize=4:tabSize=8:noTabs=true:
- */
diff --git a/ui/gtk/main_menubar.c b/ui/gtk/main_menubar.c
index 8b61697328..d3fa216093 100644
--- a/ui/gtk/main_menubar.c
+++ b/ui/gtk/main_menubar.c
@@ -1078,18 +1078,6 @@ static const char *ui_desc_menubar =
" <menu name= 'ANSImenu' action='/Telephony/ANSI'>\n"
" </menu>\n"
" <menu name= 'GSM' action='/Telephony/GSM'>\n"
-" <menuitem name='BSSMAP' action='/Telephony/GSM/BSSMAP'/>\n"
-" <menu name='GSM-DTAP' action='/Telephony/GSM/DTAP'>\n"
-" <menuitem name='CallControl' action='/Telephony/GSM/DTAP/CC'/>\n"
-" <menuitem name='GPRS-MM' action='/Telephony/GSM/DTAP/GMM'/>\n"
-" <menuitem name='GPRS-SM' action='/Telephony/GSM/DTAP/SM'/>\n"
-" <menuitem name='MM' action='/Telephony/GSM/DTAP/MM'/>\n"
-" <menuitem name='RR' action='/Telephony/GSM/DTAP/RR'/>\n"
-" <menuitem name='SMS' action='/Telephony/GSM/DTAP/SMS'/>\n"
-" <menuitem name='TP' action='/Telephony/GSM/DTAP/TP'/>\n"
-" <menuitem name='SS' action='/Telephony/GSM/DTAP/SS'/>\n"
-" </menu>\n"
-" <menuitem name='SACCH' action='/Telephony/GSM/SACCH'/>\n"
" <menuitem name='MAP-OP' action='/Telephony/GSM/MAP-OP'/>\n"
" <menuitem name='MAP-Summary' action='/Telephony/GSM/MAPSummary'/>\n"
" </menu>\n"
@@ -1514,19 +1502,6 @@ static const GtkActionEntry main_menu_bar_entries[] = {
{ "/Telephony/ANSI", NULL, "_ANSI", NULL, NULL, NULL },
{ "/Telephony/GSM", NULL, "_GSM", NULL, NULL, NULL },
- { "/Telephony/GSM/BSSMAP", NULL, "A-Interface BSSMAP", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_bssmap_cb) },
-
- { "/Telephony/GSM/DTAP", NULL, "A-Interface DTAP", NULL, NULL, NULL },
- { "/Telephony/GSM/DTAP/CC", NULL, "Call Control", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_cc_cb) },
- { "/Telephony/GSM/DTAP/GMM", NULL, "GPRS Mobility Management", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_gmm_cb) },
- { "/Telephony/GSM/DTAP/SM", NULL, "GPRS Session Management", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_sm_cb) },
- { "/Telephony/GSM/DTAP/MM", NULL, "Mobility Management", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_mm_cb) },
- { "/Telephony/GSM/DTAP/RR", NULL, "Radio Resource Management",NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_rr_cb) },
- { "/Telephony/GSM/DTAP/SMS", NULL, "Short Message Service", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_sms_cb) },
- { "/Telephony/GSM/DTAP/TP", NULL, "Special Conformance Testing Functions", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_tp_cb) },
- { "/Telephony/GSM/DTAP/SS", NULL, "Supplementary Services", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_dtap_ss_cb) },
-
- { "/Telephony/GSM/SACCH", NULL, "A-Interface SACCH", NULL, NULL, G_CALLBACK(gsm_a_stat_gtk_sacch_rr_cb) },
{ "/Telephony/GSM/MAP-OP", NULL, "MAP Operation", NULL, NULL, G_CALLBACK(gsm_map_stat_gtk_cb) },
{ "/Telephony/GSM/MAPSummary", NULL, "MAP Summary", NULL, NULL, G_CALLBACK(gsm_map_stat_gtk_sum_cb) },