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

Index: wireshark/epan/CMakeLists.txt
===================================================================
--- wireshark.orig/epan/CMakeLists.txt	2011-03-03 14:01:07.000000000 +0100
+++ wireshark/epan/CMakeLists.txt	2011-03-03 14:01:20.000000000 +0100
@@ -589,6 +589,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
Index: wireshark/epan/dissectors/Makefile.common
===================================================================
--- wireshark.orig/epan/dissectors/Makefile.common	2011-03-03 14:01:07.000000000 +0100
+++ wireshark/epan/dissectors/Makefile.common	2011-03-03 14:01:20.000000000 +0100
@@ -501,6 +501,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	\
Index: wireshark/epan/dissectors/packet-gsm_abis_oml.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ wireshark/epan/dissectors/packet-gsm_abis_oml.c	2011-03-06 13:12:30.000000000 +0100
@@ -0,0 +1,1776 @@
+/* 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 }
+};
+
+/* ANSI C does not allow selective initialization of arrays, for that reason,
+ * we initialize these three TLV definitions in proto_register_abis_oml(). */
+static struct tlv_definition nm_att_tlvdef_base;
+static struct tlv_definition nm_att_tlvdev_bs11;
+static struct tlv_definition nm_att_tlvdef_ipa;
+
+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;
+
+#define NM_ATT_TLVDEF_BASE(_attr, _type, _fixed_len)			\
+	nm_att_tlvdef_base.def[_attr].type = _type;			\
+	nm_att_tlvdef_base.def[_attr].fixed_len = _fixed_len;		\
+
+	/* From openbsc/src/abis_nm.c, converted to support ANSI C. */
+	NM_ATT_TLVDEF_BASE(NM_ATT_ABIS_CHANNEL,		TLV_TYPE_FIXED,	3);
+	NM_ATT_TLVDEF_BASE(NM_ATT_ADD_INFO,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_ADD_TEXT,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_ADM_STATE,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_ARFCN_LIST,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_AUTON_REPORT,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_AVAIL_STATUS,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_BCCH_ARFCN,		TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_BSIC,			TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_BTS_AIR_TIMER,	TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_CCCH_L_I_P,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_CCCH_L_T,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_CHAN_COMB,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_CONN_FAIL_CRIT,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_DEST,			TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_EVENT_TYPE,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_FILE_ID,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_FILE_VERSION,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_GSM_TIME,		TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_HSN,			TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_HW_CONFIG,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_HW_DESC,		TLV_TYPE_TLV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_INTAVE_PARAM,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_INTERF_BOUND,		TLV_TYPE_FIXED,	6);
+	NM_ATT_TLVDEF_BASE(NM_ATT_LIST_REQ_ATTR,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MAIO,			TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MANUF_STATE,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MANUF_THRESH,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MANUF_ID,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MAX_TA,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MDROP_LINK,		TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MDROP_NEXT,		TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_NACK_CAUSES,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_NY1,			TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_OPER_STATE,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_OVERL_PERIOD,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_PHYS_CONF,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_POWER_CLASS,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_POWER_THRESH,		TLV_TYPE_FIXED,	3);
+	NM_ATT_TLVDEF_BASE(NM_ATT_PROB_CAUSE,		TLV_TYPE_FIXED,	3);
+	NM_ATT_TLVDEF_BASE(NM_ATT_RACH_B_THRESH,	TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_LDAVG_SLOTS,		TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_RAD_SUBC,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_RF_MAXPOWR_R,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_SITE_INPUTS,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_SITE_OUTPUTS,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_SOURCE,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_SPEC_PROB,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_START_TIME,		TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_T200,			TLV_TYPE_FIXED,	7);
+	NM_ATT_TLVDEF_BASE(NM_ATT_TEI,			TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_TEST_DUR,		TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_TEST_NO,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_TEST_REPORT,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_VSWR_THRESH,		TLV_TYPE_FIXED, 2);
+	NM_ATT_TLVDEF_BASE(NM_ATT_WINDOW_SIZE,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_TSC,			TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_SW_CONFIG,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_SEVERITY,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_GET_ARI,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_HW_CONF_CHG,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_OUTST_ALARM,		TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_FILE_DATA,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_BASE(NM_ATT_MEAS_RES,		TLV_TYPE_TL16V,	0);
+
+	/* BS 11 specifics */
+#define NM_ATT_TLVDEV_BS11(_attr, _type, _fixed_len)		\
+	nm_att_tlvdev_bs11.def[_attr].type = _type;		\
+	nm_att_tlvdev_bs11.def[_attr].fixed_len = _fixed_len;	\
+
+	/* different stndard IEs */
+	NM_ATT_TLVDEV_BS11(NM_ATT_OUTST_ALARM,		TLV_TYPE_TLV,	0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_HW_DESC,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_ARFCN_LIST,		TLV_TYPE_TLV16,	0);
+
+	/* proprietary IEs */
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_ABIS_EXT_TIME,     TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_OM_LAPD_REL_TIMER, TLV_TYPE_FIXED, 2);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_SH_LAPD_INT_TIMER, TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_EMERG_TIMER1,      TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_EMERG_TIMER2,      TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_BTSLS_HOPPING,     TLV_TYPE_FIXED, 1);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_CELL_ALLOC_NR,     TLV_TYPE_FIXED, 1);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_ENA_INTERF_CLASS,  TLV_TYPE_FIXED, 1);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_FACCH_QUAL,        TLV_TYPE_FIXED, 1);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_TSYNC,             TLV_TYPE_FIXED, 2);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_TTRAU,             TLV_TYPE_FIXED, 2);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_EXCESSIVE_DISTANCE,TLV_TYPE_TLV,   1);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_HOPPING_MODE,      TLV_TYPE_TLV,   1);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_RF_RES_IND_PER,    TLV_TYPE_FIXED, 1);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_RADIO_MEAS_GRAN,   TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_RADIO_MEAS_REP,    TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_EMRG_CFG_MEMBER,   TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_TRX_AREA,          TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_ESN_FW_CODE_NO,    TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_ESN_HW_CODE_NO,    TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_ESN_PCB_SERIAL,    TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_BOOT_SW_VERS,      TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(0x59,                          TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(0xd5,                          TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(0xa8,                          TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_PASSWORD,          TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_TXPWR,             TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_RSSI_OFFS,         TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_LINE_CFG,          TLV_TYPE_TV,    0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_L1_PROT_TYPE,      TLV_TYPE_TV,    0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_BIT_ERR_THESH,     TLV_TYPE_FIXED, 2);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_DIVERSITY,         TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_LMT_LOGON_SESSION, TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_LMT_LOGIN_TIME,    TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_LMT_USER_ACC_LEV,  TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_LMT_USER_NAME,     TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_BTS_STATE,         TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_E1_STATE,          TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_PLL_MODE,          TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_PLL,               TLV_TYPE_TLV,   0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_CCLK_ACCURACY,     TLV_TYPE_TV,    0);
+	NM_ATT_TLVDEV_BS11(NM_ATT_BS11_CCLK_TYPE,         TLV_TYPE_TV,    0);
+
+	/* ip.access specifics */
+#define NM_ATT_TLVDEF_IPA(_attr, _type, _fixed_len)		\
+	nm_att_tlvdef_ipa.def[_attr].type = _type;		\
+	nm_att_tlvdef_ipa.def[_attr].fixed_len = _fixed_len;	\
+
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_DST_IP,		TLV_TYPE_FIXED,	4);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_DST_IP_PORT,	TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_PRIM_OML_CFG,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_NV_FLAGS,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_FREQ_CTRL,	TLV_TYPE_FIXED,	2);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_SEC_OML_CFG,	TLV_TYPE_FIXED,	6);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_IP_IF_CFG,	TLV_TYPE_FIXED,	8);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_IP_GW_CFG,	TLV_TYPE_FIXED,	12);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_LOCATION,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_UNIT_ID,		TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_UNIT_NAME,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_SNMP_CFG,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_ALM_THRESH_LIST,	TLV_TYPE_TL16V,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_CUR_SW_CFG,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_STREAM_ID,	TLV_TYPE_TV,	0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_RAC,		TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_OBJ_VERSION,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_GPRS_PAGING_CFG,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_NSEI,		TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_BVCI,		TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_NSVCI,		TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_NS_CFG,		TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_BSSGP_CFG,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_NS_LINK_CFG,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_RLC_CFG,		TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_SUPP_FEATURES,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_CODING_SCHEMES,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_RLC_CFG_2,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_RLC_CFG_3,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_PAGING_CFG,	TLV_TYPE_FIXED, 2);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_FILE_DATA,	TLV_TYPE_TL16V, 0);
+	NM_ATT_TLVDEF_IPA(NM_ATT_IPACC_CGI,		TLV_TYPE_TL16V, 0);
+
+	/* 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;
+	}
+}
Index: wireshark/epan/dissectors/packet-gsm_abis_oml.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ wireshark/epan/dissectors/packet-gsm_abis_oml.h	2011-03-06 13:12:30.000000000 +0100
@@ -0,0 +1,667 @@
+/* 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,
+};
+
+#endif /* _NM_H */
