mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-11-02 21:13:44 +00:00
Add a short README mentioning the svn version they apply to, how to rebase them in the future, and what they do. The renaming is done to add a hint on in which order to apply them. The abis_oml patch has been updated to some value_string changes in epan, all patches now add the new files to the CMakeLists.txt of epan as well.
2493 lines
84 KiB
Diff
2493 lines
84 KiB
Diff
From c6c10dab54b9a667308004ab5c72dd08f52e4fc1 Mon Sep 17 00:00:00 2001
|
|
From: Holger Hans Peter Freyther <zecke@selfish.org>
|
|
Date: Tue, 11 Jan 2011 15:08:42 +0100
|
|
Subject: [PATCH 1/4] abis_oml
|
|
|
|
Add the GSM ABIS OML dissector from OpenBSC
|
|
---
|
|
epan/CMakeLists.txt | 1 +
|
|
epan/dissectors/Makefile.common | 1 +
|
|
epan/dissectors/packet-gsm_abis_oml.c | 1608 +++++++++++++++++++++++++++++++++
|
|
epan/dissectors/packet-gsm_abis_oml.h | 830 +++++++++++++++++
|
|
4 files changed, 2440 insertions(+), 0 deletions(-)
|
|
create mode 100644 epan/dissectors/packet-gsm_abis_oml.c
|
|
create mode 100644 epan/dissectors/packet-gsm_abis_oml.h
|
|
|
|
diff --git a/epan/CMakeLists.txt b/epan/CMakeLists.txt
|
|
index a22406c..0b09335 100644
|
|
--- a/epan/CMakeLists.txt
|
|
+++ b/epan/CMakeLists.txt
|
|
@@ -586,6 +586,7 @@ set(DISSECTOR_SRC
|
|
dissectors/packet-gsm_a_gm.c
|
|
dissectors/packet-gsm_a_rp.c
|
|
dissectors/packet-gsm_a_rr.c
|
|
+ dissectors/packet-gsm_abis_oml.c
|
|
dissectors/packet-gsm_ipa.c
|
|
dissectors/packet-gsm_bsslap.c
|
|
dissectors/packet-gsm_bssmap_le.c
|
|
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common
|
|
index c496b36..7ce83b6 100644
|
|
--- a/epan/dissectors/Makefile.common
|
|
+++ b/epan/dissectors/Makefile.common
|
|
@@ -496,6 +496,7 @@ DISSECTOR_SRC = \
|
|
packet-gsm_a_gm.c \
|
|
packet-gsm_a_rp.c \
|
|
packet-gsm_a_rr.c \
|
|
+ packet-gsm_abis_oml.c \
|
|
packet-gsm_bsslap.c \
|
|
packet-gsm_bssmap_le.c \
|
|
packet-gsm_ipa.c \
|
|
diff --git a/epan/dissectors/packet-gsm_abis_oml.c b/epan/dissectors/packet-gsm_abis_oml.c
|
|
new file mode 100644
|
|
index 0000000..f0b69e7
|
|
--- /dev/null
|
|
+++ b/epan/dissectors/packet-gsm_abis_oml.c
|
|
@@ -0,0 +1,1608 @@
|
|
+/* packet-abis_oml.c
|
|
+ * Routines for packet dissection of GSM A-bis over IP (3GPP TS 12.21)
|
|
+ * Copyright 2009-2010 by Harald Welte <laforge@gnumonks.org>
|
|
+ * Copyright 2009 by Holger Hans Peter Freyther <zecke@selfish.org>
|
|
+ * based on A-bis OML code in OpenBSC
|
|
+ *
|
|
+ * $Id$
|
|
+ *
|
|
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
+ */
|
|
+
|
|
+#ifdef HAVE_CONFIG_H
|
|
+# include "config.h"
|
|
+#endif
|
|
+
|
|
+#include <glib.h>
|
|
+
|
|
+#include <epan/packet.h>
|
|
+#include <epan/emem.h>
|
|
+#include <epan/lapd_sapi.h>
|
|
+#include <epan/prefs.h>
|
|
+
|
|
+#include "packet-gsm_abis_oml.h"
|
|
+#include "packet-gsm_a_common.h"
|
|
+
|
|
+#include <stdio.h>
|
|
+
|
|
+/* initialize the protocol and registered fields */
|
|
+static int proto_abis_oml = -1;
|
|
+
|
|
+/* OML header */
|
|
+static int hf_oml_msg_disc = -1;
|
|
+static int hf_oml_placement = -1;
|
|
+static int hf_oml_sequence = -1;
|
|
+static int hf_oml_length = -1;
|
|
+/* FOM header */
|
|
+static int hf_oml_fom_msgtype = -1;
|
|
+static int hf_oml_fom_objclass = -1;
|
|
+static int hf_oml_fom_inst_bts = -1;
|
|
+static int hf_oml_fom_inst_trx = -1;
|
|
+static int hf_oml_fom_inst_ts = -1;
|
|
+static int hf_oml_fom_attr_tag = -1;
|
|
+static int hf_oml_fom_attr_len = -1;
|
|
+static int hf_oml_fom_attr_val = -1;
|
|
+/* FOM attributes */
|
|
+static int hf_attr_adm_state = -1;
|
|
+static int hf_attr_arfcn = -1;
|
|
+static int hf_attr_oper_state = -1;
|
|
+static int hf_attr_avail_state = -1;
|
|
+static int hf_attr_event_type = -1;
|
|
+static int hf_attr_severity = -1;
|
|
+static int hf_attr_bcch_arfcn = -1;
|
|
+static int hf_attr_bsic = -1;
|
|
+static int hf_attr_test_no = -1;
|
|
+static int hf_attr_tsc = -1;
|
|
+static int hf_attr_tei = -1;
|
|
+static int hf_attr_ach_btsp = -1;
|
|
+static int hf_attr_ach_tslot = -1;
|
|
+static int hf_attr_ach_sslot = -1;
|
|
+static int hf_attr_gsm_time = -1;
|
|
+static int hf_attr_chan_comb = -1;
|
|
+static int hf_attr_hsn = -1;
|
|
+static int hf_attr_maio = -1;
|
|
+/* Ipaccess */
|
|
+static int hf_oml_ipa_tres_attr_tag = -1;
|
|
+static int hf_oml_ipa_tres_attr_len = -1;
|
|
+static int hf_attr_ipa_test_res = -1;
|
|
+static int hf_attr_ipa_tr_rxlev = -1;
|
|
+static int hf_attr_ipa_tr_b_rxlev = -1;
|
|
+static int hf_attr_ipa_tr_arfcn = -1;
|
|
+static int hf_attr_ipa_tr_f_qual = -1;
|
|
+static int hf_attr_ipa_tr_f_err = -1;
|
|
+static int hf_attr_ipa_tr_rxqual = -1;
|
|
+static int hf_attr_ipa_tr_frame_offs = -1;
|
|
+static int hf_attr_ipa_tr_framenr_offs = -1;
|
|
+static int hf_attr_ipa_tr_bsic = -1;
|
|
+static int hf_attr_ipa_tr_cell_id = -1;
|
|
+static int hf_attr_ipa_tr_si2 = -1;
|
|
+static int hf_attr_ipa_tr_si2bis = -1;
|
|
+static int hf_attr_ipa_tr_si2ter = -1;
|
|
+static int hf_attr_ipa_tr_chan_desc = -1;
|
|
+static int hf_attr_ipa_rsl_ip = -1;
|
|
+static int hf_attr_ipa_rsl_port = -1;
|
|
+static int hf_attr_ipa_prim_oml_ip = -1;
|
|
+static int hf_attr_ipa_prim_oml_port = -1;
|
|
+static int hf_attr_ipa_location_name = -1;
|
|
+static int hf_attr_ipa_unit_id = -1;
|
|
+static int hf_attr_ipa_unit_name = -1;
|
|
+static int hf_attr_ipa_nv_flags = -1;
|
|
+static int hf_attr_ipa_nv_mask = -1;
|
|
+static int hf_attr_ipa_nsl_sport = -1;
|
|
+static int hf_attr_ipa_nsl_daddr = -1;
|
|
+static int hf_attr_ipa_nsl_dport = -1;
|
|
+static int hf_attr_ipa_nsei = -1;
|
|
+static int hf_attr_ipa_nsvci = -1;
|
|
+static int hf_attr_ipa_bvci = -1;
|
|
+static int hf_attr_ipa_rac = -1;
|
|
+
|
|
+/* initialize the subtree pointers */
|
|
+static int ett_oml = -1;
|
|
+static int ett_oml_fom = -1;
|
|
+static int ett_oml_fom_att = -1;
|
|
+
|
|
+/* Decode things as nanoBTS traces */
|
|
+static gboolean global_oml_use_nano_bts = TRUE;
|
|
+
|
|
+static proto_tree *top_tree;
|
|
+
|
|
+/* TS 12.21 Chapter 8.1 / TS 08.59 */
|
|
+static const value_string oml_msg_disc_vals[] = {
|
|
+ { ABIS_OM_MDISC_FOM, "Formatted O&M" },
|
|
+ { ABIS_OM_MDISC_MMI, "MMI Transfer" },
|
|
+ { ABIS_OM_MDISC_TRAU, "TRAU O&M" },
|
|
+ { ABIS_OM_MDISC_MANUF, "Manufacturer specific" },
|
|
+};
|
|
+
|
|
+/* TS 12.21 Chapter 8.1.1 */
|
|
+static const value_string oml_placement_vals[] = {
|
|
+ { ABIS_OM_PLACEMENT_ONLY, "Only" },
|
|
+ { ABIS_OM_PLACEMENT_FIRST, "First" },
|
|
+ { ABIS_OM_PLACEMENT_MIDDLE, "Middle" },
|
|
+ { ABIS_OM_PLACEMENT_LAST, "Last" },
|
|
+};
|
|
+
|
|
+/* Standard Message Types as per TS 12.21 Chapter 9.2 */
|
|
+static const value_string _oml_fom_msgtype_vals[] = {
|
|
+ { NM_MT_LOAD_INIT, "Software Load Init" },
|
|
+ { NM_MT_LOAD_INIT_ACK, "Software Load Init ACK" },
|
|
+ { NM_MT_LOAD_INIT_NACK, "Software Load Init NACK" },
|
|
+ { NM_MT_LOAD_SEG, "Software Load Segment" },
|
|
+ { NM_MT_LOAD_SEG_ACK, "Software Load Segment ACK" },
|
|
+ { NM_MT_LOAD_END, "Software Load End" },
|
|
+ { NM_MT_LOAD_END_ACK, "Software Load End ACK" },
|
|
+ { NM_MT_LOAD_END_NACK, "Software Load End NACK" },
|
|
+ { NM_MT_SW_ACT_REQ, "Software Activate Request" },
|
|
+ { NM_MT_SW_ACT_REQ_ACK, "Software Activate Request ACK" },
|
|
+ { NM_MT_SW_ACT_REQ_NACK, "Software Activate Request NACK" },
|
|
+ { NM_MT_ACTIVATE_SW, "Activate Software" },
|
|
+ { NM_MT_ACTIVATE_SW_ACK, "Activate Software ACK" },
|
|
+ { NM_MT_ACTIVATE_SW_NACK, "Activate Software NACK" },
|
|
+ { NM_MT_SW_ACTIVATED_REP, "Software Activated Report" },
|
|
+ { NM_MT_ESTABLISH_TEI, "Establish TEI" },
|
|
+ { NM_MT_ESTABLISH_TEI_ACK, "Establish TEI ACK" },
|
|
+ { NM_MT_ESTABLISH_TEI_NACK, "Establish TEI NACK" },
|
|
+ { NM_MT_CONN_TERR_SIGN, "Connect Terrestrial Signalling" },
|
|
+ { NM_MT_CONN_TERR_SIGN_ACK, "Connect Terrestrial Signalling ACK" },
|
|
+ { NM_MT_CONN_TERR_SIGN_NACK, "Connect Terrestrial Signalling NACK" },
|
|
+ { NM_MT_DISC_TERR_SIGN, "Disconnect Terrestrial Signalling" },
|
|
+ { NM_MT_DISC_TERR_SIGN_ACK, "Disconnect Terrestrial Signalling ACK" },
|
|
+ { NM_MT_DISC_TERR_SIGN_NACK, "Disconnect Terrestrial Signalling NACK" },
|
|
+ { NM_MT_CONN_TERR_TRAF, "Connect Terrestrial Traffic" },
|
|
+ { NM_MT_CONN_TERR_TRAF_ACK, "Connect Terrestrial Traffic ACK" },
|
|
+ { NM_MT_CONN_TERR_TRAF_NACK, "Connect Terrestrial Traffic NACK" },
|
|
+ { NM_MT_DISC_TERR_TRAF, "Disconnect Terrestrial Traffic" },
|
|
+ { NM_MT_DISC_TERR_TRAF_ACK, "Disconnect Terrestrial Traffic ACK" },
|
|
+ { NM_MT_DISC_TERR_TRAF_NACK, "Disconnect Terrestrial Traffic NACK" },
|
|
+ { NM_MT_CONN_MDROP_LINK, "Connect Multi-Drop Link" },
|
|
+ { NM_MT_CONN_MDROP_LINK_ACK, "Connect Multi-Drop Link ACK" },
|
|
+ { NM_MT_CONN_MDROP_LINK_NACK, "Connect Multi-Drop Link NACK" },
|
|
+ { NM_MT_DISC_MDROP_LINK, "Disconnect Multi-Drop Link" },
|
|
+ { NM_MT_DISC_MDROP_LINK_ACK, "Disconnect Multi-Drop Link ACK" },
|
|
+ { NM_MT_DISC_MDROP_LINK_NACK, "Disconnect Multi-Drop Link NACK" },
|
|
+ { NM_MT_SET_BTS_ATTR, "Set BTS Attributes" },
|
|
+ { NM_MT_SET_BTS_ATTR_ACK, "Set BTS Attributes ACK" },
|
|
+ { NM_MT_SET_BTS_ATTR_NACK, "Set BTS Attributes NACK" },
|
|
+ { NM_MT_SET_RADIO_ATTR, "Set Radio Carrier Attributes" },
|
|
+ { NM_MT_SET_RADIO_ATTR_ACK, "Set Radio Carrier Attributes ACK" },
|
|
+ { NM_MT_SET_RADIO_ATTR_NACK, "Set Radio Carrier Attributes NACK" },
|
|
+ { NM_MT_SET_CHAN_ATTR, "Set Channel Attributes" },
|
|
+ { NM_MT_SET_CHAN_ATTR_ACK, "Set Channel Attributes ACK" },
|
|
+ { NM_MT_SET_CHAN_ATTR_NACK, "Set Channel Attributes NACK" },
|
|
+ { NM_MT_PERF_TEST, "Perform Test" },
|
|
+ { NM_MT_PERF_TEST_ACK, "Perform Test ACK" },
|
|
+ { NM_MT_PERF_TEST_NACK, "Perform Test NACK" },
|
|
+ { NM_MT_TEST_REP, "Test Report" },
|
|
+ { NM_MT_SEND_TEST_REP, "Send Test Report" },
|
|
+ { NM_MT_SEND_TEST_REP_ACK, "Send Test Report ACK" },
|
|
+ { NM_MT_SEND_TEST_REP_NACK, "Send Test Report NACK" },
|
|
+ { NM_MT_STOP_TEST, "Stop Test" },
|
|
+ { NM_MT_STOP_TEST_ACK, "Stop Test ACK" },
|
|
+ { NM_MT_STOP_TEST_NACK, "Stop Test NACK" },
|
|
+ { NM_MT_STATECHG_EVENT_REP, "State Changed Event Report" },
|
|
+ { NM_MT_FAILURE_EVENT_REP, "Failure Event Report" },
|
|
+ { NM_MT_STOP_EVENT_REP, "Stop Sending Event Reports" },
|
|
+ { NM_MT_STOP_EVENT_REP_ACK, "Stop Sending Event Reports ACK" },
|
|
+ { NM_MT_STOP_EVENT_REP_NACK, "Stop Sending Event Reports NACK" },
|
|
+ { NM_MT_REST_EVENT_REP, "Restart Sending Event Reports" },
|
|
+ { NM_MT_REST_EVENT_REP_ACK, "Restart Sending Event Reports ACK" },
|
|
+ { NM_MT_REST_EVENT_REP_NACK, "Restart Sending Event Reports NACK" },
|
|
+ { NM_MT_CHG_ADM_STATE, "Change Administrative State" },
|
|
+ { NM_MT_CHG_ADM_STATE_ACK, "Change Administrative State ACK" },
|
|
+ { NM_MT_CHG_ADM_STATE_NACK, "Change Administrative State NACK" },
|
|
+ { NM_MT_CHG_ADM_STATE_REQ, "Change Administrative State Request" },
|
|
+ { NM_MT_CHG_ADM_STATE_REQ_ACK, "Change Administrative State Request ACK" },
|
|
+ { NM_MT_CHG_ADM_STATE_REQ_NACK, "Change Administrative State Request NACK" },
|
|
+ { NM_MT_REP_OUTST_ALARMS, "Report Outstanding Alarms" },
|
|
+ { NM_MT_REP_OUTST_ALARMS_ACK, "Report Outstanding Alarms ACK" },
|
|
+ { NM_MT_REP_OUTST_ALARMS_NACK, "Report Outstanding Alarms NACK" },
|
|
+ { NM_MT_CHANGEOVER, "Changeover" },
|
|
+ { NM_MT_CHANGEOVER_ACK, "Changeover ACK" },
|
|
+ { NM_MT_CHANGEOVER_NACK, "Changeover NACK" },
|
|
+ { NM_MT_OPSTART, "Opstart" },
|
|
+ { NM_MT_OPSTART_ACK, "Opstart ACK" },
|
|
+ { NM_MT_OPSTART_NACK, "Opstart NACK" },
|
|
+ { NM_MT_REINIT, "Reinitialize" },
|
|
+ { NM_MT_REINIT_ACK, "Reinitialize ACK" },
|
|
+ { NM_MT_REINIT_NACK, "Reinitialize NACK" },
|
|
+ { NM_MT_SET_SITE_OUT, "Set Site Outputs" },
|
|
+ { NM_MT_SET_SITE_OUT_ACK, "Set Site Outputs ACK" },
|
|
+ { NM_MT_SET_SITE_OUT_NACK, "Set Site Outputs NACK" },
|
|
+ { NM_MT_CHG_HW_CONF, "Change HW Configuration" },
|
|
+ { NM_MT_CHG_HW_CONF_ACK, "Change HW Configuration ACK" },
|
|
+ { NM_MT_CHG_HW_CONF_NACK, "Change HW Configuration NACK" },
|
|
+ { NM_MT_MEAS_RES_REQ, "Measurement Result Request" },
|
|
+ { NM_MT_MEAS_RES_RESP, "Measurement Result Response" },
|
|
+ { NM_MT_STOP_MEAS, "Stop Measurement" },
|
|
+ { NM_MT_START_MEAS, "Start Measurement" },
|
|
+ { NM_MT_GET_ATTR, "Get Attributes" },
|
|
+ { NM_MT_GET_ATTR_RESP, "Get Attributes Response" },
|
|
+ { NM_MT_GET_ATTR_NACK, "Get Attributes NACK" },
|
|
+ { NM_MT_SET_ALARM_THRES, "Set Alarm Threshold" },
|
|
+ { NM_MT_SET_ALARM_THRES_ACK, "Set Alarm Threshold ACK" },
|
|
+ { NM_MT_SET_ALARM_THRES_NACK, "Set Alarm Threshold NACK" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* proprietary ip.access message types, not in the standard */
|
|
+static const value_string _oml_fom_msgtype_vals_ipa[] = {
|
|
+ { NM_MT_IPACC_RESTART, "IPA Restart" },
|
|
+ { NM_MT_IPACC_RESTART_ACK, "IPA Restart ACK" },
|
|
+ { NM_MT_IPACC_RSL_CONNECT, "IPA RSL Connect" },
|
|
+ { NM_MT_IPACC_RSL_CONNECT_ACK, "IPA RSL Connect ACK" },
|
|
+ { NM_MT_IPACC_RSL_CONNECT_NACK, "IPA RSL Connect NACK" },
|
|
+ { NM_MT_IPACC_RSL_DISCONNECT, "IPA RSL Disconnect" },
|
|
+ { NM_MT_IPACC_RSL_DISCONNECT_ACK, "IPA RSL Disconnect ACK" },
|
|
+ { NM_MT_IPACC_RSL_DISCONNECT_NACK, "IPA RSL Disconnect NACK" },
|
|
+ { NM_MT_IPACC_CONN_TRAF, "IPA Connect Traffic" },
|
|
+ { NM_MT_IPACC_CONN_TRAF_ACK, "IPA Connect Traffic ACK" },
|
|
+ { NM_MT_IPACC_CONN_TRAF_NACK, "IPA Connect Traffic NACK" },
|
|
+ { NM_MT_IPACC_DISC_TRAF, "IPA Disconnect Traffic" },
|
|
+ { NM_MT_IPACC_DISC_TRAF_ACK, "IPA Disconnect Traffic ACK" },
|
|
+ { NM_MT_IPACC_DISC_TRAF_NACK, "IPA Disconnect Traffic NACK" },
|
|
+ { NM_MT_IPACC_DEF_BOOT_SW, "IPA Default Boot Software" },
|
|
+ { NM_MT_IPACC_DEF_BOOT_SW_ACK, "IPA Default Boot Software ACK" },
|
|
+ { NM_MT_IPACC_DEF_BOOT_SW_NACK, "IPA Default Boot Software NACK" },
|
|
+ { NM_MT_IPACC_SET_NVATTR, "IPA Set NVRAM Attributes" },
|
|
+ { NM_MT_IPACC_SET_NVATTR_ACK, "IPA Set NVRAM Attributes ACK" },
|
|
+ { NM_MT_IPACC_SET_NVATTR_NACK, "IPA Set NVRAM Attributes NACK" },
|
|
+ { NM_MT_IPACC_GET_NVATTR, "IPA Get NVRAM Attributes" },
|
|
+ { NM_MT_IPACC_GET_NVATTR_ACK, "IPA Get NVRAM Attributes ACK" },
|
|
+ { NM_MT_IPACC_GET_NVATTR_NACK, "IPA Get NVRAM Attributes NACK" },
|
|
+ { NM_MT_IPACC_SET_ATTR, "IPA Set Attributes" },
|
|
+ { NM_MT_IPACC_SET_ATTR_ACK, "IPA Set Attributes ACK" },
|
|
+ { NM_MT_IPACC_SET_ATTR_NACK, "IPA Set Attributes NACK" },
|
|
+ { NM_MT_IPACC_ATTR_CHG_EVT, "IPA Attribute Change Event" },
|
|
+ { NM_MT_IPACC_SW_DEACT, "IPA Software Deactivate" },
|
|
+ { NM_MT_IPACC_SW_DEACT_ACK, "IPA Software Deactivate ACK" },
|
|
+ { NM_MT_IPACC_SW_DEACT_NACK, "IPA Software Deactivate NACK" },
|
|
+ { NM_MT_IPACC_MEAS_RES_REQ_NACK,"IPA Measurement Result Request NACK" },
|
|
+ { NM_MT_IPACC_START_MEAS_NACK, "IPA Start Measurement NACK" },
|
|
+ { NM_MT_IPACC_STOP_MEAS_NACK, "IPA Stop Measurement NACK" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* proprietary Siemens message types, not in the standard */
|
|
+static const value_string _oml_fom_msgtype_vals_bs11[] = {
|
|
+ { NM_MT_BS11_RESET_RESOURCE, "SIE Reset Resource" },
|
|
+ { NM_MT_BS11_BEGIN_DB_TX, "SIE Begin Database Transmission" },
|
|
+ { NM_MT_BS11_BEGIN_DB_TX_ACK, "SIE Begin Database Transmission ACK" },
|
|
+ { NM_MT_BS11_BEGIN_DB_TX_NACK, "SIE Begin Database Transmission NACK" },
|
|
+ { NM_MT_BS11_END_DB_TX, "SIE End Database Transmission" },
|
|
+ { NM_MT_BS11_END_DB_TX_ACK, "SIE End Database Transmission ACK" },
|
|
+ { NM_MT_BS11_END_DB_TX_NACK, "SIE End Database Transmission NACK" },
|
|
+ { NM_MT_BS11_CREATE_OBJ, "SIE Create Object" },
|
|
+ { NM_MT_BS11_CREATE_OBJ_ACK, "SIE Create Object ACK" },
|
|
+ { NM_MT_BS11_CREATE_OBJ_NACK, "SIE Create Object NACK" },
|
|
+ { NM_MT_BS11_DELETE_OBJ, "SIE Delete Object" },
|
|
+ { NM_MT_BS11_DELETE_OBJ_ACK, "SIE Delete Object ACK" },
|
|
+ { NM_MT_BS11_DELETE_OBJ_NACK, "SIE Delete Object NACK" },
|
|
+ { NM_MT_BS11_SET_ATTR, "SIE Set Attribute" },
|
|
+ { NM_MT_BS11_SET_ATTR_ACK, "SIE Set Attribute ACK" },
|
|
+ { NM_MT_BS11_SET_ATTR_NACK, "SIE Set Attribute NACK" },
|
|
+ { NM_MT_BS11_GET_STATE, "SIE Get State" },
|
|
+ { NM_MT_BS11_GET_STATE_ACK, "SIE Get State ACK" },
|
|
+ { NM_MT_BS11_LMT_LOGON, "SIE LMT Logon" },
|
|
+ { NM_MT_BS11_LMT_LOGON_ACK, "SIE LMT Logon ACK" },
|
|
+ { NM_MT_BS11_RESTART, "SIE Restart" },
|
|
+ { NM_MT_BS11_RESTART_ACK, "SIE Restart ACK" },
|
|
+ { NM_MT_BS11_DISCONNECT, "SIE Disconnect BTS" },
|
|
+ { NM_MT_BS11_DISCONNECT_ACK, "SIE Disconnect BTS ACK" },
|
|
+ { NM_MT_BS11_LMT_LOGOFF, "SIE LMT Logoff" },
|
|
+ { NM_MT_BS11_LMT_LOGOFF_ACK, "SIE LMT Logoff ACK" },
|
|
+ { NM_MT_BS11_RECONNECT, "SIE Reconnect BTS" },
|
|
+ { NM_MT_BS11_RECONNECT_ACK, "SIE Reconnect BTS ACK" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* initialize with the standard message types only */
|
|
+static value_string_ext oml_fom_msgtype_vse = VALUE_STRING_EXT_INIT(_oml_fom_msgtype_vals);
|
|
+
|
|
+/* TS 12.21 Section 9.2: Object Class */
|
|
+static const value_string oml_fom_objclass_vals[] = {
|
|
+ { NM_OC_SITE_MANAGER, "BTS Site Manager" },
|
|
+ { NM_OC_BTS, "BTS" },
|
|
+ { NM_OC_RADIO_CARRIER, "Radio Carrier" },
|
|
+ { NM_OC_CHANNEL, "Radio Channel" },
|
|
+ { NM_OC_BASEB_TRANSC, "Baseband Transceiver" },
|
|
+
|
|
+ /* proprietary, vendor specific */
|
|
+ { NM_OC_BS11_ADJC, "SIE Adjacend Channel" },
|
|
+ { NM_OC_BS11_HANDOVER, "SIE Handover" },
|
|
+ { NM_OC_BS11_PWR_CTRL, "SIE Power Control" },
|
|
+ { NM_OC_BS11_BTSE, "SIE BTSE" },
|
|
+ { NM_OC_BS11_RACK, "SIE Rack" },
|
|
+ { NM_OC_BS11, "SIE SiemensHW" },
|
|
+ { NM_OC_BS11_TEST, "SIE Test" },
|
|
+ { NM_OC_BS11_ENVABTSE, "SIE EnvaBTSE" },
|
|
+ { NM_OC_BS11_BPORT, "SIE BPort" },
|
|
+
|
|
+ { NM_OC_GPRS_NSE, "GPRS NSE" },
|
|
+ { NM_OC_GPRS_CELL, "GPRS Cell" },
|
|
+ { NM_OC_GPRS_NSVC0, "GPRS NSVC0" },
|
|
+ { NM_OC_GPRS_NSVC1, "GPRS NSVC1" },
|
|
+
|
|
+ { NM_OC_NULL, "NULL" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* TS 12.21 Section 9.4: Attributes */
|
|
+static const value_string _oml_fom_attr_vals[] = {
|
|
+ { NM_ATT_ABIS_CHANNEL, "A-bis Channel" },
|
|
+ { NM_ATT_ADD_INFO, "Additional Information" },
|
|
+ { NM_ATT_ADD_TEXT, "Additional Text" },
|
|
+ { NM_ATT_ADM_STATE, "Administrative State" },
|
|
+ { NM_ATT_ARFCN_LIST, "ARFCN List" },
|
|
+ { NM_ATT_AUTON_REPORT, "Autonomously Report" },
|
|
+ { NM_ATT_AVAIL_STATUS, "Availability Status" },
|
|
+ { NM_ATT_BCCH_ARFCN, "BCCH ARFCN" },
|
|
+ { NM_ATT_BSIC, "BSIC" },
|
|
+ { NM_ATT_BTS_AIR_TIMER, "BTS Air Timer" },
|
|
+ { NM_ATT_CCCH_L_I_P, "CCCH Load Indication Period" },
|
|
+ { NM_ATT_CCCH_L_T, "CCCH Load Threshold" },
|
|
+ { NM_ATT_CHAN_COMB, "Channel Combination" },
|
|
+ { NM_ATT_CONN_FAIL_CRIT, "Connection Fail Criterion" },
|
|
+ { NM_ATT_DEST, "Destination" },
|
|
+ { NM_ATT_EVENT_TYPE, "Event Type" },
|
|
+ { NM_ATT_FILE_ID, "File ID" },
|
|
+ { NM_ATT_FILE_VERSION, "File Version" },
|
|
+ { NM_ATT_GSM_TIME, "GSM Time" },
|
|
+ { NM_ATT_HSN, "HSN" },
|
|
+ { NM_ATT_HW_CONFIG, "HW Configuration" },
|
|
+ { NM_ATT_HW_DESC, "HW Description" },
|
|
+ { NM_ATT_INTAVE_PARAM, "Intave Parameter" },
|
|
+ { NM_ATT_INTERF_BOUND, "Interference Boundaries" },
|
|
+ { NM_ATT_LIST_REQ_ATTR, "List of required Attributes" },
|
|
+ { NM_ATT_MAIO, "MAIO" },
|
|
+ { NM_ATT_MANUF_STATE, "Manufacturer Dependent State" },
|
|
+ { NM_ATT_MANUF_THRESH, "Manufacturer Dependent Thresholds" },
|
|
+ { NM_ATT_MANUF_ID, "Manufacturer Id" },
|
|
+ { NM_ATT_MAX_TA, "Maximum Timing Advance" },
|
|
+ { NM_ATT_MDROP_LINK, "Multi-drop BSC Link" },
|
|
+ { NM_ATT_MDROP_NEXT, "Multi-drop next BTS Link" },
|
|
+ { NM_ATT_NACK_CAUSES, "NACK Causes" },
|
|
+ { NM_ATT_NY1, "Ny1" },
|
|
+ { NM_ATT_OPER_STATE, "Operational State" },
|
|
+ { NM_ATT_OVERL_PERIOD, "Overload Period" },
|
|
+ { NM_ATT_PHYS_CONF, "Physical Config" },
|
|
+ { NM_ATT_POWER_CLASS, "Power Class" },
|
|
+ { NM_ATT_POWER_THRESH, "Power Output Thresholds" },
|
|
+ { NM_ATT_PROB_CAUSE, "Probable Cause" },
|
|
+ { NM_ATT_RACH_B_THRESH, "RACH Busy Threshold" },
|
|
+ { NM_ATT_LDAVG_SLOTS, "RACH Load Averaging Slots" },
|
|
+ { NM_ATT_RAD_SUBC, "Radio Sub Channel" },
|
|
+ { NM_ATT_RF_MAXPOWR_R, "RF Max Power Reduction" },
|
|
+ { NM_ATT_SITE_INPUTS, "Site Inputs" },
|
|
+ { NM_ATT_SITE_OUTPUTS, "Site Outputs" },
|
|
+ { NM_ATT_SOURCE, "Source" },
|
|
+ { NM_ATT_SPEC_PROB, "Specific Problems" },
|
|
+ { NM_ATT_START_TIME, "Starting Time" },
|
|
+ { NM_ATT_T200, "T200" },
|
|
+ { NM_ATT_TEI, "TEI" },
|
|
+ { NM_ATT_TEST_DUR, "Test Duration" },
|
|
+ { NM_ATT_TEST_NO, "Test No" },
|
|
+ { NM_ATT_TEST_REPORT, "Test Report Info" },
|
|
+ { NM_ATT_VSWR_THRESH, "VSWR Thresholds " },
|
|
+ { NM_ATT_WINDOW_SIZE, "Window Size" },
|
|
+ { NM_ATT_BS11_RSSI_OFFS, "SIE RSSI Offset" },
|
|
+ { NM_ATT_BS11_TXPWR, "SIE TX Power" },
|
|
+ { NM_ATT_BS11_DIVERSITY, "SIE Diversity" },
|
|
+ { NM_ATT_TSC, "Training Sequence Code" },
|
|
+ { NM_ATT_SW_CONFIG, "SW Configuration" },
|
|
+ { NM_ATT_SW_DESCR, "SW Description" },
|
|
+ { NM_ATT_SEVERITY, "Perceived Severity" },
|
|
+ { NM_ATT_GET_ARI, "Get ARI" },
|
|
+ { NM_ATT_HW_CONF_CHG, "HW Configuration Change" },
|
|
+ { NM_ATT_OUTST_ALARM, "Outstanding Alarm" },
|
|
+ { NM_ATT_FILE_DATA, "File Data" },
|
|
+ { NM_ATT_MEAS_RES, "Measurement Result" },
|
|
+ { NM_ATT_MEAS_TYPE, "Measurement Type" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+static value_string_ext oml_fom_attr_vse = VALUE_STRING_EXT_INIT(_oml_fom_attr_vals);
|
|
+
|
|
+/* proprietary Siemens attributes, not in the standard */
|
|
+static const value_string oml_fom_attr_vals_bs11[] = {
|
|
+ { NM_ATT_BS11_OM_LAPD_REL_TIMER,"SIE OML LAPD Release Timer" },
|
|
+ { NM_ATT_BS11_RF_RES_IND_PER, "SIE RF Resource Indication Period" },
|
|
+ { NM_ATT_BS11_RX_LEV_MIN_CELL, "SIE RxLevel Min Cell" },
|
|
+ { NM_ATT_BS11_ABIS_EXT_TIME, "SIE A-bis external time" },
|
|
+ { NM_ATT_BS11_TIMER_HO_REQUEST, "SIE Timer Handover Request" },
|
|
+ { NM_ATT_BS11_TIMER_NCELL, "SIE Timer nCell" },
|
|
+ { NM_ATT_BS11_TSYNC, "SIE Timer Tsync" },
|
|
+ { NM_ATT_BS11_TTRAU, "SIE Timer Ttrau" },
|
|
+ { NM_ATT_BS11_EMRG_CFG_MEMBER, "SIE Emergency Config Member" },
|
|
+ { NM_ATT_BS11_TRX_AREA, "SIE TRX Area" },
|
|
+ { NM_ATT_BS11_BCCH_RECONF, "SIE BCCH Reconfiguration" },
|
|
+ { NM_ATT_BS11_BIT_ERR_THESH, "SIE Bit Error Threshold" },
|
|
+ { NM_ATT_BS11_BOOT_SW_VERS, "SIE Boot Software Version" },
|
|
+ { NM_ATT_BS11_CCLK_ACCURACY, "SIE CCLK Accuracy" },
|
|
+ { NM_ATT_BS11_CCLK_TYPE, "SIE CCLK Type" },
|
|
+ { NM_ATT_BS11_INP_IMPEDANCE, "SIE Input Impedance" },
|
|
+ { NM_ATT_BS11_L1_PROT_TYPE, "SIE L1 Protocol Type" },
|
|
+ { NM_ATT_BS11_LINE_CFG, "SIE Line Configuration" },
|
|
+ { NM_ATT_BS11_LI_PORT_1, "SIE Line Interface Port 1" },
|
|
+ { NM_ATT_BS11_LI_PORT_2, "SIE Line Interface Port 2" },
|
|
+ { NM_ATT_BS11_L1_REM_ALM_TYPE, "SIE L1 Remote Alarm Type" },
|
|
+ { NM_ATT_BS11_SW_LOAD_INTENDED, "SIE Software Load Intended" },
|
|
+ { NM_ATT_BS11_SW_LOAD_SAFETY, "SIE Software Load Safety" },
|
|
+ { NM_ATT_BS11_SW_LOAD_STORED, "SIE Software Load Stored" },
|
|
+ { NM_ATT_BS11_VENDOR_NAME, "SIE Vendor Name" },
|
|
+ { NM_ATT_BS11_HOPPING_MODE, "SIE Hopping Mode" },
|
|
+ { NM_ATT_BS11_LMT_LOGON_SESSION,"SIE LMT Logon Session" },
|
|
+ { NM_ATT_BS11_LMT_LOGIN_TIME, "SIE LMT Login Time" },
|
|
+ { NM_ATT_BS11_LMT_USER_ACC_LEV, "SIE LMT User Account Level" },
|
|
+ { NM_ATT_BS11_LMT_USER_NAME, "SIE LMT User Account Name" },
|
|
+ { NM_ATT_BS11_L1_CONTROL_TS, "SIE L1 Control TS" },
|
|
+ { NM_ATT_BS11_RADIO_MEAS_GRAN, "SIE Radio Measurement Granularity" },
|
|
+ { NM_ATT_BS11_RADIO_MEAS_REP, "SIE Rdadio Measurement Report" },
|
|
+ { NM_ATT_BS11_SH_LAPD_INT_TIMER,"SIE LAPD Internal Timer" },
|
|
+ { NM_ATT_BS11_BTS_STATE, "SIE BTS State" },
|
|
+ { NM_ATT_BS11_E1_STATE, "SIE E1 State" },
|
|
+ { NM_ATT_BS11_PLL, "SIE PLL" },
|
|
+ { NM_ATT_BS11_RX_OFFSET, "SIE Rx Offset" },
|
|
+ { NM_ATT_BS11_ANT_TYPE, "SIE Antenna Type" },
|
|
+ { NM_ATT_BS11_PLL_MODE, "SIE PLL Mode" },
|
|
+ { NM_ATT_BS11_PASSWORD, "SIE Password" },
|
|
+ { NM_ATT_BS11_ESN_FW_CODE_NO, "SIE ESN FW Code Number" },
|
|
+ { NM_ATT_BS11_ESN_HW_CODE_NO, "SIE ESN HW Code Number" },
|
|
+ { NM_ATT_BS11_ESN_PCB_SERIAL, "SIE ESN PCB Serial Number" },
|
|
+ { NM_ATT_BS11_EXCESSIVE_DISTANCE, "SIE Excessive Distance" },
|
|
+ { NM_ATT_BS11_ALL_TEST_CATG, "SIE All Test Categories" },
|
|
+ { NM_ATT_BS11_BTSLS_HOPPING, "SIE BTS LS Hopping" },
|
|
+ { NM_ATT_BS11_CELL_ALLOC_NR, "SIE Cell Allocation Number" },
|
|
+ { NM_ATT_BS11_CELL_GLOBAL_ID, "SIE Cell Global ID" },
|
|
+ { NM_ATT_BS11_ENA_INTERF_CLASS, "SIE Enable Interference Class" },
|
|
+ { NM_ATT_BS11_ENA_INT_INTEC_HANDO, "SIE Enable Int Intec Handover" },
|
|
+ { NM_ATT_BS11_ENA_INT_INTRC_HANDO, "SIE Enable Int Intrc Handover" },
|
|
+ { NM_ATT_BS11_ENA_MS_PWR_CTRL, "SIE Enable MS Power Control" },
|
|
+ { NM_ATT_BS11_ENA_PWR_BDGT_HO, "SIE Enable Power Budget HO" },
|
|
+ { NM_ATT_BS11_ENA_RXLEV_HO, "SIE Enable RxLevel HO" },
|
|
+ { NM_ATT_BS11_ENA_RXQUAL_HO, "SIE Enable RxQual HO" },
|
|
+ { NM_ATT_BS11_FACCH_QUAL, "SIE FACCH Quality" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* proprietary ip.access attributes, not in the standard */
|
|
+static const value_string oml_fom_attr_vals_ipa[] = {
|
|
+ { NM_ATT_IPACC_DST_IP, "IPA Destination IP Address" },
|
|
+ { NM_ATT_IPACC_DST_IP_PORT, "IPA Destionation IP Port" },
|
|
+ { NM_ATT_IPACC_SSRC, "IPA RTP SSRC" },
|
|
+ { NM_ATT_IPACC_RTP_PAYLD_TYPE, "IPA RTP Payload Type" },
|
|
+ { NM_ATT_IPACC_BASEB_ID, "IPA Baseband Identifier" },
|
|
+ { NM_ATT_IPACC_STREAM_ID, "IPA Stream Identifier" },
|
|
+ { NM_ATT_IPACC_NV_FLAGS, "IPA NVRAM Flags" },
|
|
+ { NM_ATT_IPACC_FREQ_CTRL, "IPA Frequency Control" },
|
|
+ { NM_ATT_IPACC_PRIM_OML_CFG, "IPA Primary OML Config" },
|
|
+ { NM_ATT_IPACC_SEC_OML_CFG, "IPA Secondary OML Config" },
|
|
+ { NM_ATT_IPACC_IP_IF_CFG, "IPA IP Interface Config" },
|
|
+ { NM_ATT_IPACC_IP_GW_CFG, "IPA IP Gateway Config" },
|
|
+ { NM_ATT_IPACC_IN_SERV_TIME, "IPA In Service Time" },
|
|
+ { NM_ATT_IPACC_TRX_BTS_ASS, "IPA TRX BTS Assignment" },
|
|
+ { NM_ATT_IPACC_LOCATION, "IPA BTS Location Name" },
|
|
+ { NM_ATT_IPACC_PAGING_CFG, "IPA Paging Configuration" },
|
|
+ { NM_ATT_IPACC_FILE_DATA, "IPA File Data" },
|
|
+ { NM_ATT_IPACC_UNIT_ID, "IPA Unit ID" },
|
|
+ { NM_ATT_IPACC_PARENT_UNIT_ID, "IPA Parent Unit ID" },
|
|
+ { NM_ATT_IPACC_UNIT_NAME, "IPA Unit Name" },
|
|
+ { NM_ATT_IPACC_SNMP_CFG, "IPA SNMP Config" },
|
|
+ { NM_ATT_IPACC_PRIM_OML_CFG_LIST, "IPA Primary OML Config List" },
|
|
+ { NM_ATT_IPACC_PRIM_OML_FB_TOUT,"IPA Primary OML Fallback Timeout" },
|
|
+ { NM_ATT_IPACC_CUR_SW_CFG, "IPA Current Software Config" },
|
|
+ { NM_ATT_IPACC_TIMING_BUS, "IPA Timing Bus" },
|
|
+ { NM_ATT_IPACC_CGI, "IPA CGI" },
|
|
+ { NM_ATT_IPACC_RAC, "IPA RAC" },
|
|
+ { NM_ATT_IPACC_OBJ_VERSION, "IPA Object Version" },
|
|
+ { NM_ATT_IPACC_GPRS_PAGING_CFG, "IPA GPRS Paging Configuration" },
|
|
+ { NM_ATT_IPACC_NSEI, "IPA NSEI" },
|
|
+ { NM_ATT_IPACC_BVCI, "IPA BVCI" },
|
|
+ { NM_ATT_IPACC_NSVCI, "IPA NSVCI" },
|
|
+ { NM_ATT_IPACC_NS_CFG, "IPA NS Configuration" },
|
|
+ { NM_ATT_IPACC_BSSGP_CFG, "IPA BSSGP Configuration" },
|
|
+ { NM_ATT_IPACC_NS_LINK_CFG, "IPA NS Link Configuration" },
|
|
+ { NM_ATT_IPACC_RLC_CFG, "IPA RLC Configuration" },
|
|
+ { NM_ATT_IPACC_ALM_THRESH_LIST, "IPA Alarm Threshold List" },
|
|
+ { NM_ATT_IPACC_MONIT_VAL_LIST, "IPA Monitored Value List" },
|
|
+ { NM_ATT_IPACC_TIB_CONTROL, "IPA Timing Interface Bus Control" },
|
|
+ { NM_ATT_IPACC_SUPP_FEATURES, "IPA Supported Features" },
|
|
+ { NM_ATT_IPACC_CODING_SCHEMES, "IPA Coding Schemes" },
|
|
+ { NM_ATT_IPACC_RLC_CFG_2, "IPA RLC Configuration 2" },
|
|
+ { NM_ATT_IPACC_HEARTB_TOUT, "IPA Heartbeat Timeout" },
|
|
+ { NM_ATT_IPACC_UPTIME, "IPA Uptime" },
|
|
+ { NM_ATT_IPACC_RLC_CFG_3, "IPA RLC Configuration 3" },
|
|
+ { NM_ATT_IPACC_SSL_CFG, "IPA SSL Configuration" },
|
|
+ { NM_ATT_IPACC_SEC_POSSIBLE, "IPA Security Possible" },
|
|
+ { NM_ATT_IPACC_IML_SSL_STATE, "IPA IML SSL State" },
|
|
+ { NM_ATT_IPACC_REVOC_DATE, "IPA Revocation Date" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+#if 0
|
|
+static gint merge_value_strings(value_string **dst, const value_string *base, const value_string delta)
|
|
+{
|
|
+ const value_string *cur;
|
|
+ guint num_base, num_delta, num_max, num_out;
|
|
+
|
|
+ for (cur = base; cur->value || cur->strptr; cur++)
|
|
+ num_base++;
|
|
+ for (cur = delta; cur->value || cur->strptr; cur++)
|
|
+ num_delta++;
|
|
+ num_max = num_base + num_delta + 1; /* terminating entry */
|
|
+
|
|
+ *dst = g_malloc(sizeof(value_string) * num_max);
|
|
+ if (!*dst)
|
|
+ return -ENOMEM;
|
|
+ /* zero-initialize the entire array so we always are zero-
|
|
+ * terminated */
|
|
+ memset(*dst, 0, sizeof(value_string * num_max));
|
|
+
|
|
+ /* initialize with the 'base' */
|
|
+ memcpy(*dst, base, sizeof(value_string)*num_base);
|
|
+ num_out = num_base;
|
|
+
|
|
+ /* patch/append the delta */
|
|
+ for (cur = delta; cur->value || cur->strptr; cur++) {
|
|
+ guint idx;
|
|
+ if (match_strval_idx(cur->value, base, &idx)) {
|
|
+ /* the base set already contains a definition,
|
|
+ * we need to override it */
|
|
+ memcpy((*dst)[idx], cur, sizeof(value_string));
|
|
+ } else {
|
|
+ /* append the entry to the end */
|
|
+ memcpy((*dst)[num_out], cur, sizeof(value_string));
|
|
+ num_out++;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+#endif
|
|
+
|
|
+static const gchar *
|
|
+_match_oml_fom_msgtype(const guint32 val, const value_string_ext *vs, gint *idx)
|
|
+{
|
|
+ const char *ret;
|
|
+ ret = match_strval_idx(val, vs->_vs_p, idx);
|
|
+ if (!ret)
|
|
+ ret = match_strval_idx(val, _oml_fom_msgtype_vals, idx);
|
|
+ return ret;
|
|
+}
|
|
+
|
|
+static const gchar *
|
|
+_match_oml_fom_attr(const guint32 val, const value_string_ext *vs, gint *idx)
|
|
+{
|
|
+ const char *ret;
|
|
+ ret = match_strval_idx(val, vs->_vs_p, idx);
|
|
+ if (!ret)
|
|
+ ret = match_strval_idx(val, _oml_fom_attr_vals, idx);
|
|
+ return ret;
|
|
+}
|
|
+
|
|
+/* Section 9.4.4: Administrative State */
|
|
+static const value_string oml_adm_state_vals[] = {
|
|
+ { NM_STATE_LOCKED, "Locked" },
|
|
+ { NM_STATE_UNLOCKED, "Unlocked" },
|
|
+ { NM_STATE_SHUTDOWN, "Shutdown" },
|
|
+ { NM_STATE_NULL, "Null" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+static const value_string oml_oper_state_vals[] = {
|
|
+ { 1, "Disabled" },
|
|
+ { 2, "Enabled" },
|
|
+ { 0xff, "NULL" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* Section 9.4.7 Availability Status */
|
|
+static const value_string oml_avail_state_vals[] = {
|
|
+ { 0, "In test" },
|
|
+ { 1, "Failed" },
|
|
+ { 2, "Power off" },
|
|
+ { 3, "Off line" },
|
|
+ { 5, "Dependency" },
|
|
+ { 6, "Degraded" },
|
|
+ { 7, "Not installed" },
|
|
+ { 0xff, "OK" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* Section 9.4.13: Channel Combination */
|
|
+static const value_string oml_chan_comb_vals[] = {
|
|
+ { NM_CHANC_TCHFull, "TCH/F" },
|
|
+ { NM_CHANC_TCHHalf, "TCH/H" },
|
|
+ { NM_CHANC_TCHHalf2, "TCH/H 2" },
|
|
+ { NM_CHANC_SDCCH, "SDCCH" },
|
|
+ { NM_CHANC_mainBCCH, "Main BCCH" },
|
|
+ { NM_CHANC_BCCHComb, "Combined BCCH" },
|
|
+ { NM_CHANC_BCCH, "BCCH" },
|
|
+ { NM_CHANC_BCCH_CBCH, "BCCH+CBCH" },
|
|
+ { NM_CHANC_SDCCH_CBCH, "SDCCH+CBCH" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* Section 9.4.16: Event Type */
|
|
+static const value_string oml_event_type_vals[] = {
|
|
+ { NM_EVT_COMM_FAIL, "Communication Failure" },
|
|
+ { NM_EVT_QOS_FAIL, "QoS Failure" },
|
|
+ { NM_EVT_PROC_FAIL, "Processor Failure" },
|
|
+ { NM_EVT_EQUIP_FAIL, "Equipment Failure" },
|
|
+ { NM_EVT_ENV_FAIL, "Environment Failure" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* Section 9.4.63: Perceived Severity */
|
|
+static const value_string oml_severity_vals[] = {
|
|
+ { NM_SEVER_CEASED, "Ceased" },
|
|
+ { NM_SEVER_CRITICAL, "Critical" },
|
|
+ { NM_SEVER_MAJOR, "Major" },
|
|
+ { NM_SEVER_MINOR, "Minor" },
|
|
+ { NM_SEVER_WARNING, "Warning" },
|
|
+ { NM_SEVER_INDETERMINATE, "Indeterminate" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+/* Section 9.4.36: NACK Causes */
|
|
+static const value_string oml_nack_cause[] = {
|
|
+ { NM_NACK_INCORR_STRUCT, "Incorrect message structure" },
|
|
+ { NM_NACK_MSGTYPE_INVAL, "Invalid message type value" },
|
|
+ { NM_NACK_OBJCLASS_INVAL, "Invalid Object class value" },
|
|
+ { NM_NACK_OBJCLASS_NOTSUPP, "Object Class not supported" },
|
|
+ { NM_NACK_BTSNR_UNKN, "BTS Number unknown" },
|
|
+ { NM_NACK_TRXNR_UNKN, "TRX Number unknown" },
|
|
+ { NM_NACK_OBJINST_UNKN, "Object Instance unknown" },
|
|
+ { NM_NACK_ATTRID_INVAL, "Invalid Attribute ID value" },
|
|
+ { NM_NACK_ATTRID_NOTSUPP, "Attribute ID not supported" },
|
|
+ { NM_NACK_PARAM_RANGE, "Parameter value out of range" },
|
|
+ { NM_NACK_ATTRLIST_INCONSISTENT, "Inconsistency in Attribute list" },
|
|
+ { NM_NACK_SPEC_IMPL_NOTSUPP, "Specified Implementation not supported" },
|
|
+ { NM_NACK_CANT_PERFORM, "Message cannot be performed" },
|
|
+ { NM_NACK_RES_NOTIMPL, "Resource not implemented" },
|
|
+ { NM_NACK_RES_NOTAVAIL, "Resource not available" },
|
|
+ { NM_NACK_FREQ_NOTAVAIL, "Frequency not available" },
|
|
+ { NM_NACK_TEST_NOTSUPP, "Test not supported" },
|
|
+ { NM_NACK_CAPACITY_RESTR, "Capacity restrictions" },
|
|
+ { NM_NACK_PHYSCFG_NOTPERFORM, "Phys config cannot be performed" },
|
|
+ { NM_NACK_TEST_NOTINIT, "Test not initiated" },
|
|
+ { NM_NACK_PHYSCFG_NOTRESTORE, "Phys config cannot be restored" },
|
|
+ { NM_NACK_TEST_NOSUCH, "No such Test" },
|
|
+ { NM_NACK_TEST_NOSTOP, "Test cannot be stopped" },
|
|
+ { NM_NACK_MSGINCONSIST_PHYSCFG, "Message inconsisten with physical config" },
|
|
+ { NM_NACK_FILE_INCOMPLETE, "Complete file not received" },
|
|
+ { NM_NACK_FILE_NOTAVAIL, "File not available at destination" },
|
|
+ { NM_NACK_FILE_NOTACTIVATE, "File cannot be activated" },
|
|
+ { NM_NACK_REQ_NOT_GRANT, "Request not granted" },
|
|
+ { NM_NACK_WAIT, "Wait" },
|
|
+ { NM_NACK_NOTH_REPORT_EXIST, "Nothing reportable existing" },
|
|
+ { NM_NACK_MEAS_NOTSUPP, "Measurement not supported" },
|
|
+ { NM_NACK_MEAS_NOTSTART, "Measurement not started" },
|
|
+ { 0xff, "NULL" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+static const value_string oml_test_no_vals[] = {
|
|
+ { NM_IPACC_TESTNO_RLOOP_ANT, "Radio Loop test via antenna" },
|
|
+ { NM_IPACC_TESTNO_RLOOP_XCVR, "Radio Loop test via transceiver" },
|
|
+ { NM_IPACC_TESTNO_FUNC_OBJ, "BTS Functional object self test" },
|
|
+ { NM_IPACC_TESTNO_CHAN_USAGE, "Channel Usage" },
|
|
+ { NM_IPACC_TESTNO_BCCH_CHAN_USAGE, "BCCH Channel Usage" },
|
|
+ { NM_IPACC_TESTNO_FREQ_SYNC, "Frequency Synchronization" },
|
|
+ { NM_IPACC_TESTNO_BCCH_INFO, "BCCH Information" },
|
|
+ { NM_IPACC_TESTNO_TX_BEACON, "Transmit Beacon" },
|
|
+ { NM_IPACC_TESTNO_SYSINFO_MONITOR, "SysInfo Monitor" },
|
|
+ { NM_IPACC_TESTNO_BCCCH_MONITOR, "BCCH & CCCH Monitor" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+static const value_string ipacc_test_res_vals[] = {
|
|
+ { NM_IPACC_TESTRES_SUCCESS, "Success" },
|
|
+ { NM_IPACC_TESTRES_TIMEOUT, "Timeout" },
|
|
+ { NM_IPACC_TESTRES_NO_CHANS, "No suitable channels available" },
|
|
+ { NM_IPACC_TESTRES_PARTIAL, "Partial" },
|
|
+ { NM_IPACC_TESTRES_STOPPED, "Stopped" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+static const value_string ipacc_testres_ie_vals[] = {
|
|
+ { NM_IPACC_TR_IE_FREQ_ERR_LIST, "Frequency Error List" },
|
|
+ { NM_IPACC_TR_IE_CHAN_USAGE, "Channel Usage" },
|
|
+ { NM_IPACC_TR_IE_BCCH_INFO, "BCCH Information" },
|
|
+ { NM_IPACC_TR_IE_RESULT_DETAILS,"Result Details" },
|
|
+ { NM_IPACC_TR_IE_FREQ_ERR, "Frequency Error" },
|
|
+ { 0, NULL }
|
|
+};
|
|
+
|
|
+static const struct tlv_def *
|
|
+find_tlv_tag(guint8 tag)
|
|
+{
|
|
+ const struct tlv_def *specific;
|
|
+
|
|
+ if (global_oml_use_nano_bts)
|
|
+ specific = &nm_att_tlvdef_ipa.def[tag];
|
|
+ else
|
|
+ specific = &nm_att_tlvdev_bs11.def[tag];
|
|
+
|
|
+ if (specific->type != TLV_TYPE_UNKNOWN)
|
|
+ return specific;
|
|
+
|
|
+ return &nm_att_tlvdef_base.def[tag];
|
|
+}
|
|
+
|
|
+/* Parse the ip.access specific BCCH Information IE embedded into the Test
|
|
+ * Report IE */
|
|
+static gint
|
|
+ipacc_tr_ie_bcch(tvbuff_t *tvb, proto_tree *att_tree, int offset)
|
|
+{
|
|
+ guint16 binfo_type, tmp;
|
|
+
|
|
+ binfo_type = tvb_get_ntohs(tvb, offset);
|
|
+ offset += 2;
|
|
+
|
|
+ tmp = tvb_get_ntohs(tvb, offset);
|
|
+
|
|
+ /* FIXME: there are still some bugs remaining here */
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_arfcn,
|
|
+ tvb, offset, 2, TRUE);
|
|
+
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_f_qual,
|
|
+ tvb, offset, 2, TRUE);
|
|
+ offset += 2;
|
|
+
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_b_rxlev,
|
|
+ tvb, offset++, 1, TRUE);
|
|
+
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_rxqual,
|
|
+ tvb, offset++, 1, TRUE);
|
|
+
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_f_err,
|
|
+ tvb, offset, 2, TRUE);
|
|
+ offset += 2;
|
|
+
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_frame_offs,
|
|
+ tvb, offset, 2, TRUE);
|
|
+ offset += 2;
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_framenr_offs,
|
|
+ tvb, offset, 4, TRUE);
|
|
+ offset += 4;
|
|
+
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_bsic,
|
|
+ tvb, offset++, 1, TRUE);
|
|
+
|
|
+ de_lai(tvb, att_tree, offset, 5, NULL, 0);
|
|
+ offset += 5;
|
|
+
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_cell_id,
|
|
+ tvb, offset, 2, TRUE);
|
|
+ offset += 2;
|
|
+
|
|
+ if (binfo_type & 0x8000) {
|
|
+ /* System Information 2 */
|
|
+ /* FIXME: Parse 04.18 Neighbour Cell Description */
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2,
|
|
+ tvb, offset, 16, TRUE);
|
|
+ offset += 16;
|
|
+ }
|
|
+ if (binfo_type & 0x0001) {
|
|
+ /* System Information 2bis */
|
|
+ /* FIXME: Parse 04.18 Neighbour Cell Description */
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2bis,
|
|
+ tvb, offset, 16, TRUE);
|
|
+ offset += 16;
|
|
+ }
|
|
+ if (binfo_type & 0x0002) {
|
|
+ /* System Information 2ter */
|
|
+ /* FIXME: Parse 04.18 Neighbour Cell Description */
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2ter,
|
|
+ tvb, offset, 16, TRUE);
|
|
+ offset += 16;
|
|
+ }
|
|
+ if (binfo_type & 0x0004) {
|
|
+ /* FIXME: Parse 04.18 Cell Channel Description */
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_chan_desc,
|
|
+ tvb, offset, 16, TRUE);
|
|
+ offset += 16;
|
|
+ }
|
|
+
|
|
+ return offset;
|
|
+}
|
|
+
|
|
+/* Parse the ip.access specific Channel Usage IE embedded into the Test
|
|
+ * Report IE */
|
|
+static gint
|
|
+ipacc_tr_ie_chan_usage(tvbuff_t *tvb, proto_tree *att_tree, int offset)
|
|
+{
|
|
+ while (tvb_reported_length_remaining(tvb, offset) != 0) {
|
|
+ guint16 result;
|
|
+
|
|
+ result = tvb_get_ntohs(tvb, offset);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_tr_arfcn,
|
|
+ tvb, offset, 2, result);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_tr_rxlev,
|
|
+ tvb, offset, 2, result);
|
|
+ offset += 2;
|
|
+ }
|
|
+ return offset;
|
|
+}
|
|
+
|
|
+/* Parse the ip.access specific format of the standard test report IE */
|
|
+static gint
|
|
+dissect_ipacc_test_rep(proto_tree *tree, tvbuff_t *tvb)
|
|
+{
|
|
+ gint offset = 0;
|
|
+
|
|
+ proto_tree_add_item(tree, hf_attr_ipa_test_res, tvb, offset++,
|
|
+ 1, FALSE);
|
|
+
|
|
+ while (tvb_reported_length_remaining(tvb, offset) != 0) {
|
|
+ guint8 ie;
|
|
+ guint16 len;
|
|
+ proto_item *ti;
|
|
+ proto_tree *att_tree;
|
|
+
|
|
+ ie = tvb_get_guint8(tvb, offset);
|
|
+ len = tvb_get_ntohs(tvb, offset+1);
|
|
+ ti = proto_tree_add_item(tree, hf_oml_ipa_tres_attr_tag, tvb,
|
|
+ offset++, 1, FALSE);
|
|
+ att_tree = proto_item_add_subtree(ti, ett_oml_fom_att);
|
|
+ proto_tree_add_uint(att_tree, hf_oml_ipa_tres_attr_len, tvb,
|
|
+ offset, 2, len);
|
|
+ offset += 2;
|
|
+
|
|
+ switch (ie) {
|
|
+ case NM_IPACC_TR_IE_CHAN_USAGE:
|
|
+ offset = ipacc_tr_ie_chan_usage(tvb,
|
|
+ att_tree, offset);
|
|
+ break;
|
|
+ case NM_IPACC_TR_IE_BCCH_INFO:
|
|
+ offset = ipacc_tr_ie_bcch(tvb,
|
|
+ att_tree, offset);
|
|
+ break;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ return offset;
|
|
+}
|
|
+
|
|
+/* Dissect OML FOM Attributes after OML + FOM header */
|
|
+static gint
|
|
+dissect_oml_attrs(tvbuff_t *tvb, int base_offs, packet_info *pinfo,
|
|
+ proto_tree *tree)
|
|
+{
|
|
+ int offset = base_offs;
|
|
+
|
|
+ while (tvb_reported_length_remaining(tvb, offset) != 0) {
|
|
+ guint i;
|
|
+ guint8 tag, val8;
|
|
+ guint16 val16;
|
|
+ guint32 val32;
|
|
+ unsigned int len, len_len, hlen;
|
|
+ const struct tlv_def *tdef;
|
|
+ proto_item *ti;
|
|
+ proto_tree *att_tree;
|
|
+ tvbuff_t *sub_tvb;
|
|
+
|
|
+ tag = tvb_get_guint8(tvb, offset);
|
|
+ tdef = find_tlv_tag(tag);
|
|
+
|
|
+ switch (tdef->type) {
|
|
+ case TLV_TYPE_FIXED:
|
|
+ hlen = 1;
|
|
+ len_len = 0;
|
|
+ len = tdef->fixed_len;
|
|
+ break;
|
|
+ case TLV_TYPE_T:
|
|
+ hlen = 1;
|
|
+ len_len = 0;
|
|
+ len = 0;
|
|
+ break;
|
|
+ case TLV_TYPE_TV:
|
|
+ hlen = 1;
|
|
+ len_len = 0;
|
|
+ len = 1;
|
|
+ break;
|
|
+ case TLV_TYPE_TLV:
|
|
+ hlen = 2;
|
|
+ len_len = 1;
|
|
+ len = tvb_get_guint8(tvb, offset+1);
|
|
+ break;
|
|
+ case TLV_TYPE_TL16V:
|
|
+ hlen = 3;
|
|
+ len_len = 2;
|
|
+ len = tvb_get_guint8(tvb, offset+1) << 8 |
|
|
+ tvb_get_guint8(tvb, offset+2);
|
|
+ break;
|
|
+ case TLV_TYPE_TLV16:
|
|
+ hlen = 2;
|
|
+ len_len = 1;
|
|
+ len = tvb_get_guint8(tvb, offset+1) * 2;
|
|
+ break;
|
|
+ case TLV_TYPE_UNKNOWN: /* fall through */
|
|
+ default:
|
|
+ hlen = len_len = len = 0;
|
|
+ DISSECTOR_ASSERT_NOT_REACHED();
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ ti = proto_tree_add_item(tree, hf_oml_fom_attr_tag, tvb,
|
|
+ offset, 1, FALSE);
|
|
+ att_tree = proto_item_add_subtree(ti, ett_oml_fom_att);
|
|
+ proto_tree_add_uint(att_tree, hf_oml_fom_attr_len, tvb,
|
|
+ offset+1, len_len, len);
|
|
+ offset += hlen;
|
|
+
|
|
+ sub_tvb = tvb_new_subset(tvb, offset, len, len);
|
|
+
|
|
+ switch (tag) {
|
|
+ /* parse only the most common IE for now */
|
|
+ case NM_ATT_ABIS_CHANNEL:
|
|
+ proto_tree_add_item(att_tree, hf_attr_ach_btsp, tvb,
|
|
+ offset, 1, TRUE);
|
|
+ proto_tree_add_item(att_tree, hf_attr_ach_tslot, tvb,
|
|
+ offset+1, 1, TRUE);
|
|
+ proto_tree_add_item(att_tree, hf_attr_ach_sslot, tvb,
|
|
+ offset+2, 1, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_ADM_STATE:
|
|
+ proto_tree_add_item(att_tree, hf_attr_adm_state, tvb,
|
|
+ offset, len, FALSE);
|
|
+ val8 = tvb_get_guint8(tvb, offset);
|
|
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
|
|
+ val_to_str(val8, oml_adm_state_vals,
|
|
+ "%02x"));
|
|
+ break;
|
|
+ case NM_ATT_ARFCN_LIST:
|
|
+ for (i = 0; i < len; i += 2) {
|
|
+ val16 = tvb_get_ntohs(tvb, offset + i);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_arfcn,
|
|
+ tvb, offset + i, 2, val16);
|
|
+ }
|
|
+ break;
|
|
+ case NM_ATT_AVAIL_STATUS:
|
|
+ /* Availability status can have length 0 */
|
|
+ if (len) {
|
|
+ val8 = tvb_get_guint8(tvb, offset);
|
|
+ proto_tree_add_item(att_tree,
|
|
+ hf_attr_avail_state, tvb,
|
|
+ offset, len, FALSE);
|
|
+ } else
|
|
+ val8 = 0xff;
|
|
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
|
|
+ val_to_str(val8, oml_avail_state_vals,
|
|
+ "%02x"));
|
|
+ break;
|
|
+ case NM_ATT_BCCH_ARFCN:
|
|
+ proto_tree_add_item(att_tree, hf_attr_bcch_arfcn, tvb,
|
|
+ offset, len, FALSE);
|
|
+ break;
|
|
+ case NM_ATT_BSIC:
|
|
+ proto_tree_add_item(att_tree, hf_attr_bsic, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_CHAN_COMB:
|
|
+ proto_tree_add_item(att_tree, hf_attr_chan_comb, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_EVENT_TYPE:
|
|
+ proto_tree_add_item(att_tree, hf_attr_event_type, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_GSM_TIME:
|
|
+ proto_tree_add_item(att_tree, hf_attr_gsm_time, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_OPER_STATE:
|
|
+ proto_tree_add_item(att_tree, hf_attr_oper_state, tvb,
|
|
+ offset, len, FALSE);
|
|
+ val8 = tvb_get_guint8(tvb, offset);
|
|
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
|
|
+ val_to_str(val8, oml_oper_state_vals,
|
|
+ "%02x"));
|
|
+ break;
|
|
+ case NM_ATT_TEI:
|
|
+ proto_tree_add_item(att_tree, hf_attr_tei, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_TSC:
|
|
+ proto_tree_add_item(att_tree, hf_attr_tsc, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_SEVERITY:
|
|
+ proto_tree_add_item(att_tree, hf_attr_severity, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_TEST_REPORT:
|
|
+ dissect_ipacc_test_rep(att_tree, sub_tvb);
|
|
+ break;
|
|
+ case NM_ATT_TEST_NO:
|
|
+ proto_tree_add_item(att_tree, hf_attr_test_no, tvb,
|
|
+ offset, len, TRUE);
|
|
+ val8 = tvb_get_guint8(tvb, offset);
|
|
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
|
|
+ val_to_str(val8, oml_test_no_vals,
|
|
+ "%02x"));
|
|
+ break;
|
|
+ case NM_ATT_HSN:
|
|
+ proto_tree_add_item(att_tree, hf_attr_hsn, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_MAIO:
|
|
+ proto_tree_add_item(att_tree, hf_attr_maio, tvb,
|
|
+ offset, len, TRUE);
|
|
+ break;
|
|
+ default:
|
|
+ proto_tree_add_item(att_tree, hf_oml_fom_attr_val, tvb,
|
|
+ offset, len, FALSE);
|
|
+ }
|
|
+
|
|
+ if (global_oml_use_nano_bts) switch (tag) {
|
|
+ /* proprietary ip.access extensions */
|
|
+ case NM_ATT_IPACC_DST_IP:
|
|
+ val32 = tvb_get_ntohl(tvb, offset);
|
|
+ proto_tree_add_ipv4(att_tree, hf_attr_ipa_rsl_ip, tvb,
|
|
+ offset, len, val32);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_DST_IP_PORT:
|
|
+ val16 = tvb_get_ntohs(tvb, offset);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_rsl_port, tvb,
|
|
+ offset, len, val16);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_LOCATION:
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_location_name,
|
|
+ tvb, offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_UNIT_ID:
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_unit_id,
|
|
+ tvb, offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_UNIT_NAME:
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_unit_name,
|
|
+ tvb, offset, len, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_PRIM_OML_CFG_LIST:
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_prim_oml_ip,
|
|
+ tvb, offset+1, 4, TRUE);
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_prim_oml_port,
|
|
+ tvb, offset+1+4, 2, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_NV_FLAGS:
|
|
+ {
|
|
+ guint flags, mask;
|
|
+ flags = tvb_get_guint8(tvb, offset);
|
|
+ mask = tvb_get_guint8(tvb, offset+1);
|
|
+ flags |= tvb_get_guint8(tvb, offset+2) << 8;
|
|
+ mask |= tvb_get_guint8(tvb, offset+3) << 8;
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_nv_flags,
|
|
+ tvb, offset, 3, flags);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_nv_mask,
|
|
+ tvb, offset+1, 3, mask);
|
|
+ }
|
|
+ break;
|
|
+ case NM_ATT_IPACC_RAC:
|
|
+ proto_tree_add_item(att_tree, hf_attr_ipa_rac,
|
|
+ tvb, offset, 1, TRUE);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_NSEI:
|
|
+ val16 = tvb_get_ntohs(tvb, offset);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_nsei,
|
|
+ tvb, offset, 2, val16);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_NSVCI:
|
|
+ val16 = tvb_get_ntohs(tvb, offset);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_nsvci,
|
|
+ tvb, offset, 2, val16);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_BVCI:
|
|
+ val16 = tvb_get_ntohs(tvb, offset);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_bvci,
|
|
+ tvb, offset, 2, val16);
|
|
+ break;
|
|
+ case NM_ATT_IPACC_NS_LINK_CFG:
|
|
+ val16 = tvb_get_ntohs(tvb, offset);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_nsl_sport,
|
|
+ tvb, offset, 2, val16);
|
|
+ val32 = tvb_get_ipv4(tvb, offset+2);
|
|
+ proto_tree_add_ipv4(att_tree, hf_attr_ipa_nsl_daddr,
|
|
+ tvb, offset+2, 4, val32);
|
|
+ val16 = tvb_get_ntohs(tvb, offset+6);
|
|
+ proto_tree_add_uint(att_tree, hf_attr_ipa_nsl_dport,
|
|
+ tvb, offset+6, 2, val16);
|
|
+ break;
|
|
+ }
|
|
+ offset += len;
|
|
+ }
|
|
+ return offset;
|
|
+}
|
|
+
|
|
+static int
|
|
+dissect_oml_fom(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|
+ int offset, proto_item *top_ti)
|
|
+{
|
|
+ guint8 msg_type, obj_class, bts_nr, trx_nr, ts_nr;
|
|
+ proto_item *ti;
|
|
+ proto_tree *fom_tree;
|
|
+
|
|
+ msg_type = tvb_get_guint8(tvb, offset);
|
|
+ obj_class = tvb_get_guint8(tvb, offset+1);
|
|
+ bts_nr = tvb_get_guint8(tvb, offset+2);
|
|
+ trx_nr = tvb_get_guint8(tvb, offset+3);
|
|
+ ts_nr = tvb_get_guint8(tvb, offset+4);
|
|
+ proto_item_append_text(top_ti, ", %s(%02x,%02x,%02x) %s ",
|
|
+ val_to_str(obj_class, oml_fom_objclass_vals, "%02x"),
|
|
+ bts_nr, trx_nr, ts_nr,
|
|
+ val_to_str_ext(msg_type, &oml_fom_msgtype_vse,
|
|
+ "unknown 0x%x"));
|
|
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s(%02x,%02x,%02x) %s ",
|
|
+ val_to_str(obj_class, oml_fom_objclass_vals, "%02x"),
|
|
+ bts_nr, trx_nr, ts_nr,
|
|
+ val_to_str_ext(msg_type, &oml_fom_msgtype_vse,
|
|
+ "unknown 0x%x"));
|
|
+ ti = proto_tree_add_item(tree, hf_oml_fom_msgtype, tvb, offset++, 1, FALSE);
|
|
+ fom_tree = proto_item_add_subtree(ti, ett_oml_fom);
|
|
+ proto_tree_add_item(fom_tree, hf_oml_fom_objclass, tvb, offset++, 1, FALSE);
|
|
+ proto_tree_add_item(fom_tree, hf_oml_fom_inst_bts, tvb, offset++, 1, FALSE);
|
|
+ proto_tree_add_item(fom_tree, hf_oml_fom_inst_trx, tvb, offset++, 1, FALSE);
|
|
+ proto_tree_add_item(fom_tree, hf_oml_fom_inst_ts, tvb, offset++, 1, FALSE);
|
|
+
|
|
+
|
|
+ /* dissect the TLV objects in the message body */
|
|
+ offset = dissect_oml_attrs(tvb, offset, pinfo, fom_tree);
|
|
+
|
|
+ return offset;
|
|
+}
|
|
+
|
|
+static const guint8 ipaccess_magic[] = "com.ipaccess";
|
|
+
|
|
+static int
|
|
+dissect_oml_manuf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|
+ int offset, proto_item *top_ti)
|
|
+{
|
|
+ if (tvb_get_guint8(tvb, offset) != 0x0d ||
|
|
+ tvb_memeql(tvb, offset+1, ipaccess_magic, sizeof(ipaccess_magic)))
|
|
+ return offset;
|
|
+
|
|
+ offset += sizeof(ipaccess_magic) + 1;
|
|
+
|
|
+ return dissect_oml_fom(tvb, pinfo, tree, offset, top_ti);
|
|
+}
|
|
+
|
|
+static void
|
|
+dissect_abis_oml(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|
+{
|
|
+ proto_item *ti;
|
|
+ proto_tree *oml_tree;
|
|
+
|
|
+ int offset = 0;
|
|
+
|
|
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "OML");
|
|
+
|
|
+ top_tree = tree;
|
|
+ if (tree) {
|
|
+ u_int8_t msg_disc = tvb_get_guint8(tvb, offset);
|
|
+
|
|
+ ti = proto_tree_add_item(tree, proto_abis_oml, tvb, 0, -1, FALSE);
|
|
+ oml_tree = proto_item_add_subtree(ti, ett_oml);
|
|
+
|
|
+ proto_tree_add_item(oml_tree, hf_oml_msg_disc, tvb, offset++,
|
|
+ 1, TRUE);
|
|
+ proto_tree_add_item(oml_tree, hf_oml_placement, tvb, offset++,
|
|
+ 1, TRUE);
|
|
+ proto_tree_add_item(oml_tree, hf_oml_sequence, tvb, offset++,
|
|
+ 1, TRUE);
|
|
+ proto_tree_add_item(oml_tree, hf_oml_length, tvb, offset++,
|
|
+ 1, TRUE);
|
|
+
|
|
+ switch (msg_disc) {
|
|
+ case ABIS_OM_MDISC_FOM:
|
|
+ offset = dissect_oml_fom(tvb, pinfo, oml_tree,
|
|
+ offset, ti);
|
|
+ break;
|
|
+ case ABIS_OM_MDISC_MANUF:
|
|
+ offset = dissect_oml_manuf(tvb, pinfo, oml_tree, offset, ti);
|
|
+ break;
|
|
+ case ABIS_OM_MDISC_MMI:
|
|
+ case ABIS_OM_MDISC_TRAU:
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+void
|
|
+proto_reg_handoff_abis_oml(void);
|
|
+
|
|
+void
|
|
+proto_register_abis_oml(void)
|
|
+{
|
|
+ static hf_register_info hf[] = {
|
|
+ { &hf_oml_msg_disc,
|
|
+ { "Message Discriminator", "oml.msg_dsc",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_msg_disc_vals), 0,
|
|
+ "GSM 12.21 Message Discriminator", HFILL }
|
|
+ },
|
|
+ { &hf_oml_placement,
|
|
+ { "Placement Indicator", "oml.placement",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_placement_vals), 0,
|
|
+ "GSM 12.21 Placement Indicator", HFILL }
|
|
+ },
|
|
+ { &hf_oml_sequence,
|
|
+ { "Sequence Number", "oml.sequence",
|
|
+ FT_UINT8, BASE_HEX, NULL, 0,
|
|
+ "Sequence Number (if multi-part msg)", HFILL }
|
|
+ },
|
|
+ { &hf_oml_length,
|
|
+ { "Length Indicator", "oml.length",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ "Total length of payload", HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_msgtype,
|
|
+ { "FOM Message Type", "oml.fom.msg_type",
|
|
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, (&oml_fom_msgtype_vse), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_objclass,
|
|
+ { "FOM Object Class", "oml.fom.obj_class",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_fom_objclass_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_inst_bts,
|
|
+ { "FOM Object Instance BTS", "oml.fom.obj_inst.bts",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_inst_trx,
|
|
+ { "FOM Object Instance TRX", "oml.fom.obj_inst.trx",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_inst_ts,
|
|
+ { "FOM Object Instance TS", "oml.fom.obj_inst.ts",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_attr_tag,
|
|
+ { "FOM Attribute ID", "oml.fom.attr_id",
|
|
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, (&oml_fom_attr_vse), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_attr_len,
|
|
+ { "FOM Attribute Length", "oml.fom.attr_len",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_oml_fom_attr_val,
|
|
+ { "FOM Attribute Value", "oml.fom.attr_val",
|
|
+ FT_BYTES, BASE_NONE, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+
|
|
+
|
|
+
|
|
+ /* OML Attributes */
|
|
+ { &hf_attr_adm_state,
|
|
+ { "Administrative State", "oml.fom.attr.adm_state",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_adm_state_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_arfcn,
|
|
+ { "ARFCN", "oml.fom.attr.arfcn",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_oper_state,
|
|
+ { "Operational State", "oml.fom.attr.oper_state",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_oper_state_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_avail_state,
|
|
+ { "Availability Status", "oml.fom.attr.avail_state",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_avail_state_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_event_type,
|
|
+ { "Event Type", "oml.fom.attr.event_type",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_event_type_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_severity,
|
|
+ { "Severity", "oml.fom.attr.severity",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_severity_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_bcch_arfcn,
|
|
+ { "BCCH ARFCN", "oml.fom.attr.bcch_arfcn",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0,
|
|
+ "ARFCN of the BCCH", HFILL }
|
|
+ },
|
|
+ { &hf_attr_bsic,
|
|
+ { "BSIC", "oml.fom.attr.bsic",
|
|
+ FT_UINT16, BASE_HEX, NULL, 0,
|
|
+ "Base Station Identity Cdoe", HFILL }
|
|
+ },
|
|
+ { &hf_attr_test_no,
|
|
+ { "Test Number", "oml.fom.attr.test_no",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_test_no_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_tsc,
|
|
+ { "TSC", "oml.fom.attr.tsc",
|
|
+ FT_UINT8, BASE_HEX, NULL, 0,
|
|
+ "Training Sequence Code", HFILL }
|
|
+ },
|
|
+ { &hf_attr_tei,
|
|
+ { "TEI", "oml.fom.attr.tei",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ach_btsp,
|
|
+ { "BTS E1 Port", "oml.fom.attr.abis_ch.bts_port",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ach_tslot,
|
|
+ { "E1 Timeslot", "oml.fom.attr.abis_ch.timeslot",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ach_sslot,
|
|
+ { "E1 Subslot", "oml.fom.attr.abis_ch.subslot",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_gsm_time,
|
|
+ { "GSM Time", "oml.fom.attr.gsm_time",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0,
|
|
+ "GSM Time", HFILL }
|
|
+ },
|
|
+ { &hf_attr_chan_comb,
|
|
+ { "Channel Combination", "oml.fom.attr.chan_comb",
|
|
+ FT_UINT8, BASE_HEX, VALS(oml_chan_comb_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_hsn,
|
|
+ { "HSN", "oml.fom.attr.hsn",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ "Hopping Sequence Number", HFILL }
|
|
+ },
|
|
+ { &hf_attr_maio,
|
|
+ { "MAIO", "oml.fom.attr.maio",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0,
|
|
+ "Mobile Allocation Index Offset", HFILL }
|
|
+ },
|
|
+
|
|
+ /* IP Access */
|
|
+ { &hf_oml_ipa_tres_attr_tag,
|
|
+ { "IPA Test Result Embedded IE",
|
|
+ "oml.fom.testrep.ipa_tag",
|
|
+ FT_UINT8, BASE_HEX, VALS(ipacc_testres_ie_vals), 0,
|
|
+ "Information Element embedded into the Test Result "
|
|
+ "of ip.access BTS", HFILL },
|
|
+ },
|
|
+ { &hf_oml_ipa_tres_attr_len,
|
|
+ { "IPA Test Result Embedded IE Length",
|
|
+ "oml.fom.testrep.ipa_len",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0,
|
|
+ "Length of ip.access Test Result Embedded IE", HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_test_res,
|
|
+ { "IPA Test Result", "oml.fom.testrep.result",
|
|
+ FT_UINT8, BASE_DEC, VALS(ipacc_test_res_vals), 0,
|
|
+ NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_rxlev,
|
|
+ { "Rx Level", "oml.fom.testrep.ipa_rxlev",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0xfc00, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_b_rxlev,
|
|
+ { "Rx Level", "oml.fom.testrep.ipa_rxlev_b",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_arfcn,
|
|
+ { "ARFCN", "oml.fom.testrep.ipa_arfcn",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0x03ff, "ARFCN", HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_f_qual,
|
|
+ { "Frequency Quality", "oml.fom.testrep.ipa.freq_qual",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0xfc, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_f_err,
|
|
+ { "Frequency Error", "oml.fom.testrep.ipa.freq_err",
|
|
+ FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_rxqual,
|
|
+ { "Rx Quality", "oml.fom.testrep.ipa.rx_qual",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0x7, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_frame_offs,
|
|
+ { "Frame Offset", "oml.fom.testrep.ipa.frame_offset",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_framenr_offs,
|
|
+ { "Frame Number Offset",
|
|
+ "oml.fom.testrep.ipa.framenr_offset",
|
|
+ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_bsic,
|
|
+ { "BSIC", "oml.fom.testrep.ipa.bsic",
|
|
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
|
|
+ "Base Station Identity Code", HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_cell_id,
|
|
+ { "Cell ID", "oml.fom.testrep.ipa.cell_id",
|
|
+ FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_rsl_ip,
|
|
+ { "BSC RSL IP Address", "oml.fom.attr.ipa.rsl_ip",
|
|
+ FT_IPv4, BASE_NONE, NULL, 0,
|
|
+ "IP Address to which the BTS establishes "
|
|
+ "the RSL link", HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_rsl_port,
|
|
+ { "BSC RSL TCP Port", "oml.fom.attr.ipa.rsl_port",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0,
|
|
+ "Port number to which the BST establishes "
|
|
+ "the RSL link", HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_prim_oml_ip,
|
|
+ { "Primary OML IP Address",
|
|
+ "oml.fom.attr.ipa.prim_oml_ip",
|
|
+ FT_IPv4, BASE_NONE, NULL, 0,
|
|
+ "IP Address of the BSC for the primary OML link",
|
|
+ HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_prim_oml_port,
|
|
+ { "Primary OML TCP Port",
|
|
+ "oml.fom.attr.ipa.prim_oml_port",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0,
|
|
+ "TCP Port of the BSC for the primarly OML link",
|
|
+ HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_location_name,
|
|
+ { "Location Name", "oml.fom.attr.ipa.loc_name",
|
|
+ FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_unit_name,
|
|
+ { "Unit Name", "oml.fom.attr.ipa.unit_name",
|
|
+ FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_unit_id,
|
|
+ { "Unit ID", "oml.fom.attr.ipa.unit_id",
|
|
+ FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_nv_flags,
|
|
+ { "NVRAM Config Flags", "oml.fom.attr.ipa.nv_flags",
|
|
+ FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_nv_mask,
|
|
+ { "NVRAM Config Mask", "oml.fom.attr.ipa.nv_mask",
|
|
+ FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_si2,
|
|
+ { "System Information 2", "oml.fom.attr.ipa.si2",
|
|
+ FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_si2bis,
|
|
+ { "System Information 2bis", "oml.fom.attr.ipa.si2bis",
|
|
+ FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_si2ter,
|
|
+ { "System Information 2ter", "oml.fom.attr.ipa.si2ter",
|
|
+ FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_tr_chan_desc,
|
|
+ { "Cell Channel Description",
|
|
+ "oml.fom.attr.ipa.chan_desc",
|
|
+ FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_nsl_sport,
|
|
+ { "NS Link IP Source Port",
|
|
+ "oml.fom.attr.ipa.nsl_sport",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_nsl_daddr,
|
|
+ { "NS Link IP Destination Addr",
|
|
+ "oml.fom.attr.ipa.nsl_daddr",
|
|
+ FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_nsl_dport,
|
|
+ { "NS Link IP Destination Port",
|
|
+ "oml.fom.attr.ipa.nsl_dport",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_nsei,
|
|
+ { "NSEI", "oml.fom.attr.ipa.nsei",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_nsvci,
|
|
+ { "NSVCI", "oml.fom.attr.ipa.nsvci",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_bvci,
|
|
+ { "BVCI", "oml.fom.attr.ipa.bvci",
|
|
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
|
|
+ },
|
|
+ { &hf_attr_ipa_rac,
|
|
+ { "RAC", "oml.fom.attr.ipa.rac",
|
|
+ FT_UINT8, BASE_HEX, NULL, 0,
|
|
+ "Routing Area Code", HFILL }
|
|
+ },
|
|
+ };
|
|
+ static gint *ett[] = {
|
|
+ &ett_oml,
|
|
+ &ett_oml_fom,
|
|
+ &ett_oml_fom_att,
|
|
+ };
|
|
+
|
|
+ module_t *oml_module;
|
|
+
|
|
+ /* assign our custom match functions */
|
|
+ oml_fom_msgtype_vse._vs_match = _match_oml_fom_msgtype;
|
|
+ oml_fom_attr_vse._vs_match = _match_oml_fom_attr;
|
|
+
|
|
+ proto_abis_oml = proto_register_protocol("GSM A-bis OML", "A-bis OML",
|
|
+ "gsm_abis_oml");
|
|
+
|
|
+ proto_register_field_array(proto_abis_oml, hf, array_length(hf));
|
|
+
|
|
+ proto_register_subtree_array(ett, array_length(ett));
|
|
+
|
|
+ register_dissector("gsm_abis_oml", dissect_abis_oml, proto_abis_oml);
|
|
+
|
|
+ oml_module = prefs_register_protocol(proto_abis_oml, proto_reg_handoff_abis_oml);
|
|
+ prefs_register_bool_preference(oml_module, "use_ipaccess_oml",
|
|
+ "Use nanoBTS definitions",
|
|
+ "Use ipaccess nanoBTS specific definitions for OML",
|
|
+ &global_oml_use_nano_bts);
|
|
+}
|
|
+
|
|
+/* This function is called once at startup and every time the user hits
|
|
+ * 'apply' in the preferences dialogue */
|
|
+void
|
|
+proto_reg_handoff_abis_oml(void)
|
|
+{
|
|
+ static gboolean initialized = FALSE;
|
|
+
|
|
+ if (!initialized) {
|
|
+ dissector_handle_t abis_oml_handle;
|
|
+
|
|
+ abis_oml_handle = create_dissector_handle(dissect_abis_oml, proto_abis_oml);
|
|
+ dissector_add("lapd.gsm.sapi", LAPD_GSM_SAPI_OM_PROC, abis_oml_handle);
|
|
+
|
|
+ } else {
|
|
+ /* preferences have been changed */
|
|
+ }
|
|
+
|
|
+ if (global_oml_use_nano_bts == TRUE) {
|
|
+ /* initialize with nanobts definitions */
|
|
+ oml_fom_msgtype_vse._vs_p = _oml_fom_msgtype_vals_ipa;
|
|
+ oml_fom_msgtype_vse._vs_num_entries =
|
|
+ array_length(_oml_fom_msgtype_vals_ipa)-1;
|
|
+ oml_fom_attr_vse._vs_p = oml_fom_attr_vals_ipa;
|
|
+ oml_fom_attr_vse._vs_num_entries =
|
|
+ array_length(oml_fom_attr_vals_ipa)-1;
|
|
+ } else {
|
|
+ /* initialize with BS11 defaults */
|
|
+ oml_fom_msgtype_vse._vs_p = _oml_fom_msgtype_vals_bs11;
|
|
+ oml_fom_msgtype_vse._vs_num_entries =
|
|
+ array_length(_oml_fom_msgtype_vals_bs11)-1;
|
|
+ oml_fom_attr_vse._vs_p = oml_fom_attr_vals_bs11;
|
|
+ oml_fom_attr_vse._vs_num_entries =
|
|
+ array_length(oml_fom_attr_vals_bs11)-1;
|
|
+ }
|
|
+}
|
|
diff --git a/epan/dissectors/packet-gsm_abis_oml.h b/epan/dissectors/packet-gsm_abis_oml.h
|
|
new file mode 100644
|
|
index 0000000..3cd2769
|
|
--- /dev/null
|
|
+++ b/epan/dissectors/packet-gsm_abis_oml.h
|
|
@@ -0,0 +1,830 @@
|
|
+/* GSM Network Management messages on the A-bis interface
|
|
+ * 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0 */
|
|
+
|
|
+/* (C) 2008-2009 by Harald Welte <laforge@gnumonks.org>
|
|
+ * All Rights Reserved
|
|
+ *
|
|
+ * 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.
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __PACKET_ABIS_OML_H__
|
|
+#define __PACKET_ABIS_OML_H__
|
|
+
|
|
+#include <sys/types.h>
|
|
+
|
|
+/* From openbsc/include/openbsc/abis_nm.h */
|
|
+
|
|
+/* generic header in front of every OML message according to TS 08.59 */
|
|
+struct abis_om_hdr {
|
|
+ guint8 mdisc;
|
|
+ guint8 placement;
|
|
+ guint8 sequence;
|
|
+ guint8 length;
|
|
+ guint8 data[0];
|
|
+} __attribute__ ((packed));
|
|
+
|
|
+#define ABIS_OM_MDISC_FOM 0x80
|
|
+#define ABIS_OM_MDISC_MMI 0x40
|
|
+#define ABIS_OM_MDISC_TRAU 0x20
|
|
+#define ABIS_OM_MDISC_MANUF 0x10
|
|
+#define ABIS_OM_PLACEMENT_ONLY 0x80
|
|
+#define ABIS_OM_PLACEMENT_FIRST 0x40
|
|
+#define ABIS_OM_PLACEMENT_MIDDLE 0x20
|
|
+#define ABIS_OM_PLACEMENT_LAST 0x10
|
|
+
|
|
+struct abis_om_obj_inst {
|
|
+ guint8 bts_nr;
|
|
+ guint8 trx_nr;
|
|
+ guint8 ts_nr;
|
|
+} __attribute__ ((packed));
|
|
+
|
|
+struct abis_om_fom_hdr {
|
|
+ guint8 msg_type;
|
|
+ guint8 obj_class;
|
|
+ struct abis_om_obj_inst obj_inst;
|
|
+ guint8 data[0];
|
|
+} __attribute__ ((packed));
|
|
+
|
|
+#define ABIS_OM_FOM_HDR_SIZE (sizeof(struct abis_om_hdr) + sizeof(struct abis_om_fom_hdr))
|
|
+
|
|
+/* Section 9.1: Message Types */
|
|
+enum abis_nm_msgtype {
|
|
+ /* SW Download Management Messages */
|
|
+ NM_MT_LOAD_INIT = 0x01,
|
|
+ NM_MT_LOAD_INIT_ACK,
|
|
+ NM_MT_LOAD_INIT_NACK,
|
|
+ NM_MT_LOAD_SEG,
|
|
+ NM_MT_LOAD_SEG_ACK,
|
|
+ NM_MT_LOAD_ABORT,
|
|
+ NM_MT_LOAD_END,
|
|
+ NM_MT_LOAD_END_ACK,
|
|
+ NM_MT_LOAD_END_NACK,
|
|
+ NM_MT_SW_ACT_REQ, /* BTS->BSC */
|
|
+ NM_MT_SW_ACT_REQ_ACK,
|
|
+ NM_MT_SW_ACT_REQ_NACK,
|
|
+ NM_MT_ACTIVATE_SW, /* BSC->BTS */
|
|
+ NM_MT_ACTIVATE_SW_ACK,
|
|
+ NM_MT_ACTIVATE_SW_NACK,
|
|
+ NM_MT_SW_ACTIVATED_REP, /* 0x10 */
|
|
+ /* A-bis Interface Management Messages */
|
|
+ NM_MT_ESTABLISH_TEI = 0x21,
|
|
+ NM_MT_ESTABLISH_TEI_ACK,
|
|
+ NM_MT_ESTABLISH_TEI_NACK,
|
|
+ NM_MT_CONN_TERR_SIGN,
|
|
+ NM_MT_CONN_TERR_SIGN_ACK,
|
|
+ NM_MT_CONN_TERR_SIGN_NACK,
|
|
+ NM_MT_DISC_TERR_SIGN,
|
|
+ NM_MT_DISC_TERR_SIGN_ACK,
|
|
+ NM_MT_DISC_TERR_SIGN_NACK,
|
|
+ NM_MT_CONN_TERR_TRAF,
|
|
+ NM_MT_CONN_TERR_TRAF_ACK,
|
|
+ NM_MT_CONN_TERR_TRAF_NACK,
|
|
+ NM_MT_DISC_TERR_TRAF,
|
|
+ NM_MT_DISC_TERR_TRAF_ACK,
|
|
+ NM_MT_DISC_TERR_TRAF_NACK,
|
|
+ /* Transmission Management Messages */
|
|
+ NM_MT_CONN_MDROP_LINK = 0x31,
|
|
+ NM_MT_CONN_MDROP_LINK_ACK,
|
|
+ NM_MT_CONN_MDROP_LINK_NACK,
|
|
+ NM_MT_DISC_MDROP_LINK,
|
|
+ NM_MT_DISC_MDROP_LINK_ACK,
|
|
+ NM_MT_DISC_MDROP_LINK_NACK,
|
|
+ /* Air Interface Management Messages */
|
|
+ NM_MT_SET_BTS_ATTR = 0x41,
|
|
+ NM_MT_SET_BTS_ATTR_ACK,
|
|
+ NM_MT_SET_BTS_ATTR_NACK,
|
|
+ NM_MT_SET_RADIO_ATTR,
|
|
+ NM_MT_SET_RADIO_ATTR_ACK,
|
|
+ NM_MT_SET_RADIO_ATTR_NACK,
|
|
+ NM_MT_SET_CHAN_ATTR,
|
|
+ NM_MT_SET_CHAN_ATTR_ACK,
|
|
+ NM_MT_SET_CHAN_ATTR_NACK,
|
|
+ /* Test Management Messages */
|
|
+ NM_MT_PERF_TEST = 0x51,
|
|
+ NM_MT_PERF_TEST_ACK,
|
|
+ NM_MT_PERF_TEST_NACK,
|
|
+ NM_MT_TEST_REP,
|
|
+ NM_MT_SEND_TEST_REP,
|
|
+ NM_MT_SEND_TEST_REP_ACK,
|
|
+ NM_MT_SEND_TEST_REP_NACK,
|
|
+ NM_MT_STOP_TEST,
|
|
+ NM_MT_STOP_TEST_ACK,
|
|
+ NM_MT_STOP_TEST_NACK,
|
|
+ /* State Management and Event Report Messages */
|
|
+ NM_MT_STATECHG_EVENT_REP = 0x61,
|
|
+ NM_MT_FAILURE_EVENT_REP,
|
|
+ NM_MT_STOP_EVENT_REP,
|
|
+ NM_MT_STOP_EVENT_REP_ACK,
|
|
+ NM_MT_STOP_EVENT_REP_NACK,
|
|
+ NM_MT_REST_EVENT_REP,
|
|
+ NM_MT_REST_EVENT_REP_ACK,
|
|
+ NM_MT_REST_EVENT_REP_NACK,
|
|
+ NM_MT_CHG_ADM_STATE,
|
|
+ NM_MT_CHG_ADM_STATE_ACK,
|
|
+ NM_MT_CHG_ADM_STATE_NACK,
|
|
+ NM_MT_CHG_ADM_STATE_REQ,
|
|
+ NM_MT_CHG_ADM_STATE_REQ_ACK,
|
|
+ NM_MT_CHG_ADM_STATE_REQ_NACK,
|
|
+ NM_MT_REP_OUTST_ALARMS = 0x93,
|
|
+ NM_MT_REP_OUTST_ALARMS_ACK,
|
|
+ NM_MT_REP_OUTST_ALARMS_NACK,
|
|
+ /* Equipment Management Messages */
|
|
+ NM_MT_CHANGEOVER = 0x71,
|
|
+ NM_MT_CHANGEOVER_ACK,
|
|
+ NM_MT_CHANGEOVER_NACK,
|
|
+ NM_MT_OPSTART,
|
|
+ NM_MT_OPSTART_ACK,
|
|
+ NM_MT_OPSTART_NACK,
|
|
+ NM_MT_REINIT,
|
|
+ NM_MT_REINIT_ACK,
|
|
+ NM_MT_REINIT_NACK,
|
|
+ NM_MT_SET_SITE_OUT, /* BS11: get alarm ?!? */
|
|
+ NM_MT_SET_SITE_OUT_ACK,
|
|
+ NM_MT_SET_SITE_OUT_NACK,
|
|
+ NM_MT_CHG_HW_CONF = 0x90,
|
|
+ NM_MT_CHG_HW_CONF_ACK,
|
|
+ NM_MT_CHG_HW_CONF_NACK,
|
|
+ /* Measurement Management Messages */
|
|
+ NM_MT_MEAS_RES_REQ = 0x8a,
|
|
+ NM_MT_MEAS_RES_RESP,
|
|
+ NM_MT_STOP_MEAS,
|
|
+ NM_MT_START_MEAS,
|
|
+ /* Other Messages */
|
|
+ NM_MT_GET_ATTR = 0x81,
|
|
+ NM_MT_GET_ATTR_RESP,
|
|
+ NM_MT_GET_ATTR_NACK,
|
|
+ NM_MT_SET_ALARM_THRES,
|
|
+ NM_MT_SET_ALARM_THRES_ACK,
|
|
+ NM_MT_SET_ALARM_THRES_NACK,
|
|
+
|
|
+ NM_MT_IPACC_RESTART = 0x87,
|
|
+ NM_MT_IPACC_RESTART_ACK,
|
|
+};
|
|
+
|
|
+enum abis_nm_msgtype_bs11 {
|
|
+ NM_MT_BS11_RESET_RESOURCE = 0x74,
|
|
+
|
|
+ NM_MT_BS11_BEGIN_DB_TX = 0xa3,
|
|
+ NM_MT_BS11_BEGIN_DB_TX_ACK,
|
|
+ NM_MT_BS11_BEGIN_DB_TX_NACK,
|
|
+ NM_MT_BS11_END_DB_TX = 0xa6,
|
|
+ NM_MT_BS11_END_DB_TX_ACK,
|
|
+ NM_MT_BS11_END_DB_TX_NACK,
|
|
+ NM_MT_BS11_CREATE_OBJ = 0xa9,
|
|
+ NM_MT_BS11_CREATE_OBJ_ACK,
|
|
+ NM_MT_BS11_CREATE_OBJ_NACK,
|
|
+ NM_MT_BS11_DELETE_OBJ = 0xac,
|
|
+ NM_MT_BS11_DELETE_OBJ_ACK,
|
|
+ NM_MT_BS11_DELETE_OBJ_NACK,
|
|
+
|
|
+ NM_MT_BS11_SET_ATTR = 0xd0,
|
|
+ NM_MT_BS11_SET_ATTR_ACK,
|
|
+ NM_MT_BS11_SET_ATTR_NACK,
|
|
+ NM_MT_BS11_LMT_SESSION = 0xdc,
|
|
+
|
|
+ NM_MT_BS11_GET_STATE = 0xe3,
|
|
+ NM_MT_BS11_GET_STATE_ACK,
|
|
+ NM_MT_BS11_LMT_LOGON = 0xe5,
|
|
+ NM_MT_BS11_LMT_LOGON_ACK,
|
|
+ NM_MT_BS11_RESTART = 0xe7,
|
|
+ NM_MT_BS11_RESTART_ACK,
|
|
+ NM_MT_BS11_DISCONNECT = 0xe9,
|
|
+ NM_MT_BS11_DISCONNECT_ACK,
|
|
+ NM_MT_BS11_LMT_LOGOFF = 0xec,
|
|
+ NM_MT_BS11_LMT_LOGOFF_ACK,
|
|
+ NM_MT_BS11_RECONNECT = 0xf1,
|
|
+ NM_MT_BS11_RECONNECT_ACK,
|
|
+};
|
|
+
|
|
+enum abis_nm_msgtype_ipacc {
|
|
+ NM_MT_IPACC_RSL_CONNECT = 0xe0,
|
|
+ NM_MT_IPACC_RSL_CONNECT_ACK,
|
|
+ NM_MT_IPACC_RSL_CONNECT_NACK,
|
|
+ NM_MT_IPACC_RSL_DISCONNECT = 0xe3,
|
|
+ NM_MT_IPACC_RSL_DISCONNECT_ACK,
|
|
+ NM_MT_IPACC_RSL_DISCONNECT_NACK,
|
|
+ NM_MT_IPACC_CONN_TRAF = 0xe6,
|
|
+ NM_MT_IPACC_CONN_TRAF_ACK,
|
|
+ NM_MT_IPACC_CONN_TRAF_NACK,
|
|
+ NM_MT_IPACC_DISC_TRAF = 0xe9,
|
|
+ NM_MT_IPACC_DISC_TRAF_ACK,
|
|
+ NM_MT_IPACC_DISC_TRAF_NACK,
|
|
+ NM_MT_IPACC_DEF_BOOT_SW = 0xec,
|
|
+ NM_MT_IPACC_DEF_BOOT_SW_ACK,
|
|
+ NM_MT_IPACC_DEF_BOOT_SW_NACK,
|
|
+ NM_MT_IPACC_SET_NVATTR = 0xef,
|
|
+ NM_MT_IPACC_SET_NVATTR_ACK,
|
|
+ NM_MT_IPACC_SET_NVATTR_NACK,
|
|
+ NM_MT_IPACC_GET_NVATTR = 0xf2,
|
|
+ NM_MT_IPACC_GET_NVATTR_ACK,
|
|
+ NM_MT_IPACC_GET_NVATTR_NACK,
|
|
+ NM_MT_IPACC_SET_ATTR = 0xf5,
|
|
+ NM_MT_IPACC_SET_ATTR_ACK,
|
|
+ NM_MT_IPACC_SET_ATTR_NACK,
|
|
+ NM_MT_IPACC_ATTR_CHG_EVT = 0xf8,
|
|
+ NM_MT_IPACC_SW_DEACT = 0xf9,
|
|
+ NM_MT_IPACC_SW_DEACT_ACK,
|
|
+ NM_MT_IPACC_SW_DEACT_NACK,
|
|
+ NM_MT_IPACC_MEAS_RES_REQ_NACK = 0xfc,
|
|
+ NM_MT_IPACC_START_MEAS_NACK,
|
|
+ NM_MT_IPACC_STOP_MEAS_NACK,
|
|
+};
|
|
+
|
|
+enum abis_nm_bs11_cell_alloc {
|
|
+ NM_BS11_CANR_GSM = 0x00,
|
|
+ NM_BS11_CANR_DCS1800 = 0x01,
|
|
+};
|
|
+
|
|
+/* Section 9.2: Object Class */
|
|
+enum abis_nm_obj_class {
|
|
+ NM_OC_SITE_MANAGER = 0x00,
|
|
+ NM_OC_BTS,
|
|
+ NM_OC_RADIO_CARRIER,
|
|
+ NM_OC_CHANNEL,
|
|
+ NM_OC_BASEB_TRANSC,
|
|
+ /* RFU: 05-FE */
|
|
+ NM_OC_BS11_ADJC = 0xa0,
|
|
+ NM_OC_BS11_HANDOVER = 0xa1,
|
|
+ NM_OC_BS11_PWR_CTRL = 0xa2,
|
|
+ NM_OC_BS11_BTSE = 0xa3, /* LMT? */
|
|
+ NM_OC_BS11_RACK = 0xa4,
|
|
+ NM_OC_BS11 = 0xa5, /* 01: ALCO */
|
|
+ NM_OC_BS11_TEST = 0xa6,
|
|
+ NM_OC_BS11_ENVABTSE = 0xa8,
|
|
+ NM_OC_BS11_BPORT = 0xa9,
|
|
+
|
|
+ NM_OC_GPRS_NSE = 0xf0,
|
|
+ NM_OC_GPRS_CELL = 0xf1,
|
|
+ NM_OC_GPRS_NSVC0 = 0xf2,
|
|
+ NM_OC_GPRS_NSVC1 = 0xf3,
|
|
+
|
|
+ NM_OC_NULL = 0xff,
|
|
+};
|
|
+
|
|
+/* Section 9.4: Attributes */
|
|
+enum abis_nm_attr {
|
|
+ NM_ATT_ABIS_CHANNEL = 0x01,
|
|
+ NM_ATT_ADD_INFO,
|
|
+ NM_ATT_ADD_TEXT,
|
|
+ NM_ATT_ADM_STATE,
|
|
+ NM_ATT_ARFCN_LIST,
|
|
+ NM_ATT_AUTON_REPORT,
|
|
+ NM_ATT_AVAIL_STATUS,
|
|
+ NM_ATT_BCCH_ARFCN,
|
|
+ NM_ATT_BSIC,
|
|
+ NM_ATT_BTS_AIR_TIMER,
|
|
+ NM_ATT_CCCH_L_I_P,
|
|
+ NM_ATT_CCCH_L_T,
|
|
+ NM_ATT_CHAN_COMB,
|
|
+ NM_ATT_CONN_FAIL_CRIT,
|
|
+ NM_ATT_DEST,
|
|
+ /* res */
|
|
+ NM_ATT_EVENT_TYPE = 0x11, /* BS11: file data ?!? */
|
|
+ NM_ATT_FILE_ID,
|
|
+ NM_ATT_FILE_VERSION,
|
|
+ NM_ATT_GSM_TIME,
|
|
+ NM_ATT_HSN,
|
|
+ NM_ATT_HW_CONFIG,
|
|
+ NM_ATT_HW_DESC,
|
|
+ NM_ATT_INTAVE_PARAM,
|
|
+ NM_ATT_INTERF_BOUND,
|
|
+ NM_ATT_LIST_REQ_ATTR,
|
|
+ NM_ATT_MAIO,
|
|
+ NM_ATT_MANUF_STATE,
|
|
+ NM_ATT_MANUF_THRESH,
|
|
+ NM_ATT_MANUF_ID,
|
|
+ NM_ATT_MAX_TA,
|
|
+ NM_ATT_MDROP_LINK, /* 0x20 */
|
|
+ NM_ATT_MDROP_NEXT,
|
|
+ NM_ATT_NACK_CAUSES,
|
|
+ NM_ATT_NY1,
|
|
+ NM_ATT_OPER_STATE,
|
|
+ NM_ATT_OVERL_PERIOD,
|
|
+ NM_ATT_PHYS_CONF,
|
|
+ NM_ATT_POWER_CLASS,
|
|
+ NM_ATT_POWER_THRESH,
|
|
+ NM_ATT_PROB_CAUSE,
|
|
+ NM_ATT_RACH_B_THRESH,
|
|
+ NM_ATT_LDAVG_SLOTS,
|
|
+ NM_ATT_RAD_SUBC,
|
|
+ NM_ATT_RF_MAXPOWR_R,
|
|
+ NM_ATT_SITE_INPUTS,
|
|
+ NM_ATT_SITE_OUTPUTS,
|
|
+ NM_ATT_SOURCE, /* 0x30 */
|
|
+ NM_ATT_SPEC_PROB,
|
|
+ NM_ATT_START_TIME,
|
|
+ NM_ATT_T200,
|
|
+ NM_ATT_TEI,
|
|
+ NM_ATT_TEST_DUR,
|
|
+ NM_ATT_TEST_NO,
|
|
+ NM_ATT_TEST_REPORT,
|
|
+ NM_ATT_VSWR_THRESH,
|
|
+ NM_ATT_WINDOW_SIZE,
|
|
+ /* Res */
|
|
+ NM_ATT_BS11_RSSI_OFFS = 0x3d,
|
|
+ NM_ATT_BS11_TXPWR = 0x3e,
|
|
+ NM_ATT_BS11_DIVERSITY = 0x3f,
|
|
+ /* Res */
|
|
+ NM_ATT_TSC = 0x40,
|
|
+ NM_ATT_SW_CONFIG,
|
|
+ NM_ATT_SW_DESCR,
|
|
+ NM_ATT_SEVERITY,
|
|
+ NM_ATT_GET_ARI,
|
|
+ NM_ATT_HW_CONF_CHG,
|
|
+ NM_ATT_OUTST_ALARM,
|
|
+ NM_ATT_FILE_DATA,
|
|
+ NM_ATT_MEAS_RES,
|
|
+ NM_ATT_MEAS_TYPE,
|
|
+};
|
|
+
|
|
+enum abis_nm_attr_bs11 {
|
|
+ NM_ATT_BS11_OM_LAPD_REL_TIMER = 0x02,
|
|
+ NM_ATT_BS11_EMERG_TIMER1 = 0x42,
|
|
+ NM_ATT_BS11_EMERG_TIMER2 = 0x44,
|
|
+ NM_ATT_BS11_ESN_FW_CODE_NO = 0x4c,
|
|
+ NM_ATT_BS11_ESN_HW_CODE_NO = 0x4f,
|
|
+
|
|
+ NM_ATT_BS11_FILE_DATA = NM_ATT_EVENT_TYPE,
|
|
+
|
|
+ NM_ATT_BS11_ESN_PCB_SERIAL = 0x55,
|
|
+ NM_ATT_BS11_EXCESSIVE_DISTANCE = 0x58,
|
|
+
|
|
+ NM_ATT_BS11_ALL_TEST_CATG = 0x60,
|
|
+ NM_ATT_BS11_BTSLS_HOPPING,
|
|
+ NM_ATT_BS11_CELL_ALLOC_NR,
|
|
+ NM_ATT_BS11_CELL_GLOBAL_ID,
|
|
+ NM_ATT_BS11_ENA_INTERF_CLASS = 0x66,
|
|
+ NM_ATT_BS11_ENA_INT_INTEC_HANDO = 0x67,
|
|
+ NM_ATT_BS11_ENA_INT_INTRC_HANDO = 0x68,
|
|
+ NM_ATT_BS11_ENA_MS_PWR_CTRL = 0x69,
|
|
+ NM_ATT_BS11_ENA_PWR_BDGT_HO = 0x6a,
|
|
+ NM_ATT_BS11_ENA_PWR_CTRL_RLFW = 0x6b,
|
|
+ NM_ATT_BS11_ENA_RXLEV_HO = 0x6c,
|
|
+ NM_ATT_BS11_ENA_RXQUAL_HO = 0x6d,
|
|
+ NM_ATT_BS11_FACCH_QUAL = 0x6e,
|
|
+
|
|
+ NM_ATT_BS11_RF_RES_IND_PER = 0x8f,
|
|
+
|
|
+ NM_ATT_BS11_RX_LEV_MIN_CELL = 0x90,
|
|
+ NM_ATT_BS11_ABIS_EXT_TIME = 0x91,
|
|
+ NM_ATT_BS11_TIMER_HO_REQUEST = 0x92,
|
|
+ NM_ATT_BS11_TIMER_NCELL = 0x93,
|
|
+ NM_ATT_BS11_TSYNC = 0x94,
|
|
+ NM_ATT_BS11_TTRAU = 0x95,
|
|
+ NM_ATT_BS11_EMRG_CFG_MEMBER = 0x9b,
|
|
+ NM_ATT_BS11_TRX_AREA = 0x9f,
|
|
+
|
|
+ NM_ATT_BS11_BCCH_RECONF = 0xd7,
|
|
+ NM_ATT_BS11_BIT_ERR_THESH = 0xa0,
|
|
+ NM_ATT_BS11_BOOT_SW_VERS = 0xa1,
|
|
+ NM_ATT_BS11_CCLK_ACCURACY = 0xa3,
|
|
+ NM_ATT_BS11_CCLK_TYPE = 0xa4,
|
|
+ NM_ATT_BS11_INP_IMPEDANCE = 0xaa,
|
|
+ NM_ATT_BS11_L1_PROT_TYPE = 0xab,
|
|
+ NM_ATT_BS11_LINE_CFG = 0xac,
|
|
+ NM_ATT_BS11_LI_PORT_1 = 0xad,
|
|
+ NM_ATT_BS11_LI_PORT_2 = 0xae,
|
|
+
|
|
+ NM_ATT_BS11_L1_REM_ALM_TYPE = 0xb0,
|
|
+ NM_ATT_BS11_SW_LOAD_INTENDED = 0xbb,
|
|
+ NM_ATT_BS11_SW_LOAD_SAFETY = 0xbc,
|
|
+ NM_ATT_BS11_SW_LOAD_STORED = 0xbd,
|
|
+
|
|
+ NM_ATT_BS11_VENDOR_NAME = 0xc1,
|
|
+ NM_ATT_BS11_HOPPING_MODE = 0xc5,
|
|
+ NM_ATT_BS11_LMT_LOGON_SESSION = 0xc6,
|
|
+ NM_ATT_BS11_LMT_LOGIN_TIME = 0xc7,
|
|
+ NM_ATT_BS11_LMT_USER_ACC_LEV = 0xc8,
|
|
+ NM_ATT_BS11_LMT_USER_NAME = 0xc9,
|
|
+
|
|
+ NM_ATT_BS11_L1_CONTROL_TS = 0xd8,
|
|
+ NM_ATT_BS11_RADIO_MEAS_GRAN = 0xdc, /* in SACCH multiframes */
|
|
+ NM_ATT_BS11_RADIO_MEAS_REP = 0xdd,
|
|
+
|
|
+ NM_ATT_BS11_SH_LAPD_INT_TIMER = 0xe8,
|
|
+
|
|
+ NM_ATT_BS11_BTS_STATE = 0xf0,
|
|
+ NM_ATT_BS11_E1_STATE = 0xf1,
|
|
+ NM_ATT_BS11_PLL = 0xf2,
|
|
+ NM_ATT_BS11_RX_OFFSET = 0xf3,
|
|
+ NM_ATT_BS11_ANT_TYPE = 0xf4,
|
|
+ NM_ATT_BS11_PLL_MODE = 0xfc,
|
|
+ NM_ATT_BS11_PASSWORD = 0xfd,
|
|
+};
|
|
+
|
|
+enum abis_nm_attr_ipa {
|
|
+ NM_ATT_IPACC_DST_IP = 0x80,
|
|
+ NM_ATT_IPACC_DST_IP_PORT = 0x81,
|
|
+ NM_ATT_IPACC_SSRC = 0x82, /* RTP Sync Source */
|
|
+ NM_ATT_IPACC_RTP_PAYLD_TYPE = 0x83,
|
|
+ NM_ATT_IPACC_BASEB_ID = 0x84,
|
|
+ NM_ATT_IPACC_STREAM_ID = 0x85,
|
|
+ NM_ATT_IPACC_NV_FLAGS = 0x86,
|
|
+ NM_ATT_IPACC_FREQ_CTRL = 0x87,
|
|
+ NM_ATT_IPACC_PRIM_OML_CFG = 0x88,
|
|
+ NM_ATT_IPACC_SEC_OML_CFG = 0x89,
|
|
+ NM_ATT_IPACC_IP_IF_CFG = 0x8a, /* IP interface */
|
|
+ NM_ATT_IPACC_IP_GW_CFG = 0x8b, /* IP gateway */
|
|
+ NM_ATT_IPACC_IN_SERV_TIME = 0x8c,
|
|
+ NM_ATT_IPACC_TRX_BTS_ASS = 0x8d,
|
|
+ NM_ATT_IPACC_LOCATION = 0x8e, /* string describing location */
|
|
+ NM_ATT_IPACC_PAGING_CFG = 0x8f,
|
|
+ NM_ATT_IPACC_FILE_DATA = 0x90,
|
|
+ NM_ATT_IPACC_UNIT_ID = 0x91, /* Site/BTS/TRX */
|
|
+ NM_ATT_IPACC_PARENT_UNIT_ID = 0x92,
|
|
+ NM_ATT_IPACC_UNIT_NAME = 0x93, /* default: nbts-<mac-as-string> */
|
|
+ NM_ATT_IPACC_SNMP_CFG = 0x94,
|
|
+ NM_ATT_IPACC_PRIM_OML_CFG_LIST = 0x95,
|
|
+ NM_ATT_IPACC_PRIM_OML_FB_TOUT = 0x96, /* fallback timeout */
|
|
+ NM_ATT_IPACC_CUR_SW_CFG = 0x97,
|
|
+ NM_ATT_IPACC_TIMING_BUS = 0x98,
|
|
+ NM_ATT_IPACC_CGI = 0x99, /* Cell Global ID */
|
|
+ NM_ATT_IPACC_RAC = 0x9a,
|
|
+ NM_ATT_IPACC_OBJ_VERSION = 0x9b,
|
|
+ NM_ATT_IPACC_GPRS_PAGING_CFG = 0x9c,
|
|
+ NM_ATT_IPACC_NSEI = 0x9d,
|
|
+ NM_ATT_IPACC_BVCI = 0x9e,
|
|
+ NM_ATT_IPACC_NSVCI = 0x9f,
|
|
+ NM_ATT_IPACC_NS_CFG = 0xa0,
|
|
+ NM_ATT_IPACC_BSSGP_CFG = 0xa1,
|
|
+ NM_ATT_IPACC_NS_LINK_CFG = 0xa2,
|
|
+ NM_ATT_IPACC_RLC_CFG = 0xa3,
|
|
+ NM_ATT_IPACC_ALM_THRESH_LIST = 0xa4,
|
|
+ NM_ATT_IPACC_MONIT_VAL_LIST = 0xa5,
|
|
+ NM_ATT_IPACC_TIB_CONTROL = 0xa6,
|
|
+ NM_ATT_IPACC_SUPP_FEATURES = 0xa7,
|
|
+ NM_ATT_IPACC_CODING_SCHEMES = 0xa8,
|
|
+ NM_ATT_IPACC_RLC_CFG_2 = 0xa9,
|
|
+ NM_ATT_IPACC_HEARTB_TOUT = 0xaa,
|
|
+ NM_ATT_IPACC_UPTIME = 0xab,
|
|
+ NM_ATT_IPACC_RLC_CFG_3 = 0xac,
|
|
+ NM_ATT_IPACC_SSL_CFG = 0xad,
|
|
+ NM_ATT_IPACC_SEC_POSSIBLE = 0xae,
|
|
+ NM_ATT_IPACC_IML_SSL_STATE = 0xaf,
|
|
+ NM_ATT_IPACC_REVOC_DATE = 0xb0,
|
|
+};
|
|
+
|
|
+/* Section 9.4.4: Administrative State */
|
|
+enum abis_nm_adm_state {
|
|
+ NM_STATE_LOCKED = 0x01,
|
|
+ NM_STATE_UNLOCKED = 0x02,
|
|
+ NM_STATE_SHUTDOWN = 0x03,
|
|
+ NM_STATE_NULL = 0xff,
|
|
+};
|
|
+
|
|
+/* Section 9.4.13: Channel Combination */
|
|
+enum abis_nm_chan_comb {
|
|
+ NM_CHANC_TCHFull = 0x00,
|
|
+ NM_CHANC_TCHHalf = 0x01,
|
|
+ NM_CHANC_TCHHalf2 = 0x02,
|
|
+ NM_CHANC_SDCCH = 0x03,
|
|
+ NM_CHANC_mainBCCH = 0x04,
|
|
+ NM_CHANC_BCCHComb = 0x05,
|
|
+ NM_CHANC_BCCH = 0x06,
|
|
+ NM_CHANC_BCCH_CBCH = 0x07,
|
|
+ NM_CHANC_SDCCH_CBCH = 0x08,
|
|
+};
|
|
+
|
|
+/* Section 9.4.16: Event Type */
|
|
+enum abis_nm_event_type {
|
|
+ NM_EVT_COMM_FAIL = 0x00,
|
|
+ NM_EVT_QOS_FAIL = 0x01,
|
|
+ NM_EVT_PROC_FAIL = 0x02,
|
|
+ NM_EVT_EQUIP_FAIL = 0x03,
|
|
+ NM_EVT_ENV_FAIL = 0x04,
|
|
+};
|
|
+
|
|
+/* Section: 9.4.63: Perceived Severity */
|
|
+enum abis_nm_severity {
|
|
+ NM_SEVER_CEASED = 0x00,
|
|
+ NM_SEVER_CRITICAL = 0x01,
|
|
+ NM_SEVER_MAJOR = 0x02,
|
|
+ NM_SEVER_MINOR = 0x03,
|
|
+ NM_SEVER_WARNING = 0x04,
|
|
+ NM_SEVER_INDETERMINATE = 0x05,
|
|
+};
|
|
+
|
|
+/* Section 9.4.43: Probable Cause Type */
|
|
+enum abis_nm_pcause_type {
|
|
+ NM_PCAUSE_T_X721 = 0x01,
|
|
+ NM_PCAUSE_T_GSM = 0x02,
|
|
+ NM_PCAUSE_T_MANUF = 0x03,
|
|
+};
|
|
+
|
|
+/* Section 9.4.36: NACK Causes */
|
|
+enum abis_nm_nack_cause {
|
|
+ /* General Nack Causes */
|
|
+ NM_NACK_INCORR_STRUCT = 0x01,
|
|
+ NM_NACK_MSGTYPE_INVAL = 0x02,
|
|
+ NM_NACK_OBJCLASS_INVAL = 0x05,
|
|
+ NM_NACK_OBJCLASS_NOTSUPP = 0x06,
|
|
+ NM_NACK_BTSNR_UNKN = 0x07,
|
|
+ NM_NACK_TRXNR_UNKN = 0x08,
|
|
+ NM_NACK_OBJINST_UNKN = 0x09,
|
|
+ NM_NACK_ATTRID_INVAL = 0x0c,
|
|
+ NM_NACK_ATTRID_NOTSUPP = 0x0d,
|
|
+ NM_NACK_PARAM_RANGE = 0x0e,
|
|
+ NM_NACK_ATTRLIST_INCONSISTENT = 0x0f,
|
|
+ NM_NACK_SPEC_IMPL_NOTSUPP = 0x10,
|
|
+ NM_NACK_CANT_PERFORM = 0x11,
|
|
+ /* Specific Nack Causes */
|
|
+ NM_NACK_RES_NOTIMPL = 0x19,
|
|
+ NM_NACK_RES_NOTAVAIL = 0x1a,
|
|
+ NM_NACK_FREQ_NOTAVAIL = 0x1b,
|
|
+ NM_NACK_TEST_NOTSUPP = 0x1c,
|
|
+ NM_NACK_CAPACITY_RESTR = 0x1d,
|
|
+ NM_NACK_PHYSCFG_NOTPERFORM = 0x1e,
|
|
+ NM_NACK_TEST_NOTINIT = 0x1f,
|
|
+ NM_NACK_PHYSCFG_NOTRESTORE = 0x20,
|
|
+ NM_NACK_TEST_NOSUCH = 0x21,
|
|
+ NM_NACK_TEST_NOSTOP = 0x22,
|
|
+ NM_NACK_MSGINCONSIST_PHYSCFG = 0x23,
|
|
+ NM_NACK_FILE_INCOMPLETE = 0x25,
|
|
+ NM_NACK_FILE_NOTAVAIL = 0x26,
|
|
+ NM_NACK_FILE_NOTACTIVATE = 0x27,
|
|
+ NM_NACK_REQ_NOT_GRANT = 0x28,
|
|
+ NM_NACK_WAIT = 0x29,
|
|
+ NM_NACK_NOTH_REPORT_EXIST = 0x2a,
|
|
+ NM_NACK_MEAS_NOTSUPP = 0x2b,
|
|
+ NM_NACK_MEAS_NOTSTART = 0x2c,
|
|
+};
|
|
+
|
|
+/* Section 9.4.1 */
|
|
+struct abis_nm_channel {
|
|
+ guint8 attrib;
|
|
+ guint8 bts_port;
|
|
+ guint8 timeslot;
|
|
+ guint8 subslot;
|
|
+} __attribute__ ((packed));
|
|
+
|
|
+/* Siemens BS-11 specific objects in the SienemsHW (0xA5) object class */
|
|
+enum abis_bs11_objtype {
|
|
+ BS11_OBJ_ALCO = 0x01,
|
|
+ BS11_OBJ_BBSIG = 0x02, /* obj_class: 0,1 */
|
|
+ BS11_OBJ_TRX1 = 0x03, /* only DEACTIVATE TRX1 */
|
|
+ BS11_OBJ_CCLK = 0x04,
|
|
+ BS11_OBJ_GPSU = 0x06,
|
|
+ BS11_OBJ_LI = 0x07,
|
|
+ BS11_OBJ_PA = 0x09, /* obj_class: 0, 1*/
|
|
+};
|
|
+
|
|
+enum abis_bs11_trx_power {
|
|
+ BS11_TRX_POWER_GSM_2W = 0x06,
|
|
+ BS11_TRX_POWER_GSM_250mW= 0x07,
|
|
+ BS11_TRX_POWER_GSM_80mW = 0x08,
|
|
+ BS11_TRX_POWER_GSM_30mW = 0x09,
|
|
+ BS11_TRX_POWER_DCS_3W = 0x0a,
|
|
+ BS11_TRX_POWER_DCS_1W6 = 0x0b,
|
|
+ BS11_TRX_POWER_DCS_500mW= 0x0c,
|
|
+ BS11_TRX_POWER_DCS_160mW= 0x0d,
|
|
+};
|
|
+
|
|
+enum abis_bs11_li_pll_mode {
|
|
+ BS11_LI_PLL_LOCKED = 2,
|
|
+ BS11_LI_PLL_STANDALONE = 3,
|
|
+};
|
|
+
|
|
+enum abis_bs11_phase {
|
|
+ BS11_STATE_SOFTWARE_RQD = 0x01,
|
|
+ BS11_STATE_LOAD_SMU_INTENDED = 0x11,
|
|
+ BS11_STATE_LOAD_SMU_SAFETY = 0x21,
|
|
+ BS11_STATE_LOAD_FAILED = 0x31,
|
|
+ BS11_STATE_LOAD_DIAGNOSTIC = 0x41,
|
|
+ BS11_STATE_WARM_UP = 0x51,
|
|
+ BS11_STATE_WARM_UP_2 = 0x52,
|
|
+ BS11_STATE_WAIT_MIN_CFG = 0x62,
|
|
+ BS11_STATE_MAINTENANCE = 0x72,
|
|
+ BS11_STATE_LOAD_MBCCU = 0x92,
|
|
+ BS11_STATE_WAIT_MIN_CFG_2 = 0xA2,
|
|
+ BS11_STATE_NORMAL = 0x03,
|
|
+ BS11_STATE_ABIS_LOAD = 0x13,
|
|
+};
|
|
+
|
|
+/* From openbsc/include/openbsc/tlv.h */
|
|
+enum tlv_type {
|
|
+ TLV_TYPE_UNKNOWN,
|
|
+ TLV_TYPE_FIXED,
|
|
+ TLV_TYPE_T,
|
|
+ TLV_TYPE_TV,
|
|
+ TLV_TYPE_TLV,
|
|
+ TLV_TYPE_TL16V,
|
|
+ TLV_TYPE_TLV16,
|
|
+};
|
|
+
|
|
+struct tlv_def {
|
|
+ enum tlv_type type;
|
|
+ u_int8_t fixed_len;
|
|
+};
|
|
+
|
|
+struct tlv_definition {
|
|
+ struct tlv_def def[0xff];
|
|
+};
|
|
+
|
|
+enum abis_nm_ipacc_test_no {
|
|
+ NM_IPACC_TESTNO_RLOOP_ANT = 0x01,
|
|
+ NM_IPACC_TESTNO_RLOOP_XCVR = 0x02,
|
|
+ NM_IPACC_TESTNO_FUNC_OBJ = 0x03,
|
|
+ NM_IPACC_TESTNO_CHAN_USAGE = 0x40,
|
|
+ NM_IPACC_TESTNO_BCCH_CHAN_USAGE = 0x41,
|
|
+ NM_IPACC_TESTNO_FREQ_SYNC = 0x42,
|
|
+ NM_IPACC_TESTNO_BCCH_INFO = 0x43,
|
|
+ NM_IPACC_TESTNO_TX_BEACON = 0x44,
|
|
+ NM_IPACC_TESTNO_SYSINFO_MONITOR = 0x45,
|
|
+ NM_IPACC_TESTNO_BCCCH_MONITOR = 0x46,
|
|
+};
|
|
+
|
|
+/* first byte after length inside NM_ATT_TEST_REPORT */
|
|
+enum abis_nm_ipacc_test_res {
|
|
+ NM_IPACC_TESTRES_SUCCESS = 0,
|
|
+ NM_IPACC_TESTRES_TIMEOUT = 1,
|
|
+ NM_IPACC_TESTRES_NO_CHANS = 2,
|
|
+ NM_IPACC_TESTRES_PARTIAL = 3,
|
|
+ NM_IPACC_TESTRES_STOPPED = 4,
|
|
+};
|
|
+
|
|
+/* internal IE inside NM_ATT_TEST_REPORT */
|
|
+enum abis_nm_ipacc_testres_ie {
|
|
+ NM_IPACC_TR_IE_FREQ_ERR_LIST = 3,
|
|
+ NM_IPACC_TR_IE_CHAN_USAGE = 4,
|
|
+ NM_IPACC_TR_IE_BCCH_INFO = 6,
|
|
+ NM_IPACC_TR_IE_RESULT_DETAILS = 8,
|
|
+ NM_IPACC_TR_IE_FREQ_ERR = 18,
|
|
+};
|
|
+
|
|
+/* From openbsc/src/abis_nm.c */
|
|
+static const struct tlv_definition nm_att_tlvdef_base = {
|
|
+ .def = {
|
|
+ [NM_ATT_ABIS_CHANNEL] = { TLV_TYPE_FIXED, 3 },
|
|
+ [NM_ATT_ADD_INFO] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_ADD_TEXT] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_ADM_STATE] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_ARFCN_LIST]= { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_AUTON_REPORT] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_AVAIL_STATUS] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_BCCH_ARFCN] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_BSIC] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_BTS_AIR_TIMER] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_CCCH_L_I_P] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_CCCH_L_T] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_CHAN_COMB] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_CONN_FAIL_CRIT] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_DEST] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_EVENT_TYPE] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_FILE_ID] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_FILE_VERSION] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_GSM_TIME] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_HSN] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_HW_CONFIG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_HW_DESC] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_INTAVE_PARAM] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_INTERF_BOUND] = { TLV_TYPE_FIXED, 6 },
|
|
+ [NM_ATT_LIST_REQ_ATTR] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_MAIO] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_MANUF_STATE] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_MANUF_THRESH] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_MANUF_ID] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_MAX_TA] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_MDROP_LINK] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_MDROP_NEXT] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_NACK_CAUSES] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_NY1] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_OPER_STATE] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_OVERL_PERIOD] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_PHYS_CONF] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_POWER_CLASS] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_POWER_THRESH] = { TLV_TYPE_FIXED, 3 },
|
|
+ [NM_ATT_PROB_CAUSE] = { TLV_TYPE_FIXED, 3 },
|
|
+ [NM_ATT_RACH_B_THRESH] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_LDAVG_SLOTS] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_RAD_SUBC] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_RF_MAXPOWR_R] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_SITE_INPUTS] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_SITE_OUTPUTS] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_SOURCE] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_SPEC_PROB] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_START_TIME] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_T200] = { TLV_TYPE_FIXED, 7 },
|
|
+ [NM_ATT_TEI] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_TEST_DUR] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_TEST_NO] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_TEST_REPORT] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_VSWR_THRESH] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_WINDOW_SIZE] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_TSC] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_SW_CONFIG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_SEVERITY] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_GET_ARI] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_HW_CONF_CHG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_OUTST_ALARM] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_FILE_DATA] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_MEAS_RES] = { TLV_TYPE_TL16V, 0 },
|
|
+
|
|
+ },
|
|
+};
|
|
+
|
|
+/* BS11 specifics */
|
|
+static const struct tlv_definition nm_att_tlvdev_bs11 = {
|
|
+ .def = {
|
|
+ /* different stndard IEs */
|
|
+ [NM_ATT_OUTST_ALARM] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_HW_DESC] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_ARFCN_LIST]= { TLV_TYPE_TLV16, 0 },
|
|
+
|
|
+ /* proprietary IEs */
|
|
+ [NM_ATT_BS11_ABIS_EXT_TIME] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_OM_LAPD_REL_TIMER]={ TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_BS11_SH_LAPD_INT_TIMER]={ TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_EMERG_TIMER1] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_EMERG_TIMER2] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_BTSLS_HOPPING] = { TLV_TYPE_FIXED, 1 },
|
|
+ [NM_ATT_BS11_CELL_ALLOC_NR] = { TLV_TYPE_FIXED, 1 },
|
|
+ [NM_ATT_BS11_ENA_INTERF_CLASS]= { TLV_TYPE_FIXED, 1 },
|
|
+ [NM_ATT_BS11_FACCH_QUAL] = { TLV_TYPE_FIXED, 1 },
|
|
+ [NM_ATT_BS11_TSYNC] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_BS11_TTRAU] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_BS11_EXCESSIVE_DISTANCE] = { TLV_TYPE_TLV, 1 },
|
|
+ [NM_ATT_BS11_HOPPING_MODE] = { TLV_TYPE_TLV, 1 },
|
|
+ [NM_ATT_BS11_RF_RES_IND_PER] = { TLV_TYPE_FIXED, 1 },
|
|
+ [NM_ATT_BS11_RADIO_MEAS_GRAN] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_RADIO_MEAS_REP] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_EMRG_CFG_MEMBER] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_TRX_AREA] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_ESN_FW_CODE_NO] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_ESN_HW_CODE_NO] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_ESN_PCB_SERIAL] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_BOOT_SW_VERS] = { TLV_TYPE_TLV, 0 },
|
|
+ [0x59] = { TLV_TYPE_TLV, 0 },
|
|
+ [0xd5] = { TLV_TYPE_TLV, 0 },
|
|
+ [0xa8] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_PASSWORD] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_TXPWR] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_RSSI_OFFS] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_LINE_CFG] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_BS11_L1_PROT_TYPE] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_BS11_BIT_ERR_THESH] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_BS11_DIVERSITY] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_LMT_LOGON_SESSION]={ TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_LMT_LOGIN_TIME] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_LMT_USER_ACC_LEV] ={ TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_LMT_USER_NAME] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_BTS_STATE] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_E1_STATE] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_PLL_MODE] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_PLL] = { TLV_TYPE_TLV, 0 },
|
|
+ [NM_ATT_BS11_CCLK_ACCURACY] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_BS11_CCLK_TYPE] = { TLV_TYPE_TV, 0 },
|
|
+ },
|
|
+};
|
|
+
|
|
+/* ip.access specifics */
|
|
+static const struct tlv_definition nm_att_tlvdef_ipa = {
|
|
+ .def = {
|
|
+ [NM_ATT_IPACC_DST_IP] = { TLV_TYPE_FIXED, 4 },
|
|
+ [NM_ATT_IPACC_DST_IP_PORT] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_IPACC_PRIM_OML_CFG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_NV_FLAGS] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_FREQ_CTRL] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_IPACC_SEC_OML_CFG] = { TLV_TYPE_FIXED, 6 },
|
|
+ [NM_ATT_IPACC_IP_IF_CFG] = { TLV_TYPE_FIXED, 8 },
|
|
+ [NM_ATT_IPACC_IP_GW_CFG] = { TLV_TYPE_FIXED, 12 },
|
|
+ [NM_ATT_IPACC_LOCATION] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_UNIT_ID] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_UNIT_NAME] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_SNMP_CFG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_ALM_THRESH_LIST]= { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_CUR_SW_CFG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_STREAM_ID] = { TLV_TYPE_TV, 0 },
|
|
+ [NM_ATT_IPACC_RAC] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_OBJ_VERSION] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_GPRS_PAGING_CFG] ={ TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_NSEI] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_BVCI] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_NSVCI] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_NS_CFG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_BSSGP_CFG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_NS_LINK_CFG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_RLC_CFG] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_SUPP_FEATURES] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_CODING_SCHEMES] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_RLC_CFG_2] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_RLC_CFG_3] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_PAGING_CFG] = { TLV_TYPE_FIXED, 2 },
|
|
+ [NM_ATT_IPACC_FILE_DATA] = { TLV_TYPE_TL16V, 0 },
|
|
+ [NM_ATT_IPACC_CGI] = { TLV_TYPE_TL16V, 0 },
|
|
+ },
|
|
+};
|
|
+
|
|
+#endif /* _NM_H */
|
|
--
|
|
1.7.3.4
|
|
|