diff --git a/wireshark/ericsson_rbs2409.patch b/wireshark/ericsson_rbs2409.patch
new file mode 100644
index 0000000..6550092
--- /dev/null
+++ b/wireshark/ericsson_rbs2409.patch
@@ -0,0 +1,1632 @@
+Index: wireshark/epan/dissectors/Makefile.common
+===================================================================
+--- wireshark.orig/epan/dissectors/Makefile.common
++++ wireshark/epan/dissectors/Makefile.common
+@@ -67,6 +67,8 @@
+ 	packet-dcerpc-dnsserver.c 	\
+ 	packet-dcerpc-eventlog.c \
+ 	packet-dcerpc-lsa.c \
++	packet-ehdlc.c		\
++	packet-gsm_abis_om2000.c	\
+ 	packet-dcerpc-winreg.c
+ 
+ #
+Index: wireshark/epan/dissectors/packet-l2tp.c
+===================================================================
+--- wireshark.orig/epan/dissectors/packet-l2tp.c
++++ wireshark/epan/dissectors/packet-l2tp.c
+@@ -148,6 +148,7 @@
+ #define L2TPv3_PROTOCOL_AAL5    6
+ #define L2TPv3_PROTOCOL_LAPD    7
+ #define L2TPv3_PROTOCOL_DOCSIS_DMPT 8
++#define L2TPv3_PROTOCOL_ERICSSON 9
+ 
+ static enum_val_t l2tpv3_protocols[] = {
+     {"eth",     "Ethernet",     L2TPv3_PROTOCOL_ETH},
+@@ -159,6 +160,7 @@
+     {"aal5",    "AAL5",         L2TPv3_PROTOCOL_AAL5},
+     {"lapd",    "LAPD",         L2TPv3_PROTOCOL_LAPD},
+     {"docsis-dmpt", "DOCSIS-DMPT", L2TPv3_PROTOCOL_DOCSIS_DMPT},
++    {"ehdlc",	"Ericsson HDLC", L2TPv3_PROTOCOL_ERICSSON},
+     {NULL, NULL, 0}
+ };
+ 
+@@ -583,6 +585,7 @@
+ static dissector_handle_t llc_handle;
+ static dissector_handle_t lapd_handle;
+ static dissector_handle_t mp2t_handle;
++static dissector_handle_t ehdlc_handle;
+ static dissector_handle_t data_handle;
+ 
+ /*
+@@ -1498,6 +1501,9 @@
+ 	case L2TPv3_PROTOCOL_LAPD:
+ 		call_dissector(lapd_handle, next_tvb, pinfo, tree);
+ 		break;
++	case L2TPv3_PROTOCOL_ERICSSON:
++		call_dissector(ehdlc_handle, next_tvb, pinfo, tree);
++		break;
+ 	default:
+ 		call_dissector(data_handle, next_tvb, pinfo, tree);
+ 		break;
+@@ -2171,5 +2177,6 @@
+ 	llc_handle = find_dissector("llc");
+ 	lapd_handle = find_dissector("lapd");
+ 	mp2t_handle = find_dissector("mp2t");
++	ehdlc_handle = find_dissector("ehdlc");
+ 	data_handle = find_dissector("data");
+ }
+Index: wireshark/epan/dissectors/packet-gsm_abis_om2000.c
+===================================================================
+--- /dev/null
++++ wireshark/epan/dissectors/packet-gsm_abis_om2000.c
+@@ -0,0 +1,1195 @@
++/* packet-abis_om2000.c
++ * Routines for packet dissection of Ericsson A-bis OML (OM 2000)
++ * Copyright 2010 by Harald Welte <laforge@gnumonks.org>
++ *
++ * $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_om2000 = -1;
++
++static int hf_om2k_msg_code = -1;
++static int hf_om2k_mo_if = -1;
++static int hf_om2k_mo_class = -1;
++
++static int hf_om2k_aip = -1;
++static int hf_om2k_oip = -1;
++static int hf_om2k_comb = -1;
++static int hf_om2k_ts = -1;
++static int hf_om2k_hsn = -1;
++static int hf_om2k_maio = -1;
++static int hf_om2k_bsic = -1;
++static int hf_om2k_diversity = -1;
++static int hf_om2k_fn_offs = -1;
++static int hf_om2k_ext_range = -1;
++static int hf_om2k_irc = -1;
++static int hf_om2k_bs_pa_mfrms = -1;
++static int hf_om2k_bs_ag_blks_res= -1;
++static int hf_om2k_drx_dev_max = -1;
++static int hf_om2k_cr = -1;
++static int hf_om2k_ipt3 = -1;
++static int hf_om2k_aop = -1;
++static int hf_om2k_t3105 = -1;
++static int hf_om2k_ny1 = -1;
++static int hf_om2k_cbi = -1;
++static int hf_om2k_tsc = -1;
++static int hf_om2k_icm = -1;
++static int hf_om2k_tta = -1;
++static int hf_om2k_icm_cr = -1;
++static int hf_om2k_lsc_fm = -1;
++static int hf_om2k_lsc_lsi = -1;
++static int hf_om2k_lsc_lsa = -1;
++static int hf_om2k_ls_ft = -1;
++static int hf_om2k_cst = -1;
++static int hf_om2k_ea = -1;
++static int hf_om2k_unknown_tag = -1;
++static int hf_om2k_nom_pwr = -1;
++static int hf_om2k_fill_mark = -1;
++static int hf_om2k_bcc = -1;
++static int hf_om2k_mo_state = -1;
++static int hf_om2k_la_state = -1;
++static int hf_om2k_tsn_state = -1;
++static int hf_om2k_bts_manuf = -1;
++static int hf_om2k_bts_gen = -1;
++static int hf_om2k_bts_rev = -1;
++static int hf_om2k_bts_var = -1;
++static int hf_om2k_brr = -1;
++static int hf_om2k_bfr = -1;
++static int hf_om2k_hwinfo_sig = -1;
++static int hf_om2k_capa_sig = -1;
++static int hf_om2k_file_rev = -1;
++static int hf_om2k_filerel_ilr = -1;
++static int hf_om2k_filerel_cur = -1;
++static int hf_om2k_filerel_other = -1;
++static int hf_om2k_cal_time = -1;
++static int hf_om2k_list_nr = -1;
++static int hf_om2k_list_nr_end = -1;
++
++/* initialize the subtree pointers */
++static int ett_om2000 = -1;
++
++static proto_tree *top_tree;
++
++static const value_string om2k_msgcode_vals[] = {
++	{ 0x0000, "Abort SP Command" },
++	{ 0x0002, "Abort SP Complete" },
++	{ 0x0004, "Alarm Report ACK" },
++	{ 0x0005, "Alarm Report NACK" },
++	{ 0x0006, "Alarm Report" },
++	{ 0x0008, "Alarm Status Request" },
++	{ 0x000a, "Alarm Status Request Accept" },
++	{ 0x000b, "Alarm Status Request Reject" },
++	{ 0x000c, "Alarm Status Result ACK" },
++	{ 0x000d, "Alarm Status Result NACK" },
++	{ 0x000e, "Alarm Status Result" },
++	{ 0x0010, "Calendar Time Response" },
++	{ 0x0011, "Calendar Time Reject" },
++	{ 0x0012, "Calendar Time Request" },
++	{ 0x0014, "CON Configuration Request" },
++	{ 0x0016, "CON Configuration Request Accept" },
++	{ 0x0017, "CON Configuration Request Reject" },
++	{ 0x0018, "CON Configuration Result ACK" },
++	{ 0x0019, "CON Configuration Result NACK" },
++	{ 0x001a, "CON Configuration Result" },
++	{ 0x001c, "Connect Command" },
++	{ 0x001e, "Connect Complete" },
++	{ 0x001f, "Connect Rejecte" },
++	{ 0x0028, "Disable Request" },
++	{ 0x002a, "Disable Request Accept" },
++	{ 0x002b, "Disable Request Reject" },
++	{ 0x002c, "Disable Result ACK" },
++	{ 0x002d, "Disable Result NACK" },
++	{ 0x002e, "Disable Result" },
++	{ 0x0030, "Disconnect Command" },
++	{ 0x0032, "Disconnect Complete" },
++	{ 0x0033, "Disconnect Reject" },
++	{ 0x0034, "Enable Request" },
++	{ 0x0036, "Enable Request Accept" },
++	{ 0x0037, "Enable Request Reject" },
++	{ 0x0038, "Enable Result ACK" },
++	{ 0x0039, "Enable Result NACK" },
++	{ 0x003a, "Enable Result" },
++	{ 0x003c, "Escape Downlink Normal" },
++	{ 0x003d, "Escape Downlink NACK" },
++	{ 0x003e, "Escape Uplink Normal" },
++	{ 0x003f, "Escape Uplink NACK" },
++	{ 0x0040, "Fault Report ACK" },
++	{ 0x0041, "Fault Report NACK" },
++	{ 0x0042, "Fault Report" },
++	{ 0x0044, "File Package End Command" },
++	{ 0x0046, "File Package End Result" },
++	{ 0x0047, "File Package End Reject" },
++	{ 0x0048, "File Relation Request" },
++	{ 0x004a, "File Relation Response" },
++	{ 0x004b, "File Relation Request Reject" },
++	{ 0x004c, "File Segment Transfer" },
++	{ 0x004e, "File Segment Transfer Complete" },
++	{ 0x004f, "File Segment Transfer Reject" },
++	{ 0x0050, "HW Information Request" },
++	{ 0x0052, "HW Information Request Accept" },
++	{ 0x0053, "HW Information Request Reject" },
++	{ 0x0054, "HW Information Result ACK" },
++	{ 0x0055, "HW Information Result NACK" },
++	{ 0x0056, "HW Information Result" },
++	{ 0x0060, "IS Configuration Request" },
++	{ 0x0062, "IS Configuration Request Accept" },
++	{ 0x0063, "IS Configuration Request Reject" },
++	{ 0x0064, "IS Configuration Result ACK" },
++	{ 0x0065, "IS Configuration Result NACK" },
++	{ 0x0066, "IS Configuration Result" },
++	{ 0x0068, "Load Data End" },
++	{ 0x006a, "Load Data End Result" },
++	{ 0x006b, "Load Data End Reject" },
++	{ 0x006c, "Load Data Init" },
++	{ 0x006e, "Load Data Init Accept" },
++	{ 0x006f, "Load Data Init Reject" },
++	{ 0x0070, "Loop Control Command" },
++	{ 0x0072, "Loop Control Complete" },
++	{ 0x0073, "Loop Control Reject" },
++	{ 0x0074, "Operational Information" },
++	{ 0x0076, "Operational Information Accept" },
++	{ 0x0077, "Operational Information Reject" },
++	{ 0x0078, "Reset Command" },
++	{ 0x007a, "Reset Complete" },
++	{ 0x007b, "Reset Reject" },
++	{ 0x007c, "RX Configuration Request" },
++	{ 0x007e, "RX Configuration Request Accept" },
++	{ 0x007f, "RX Configuration Request Reject" },
++	{ 0x0080, "RX Configuration Result ACK" },
++	{ 0x0081, "RX Configuration Result NACK" },
++	{ 0x0082, "RX Configuration Result" },
++	{ 0x0084, "Start Request" },
++	{ 0x0086, "Start Request Accept" },
++	{ 0x0087, "Start Request Reject" },
++	{ 0x0088, "Start Result ACK" },
++	{ 0x0089, "Start Result NACK" },
++	{ 0x008a, "Start Result" },
++	{ 0x008c, "Status Request" },
++	{ 0x008e, "Status Response" },
++	{ 0x008f, "Status Reject" },
++	{ 0x0094, "Test Request" },
++	{ 0x0096, "Test Request Accept" },
++	{ 0x0097, "Test Request Reject" },
++	{ 0x0098, "Test Result ACK" },
++	{ 0x0099, "Test Result NACK" },
++	{ 0x009a, "Test Result" },
++	{ 0x00a0, "TF Configuration Request" },
++	{ 0x00a2, "TF Configuration Request Accept" },
++	{ 0x00a3, "TF Configuration Request Reject" },
++	{ 0x00a4, "TF Configuration Result ACK" },
++	{ 0x00a5, "TF Configuration Result NACK" },
++	{ 0x00a7, "TF Configuration Result" },
++	{ 0x00a8, "TS Configuration Request" },
++	{ 0x00aa, "TS Configuration Request Accept" },
++	{ 0x00ab, "TS Configuration Request Reject" },
++	{ 0x00ac, "TS Configuration Result ACK" },
++	{ 0x00ad, "TS Configuration Result NACK" },
++	{ 0x00ae, "TS Configuration Result" },
++	{ 0x00b0, "TX Configuration Request" },
++	{ 0x00b2, "TX Configuration Request Accept" },
++	{ 0x00b3, "TX Configuration Request Reject" },
++	{ 0x00b4, "TX Configuration Result ACK" },
++	{ 0x00b5, "TX Configuration Result NACK" },
++	{ 0x00b6, "TX Configuration Result" },
++	{ 0x00bc, "DIP Alarm Report ACK" },
++	{ 0x00bd, "DIP Alarm Report NACK" },
++	{ 0x00be, "DIP Alarm Report" },
++	{ 0x00c0, "DIP Alarm Status Request" },
++	{ 0x00c2, "DIP Alarm Status Response" },
++	{ 0x00c3, "DIP Alarm Status Reject" },
++	{ 0x00c4, "DIP Quality Report I ACK" },
++	{ 0x00c5, "DIP Quality Report I NACK" },
++	{ 0x00c6, "DIP Quality Report I" },
++	{ 0x00c8, "DIP Quality Report II ACK" },
++	{ 0x00c9, "DIP Quality Report II NACK" },
++	{ 0x00ca, "DIP Quality Report II" },
++	/* FIXME */
++	{ 0x0104, "Negotiation Request ACK" },
++	{ 0x0105, "Negotiation Request NACK" },
++	{ 0x0106, "Negotiation Request" },
++	{ 0x0108, "BTS Initiated Request ACK" },
++	{ 0x0109, "BTS Initiated Request NACK" },
++	{ 0x010a, "BTS Initiated Request" },
++	{ 0x010c, "Radio Channels Release Command" },
++	{ 0x010e, "Radio Channels Release Complete" },
++	{ 0x010f, "Radio Channels Release Reject" },
++	{ 0x0118, "Feature Control Command" },
++	{ 0x011a, "Feature Control Complete" },
++	{ 0x011b, "Feature Control Reject" },
++
++	{ 0, NULL }
++};
++
++/* TS 12.21 Section 9.4: Attributes */
++static const value_string om2k_attr_vals[] = {
++	{ 0x00, "Accordance indication" },
++	{ 0x01, "Alarm Id" },
++	{ 0x02, "Alarm Data" },
++	{ 0x03, "Alarm Severity" },
++	{ 0x04, "Alarm Status" },
++	{ 0x05, "Alarm Status Type" },
++	{ 0x06, "BCC" },
++	{ 0x07, "BS_AG_BKS_RES" },
++	{ 0x09, "BSIC" },
++	{ 0x0a, "BA_PA_MFRMS" },
++	{ 0x0b, "CBCH Indicator" },
++	{ 0x0c, "CCCH Options" },
++	{ 0x0d, "Calendar Time" },
++	{ 0x0f, "Channel Combination" },
++	{ 0x10, "CON Connection List" },
++	{ 0x11, "Data End Indication" },
++	{ 0x12, "DRX_DEV_MAX" },
++	{ 0x13, "End List Number" },
++	{ 0x14, "External Condition Map Class 1" },
++	{ 0x15, "External Condition Map Class 2" },
++	{ 0x16, "File Relation Indication" },
++	{ 0x17, "File Revision" },
++	{ 0x18, "File Segment Data" },
++	{ 0x19, "File Segment Length" },
++	{ 0x1a, "File Segment Sequence Number" },
++	{ 0x1b, "File Size" },
++	{ 0x1c, "Filling Marker" },
++	{ 0x1d, "FN Offset" },
++	{ 0x1e, "Frequency List" },
++	{ 0x1f, "Frequency Specifier RX" },
++	{ 0x20, "Frequency Specifier TX" },
++	{ 0x21, "HSN" },
++	{ 0x22, "ICM Indicator" },
++	{ 0x23, "Internal Fault Map Class 1A" },
++	{ 0x24, "Internal Fault Map Class 1B" },
++	{ 0x25, "Internal Fault Map Class 2A" },
++	{ 0x26, "Internal Fault Map Class 2A Extension" },
++	{ 0x27, "IS Connection List" },
++	{ 0x28, "List Number" },
++	{ 0x29, "File Package State Indication" },
++	{ 0x2a, "Local Access State" },
++	{ 0x2b, "MAIO" },
++	{ 0x2c, "MO State" },
++	{ 0x2d, "Ny1" },
++	{ 0x2e, "Operational Information" },
++	{ 0x2f, "Power" },
++	{ 0x30, "RU Position Data" },
++	{ 0x31, "Protocol Error" },
++	{ 0x32, "Reason Code" },
++	{ 0x33, "Receiver Diversity" },
++	{ 0x34, "Replacement Unit Map" },
++	{ 0x35, "Result Code" },
++	{ 0x36, "RU Revision Data" },
++	{ 0x38, "T3105" },
++	{ 0x39, "Test Loop Setting" },
++	{ 0x3a, "TF Mode" },
++	{ 0x3b, "TF Compensation Value" },
++	{ 0x3c, "Time Slot Number" },
++	{ 0x3d, "TSC" },
++	{ 0x3e, "RU Logical Id" },
++	{ 0x3f, "RU Serial Number Data" },
++	{ 0x40, "BTS Version" },
++	{ 0x41, "OML IWD Version" },
++	{ 0x42, "RWL IWD Version" },
++	{ 0x43, "OML Function Map 1" },
++	{ 0x44, "OML Function Map 2" },
++	{ 0x45, "RSL Function Map 1" },
++	{ 0x46, "RSL Function Map 2" },
++	{ 0x47, "Extended Range Indicator" },
++	{ 0x48, "Request Indicators" },
++	{ 0x49, "DIP Alarm Condition Map" },
++	{ 0x4a, "ES Incoming" },
++	{ 0x4b, "ES Outgoing" },
++	{ 0x4e, "SES Incoming" },
++	{ 0x4f, "SES Outgoing" },
++	{ 0x50, "Replacement Unit Map Extension" },
++	{ 0x52, "UAS Incoming" },
++	{ 0x53, "UAS Outgoing" },
++	{ 0x58, "DF Incoming" },
++	{ 0x5a, "DF Outgoing" },
++	{ 0x5c, "SF" },
++	{ 0x60, "S Bits Setting" },
++	{ 0x61, "CRC-4 Use Option" },
++	{ 0x62, "T Parameter" },
++	{ 0x63, "N Parameter" },
++	{ 0x64, "N1 Parameter" },
++	{ 0x65, "N3 Parameter" },
++	{ 0x66, "N4 Parameter" },
++	{ 0x67, "P Parameter" },
++	{ 0x68, "Q Parameter" },
++	{ 0x69, "BI_Q1" },
++	{ 0x6a, "BI_Q2" },
++	{ 0x74, "ICM Boundary Parameters" },
++	{ 0x77, "AFT" },
++	{ 0x78, "AFT RAI" },
++	{ 0x79, "Link Supervision Control" },
++	{ 0x7a, "Link Supervision Filtering Time" },
++	{ 0x7b, "Call Supervision Time" },
++	{ 0x7c, "Interval Length UAS Incoming" },
++	{ 0x7d, "Interval Length UAS Outgoing" },
++	{ 0x7e, "ICM Channel Rate" },
++	{ 0x7f, "Attribute Identifier" },
++	{ 0x80, "FM Frequency List" },
++	{ 0x81, "FM Frequency Report" },
++	{ 0x82, "FM Percentile" },
++	{ 0x83, "FM Clear Indication" },
++	{ 0x84, "HW Info Signature" },
++	{ 0x85, "MO Record" },
++	{ 0x86, "TF Synchronisation Source" },
++	{ 0x87, "TTA" },
++	{ 0x88, "End Segment Number" },
++	{ 0x89, "Segment Number" },
++	{ 0x8a, "Capabilities Signature" },
++	{ 0x8c, "File Relation List" },
++	{ 0x90, "Negotiation Record I" },
++	{ 0x91, "Negotiation Record II" },
++	{ 0x92, "Encryption Algorithm" },
++	{ 0x94, "Interference Rejection Combining" },
++	{ 0x95, "Dedication Information" },
++	{ 0x97, "Feature Code" },
++	{ 0x98, "FS Offset" },
++	{ 0x99, "ESB Timeslot" },
++	{ 0x9a, "Master TG Instance" },
++	{ 0x9b, "Master TX Chain Delay" },
++	{ 0x9c, "External Condition Class 2 Extension" },
++	{ 0x9d, "TSs MO State" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_diversity_vals[] = {
++	{ 0x01, "B receiver side" },
++	{ 0x02, "A receiver side" },
++	{ 0x03, "A+B receiver sides" },
++	{ 0x04, "A+B+C+D receiver sides" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_oip_vals[] = {
++	{ 0x00, "Not Operational" },
++	{ 0x01, "Operational" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_aip_vals[] = {
++	{ 0x00, "Data according to request" },
++	{ 0x01, "Data not according to request" },
++	{ 0x02, "Inconsistent MO data" },
++	{ 0x03, "Capability constraint violation" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_comb_vals[] = {
++	{ 0x03, "SDCCH/8 + SACCH/C8" },
++	{ 0x04, "BCCH, non-combined" },
++	{ 0x05, "BCCH, combined (SDCCH/4)" },
++	{ 0x08, "TCH Type, unspecified" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_icmcr_vals[] = {
++	{ 0x00, "ICM as per TCH/F" },
++	{ 0x01, "ICM as per TCH/H(0 and 1)" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_ea_vals[] = {
++	{ 0x00, "A5/1 and A5/2" },
++	{ 0x01, "A5/2 only" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_fill_vals[] = {
++	{ 0x00, "Filling" },
++	{ 0x01, "No filling" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_mo_state_vals[] = {
++	{ 0x00, "RESET" },
++	{ 0x01, "STARTED" },
++	{ 0x02, "ENABLED" },
++	{ 0x03, "DISABLED" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_la_state_vals[] = {
++	{ 0x00, "LOCALLY CONNECTED" },
++	{ 0x01, "LOCALLY DISCONNECTED" },
++	{ 0, NULL }
++};
++
++static const value_string filerel_state_vals[] = {
++	{ 0x00, "Not known in current state (unknown file)" },
++	{ 0x01, "alllowed, already loaded" },
++	{ 0x02, "allowed, not loaded" },
++	{ 0x03, "not allowed" },
++	{ 0, NULL }
++};
++
++static const value_string om2k_mo_class_vals[] = {
++	{ 0x03, "TS (Timeslot)" },
++	{ 0x04, "TF (Timing Function)" },
++	{ 0x05, "IS (Interface Switch)" },
++	{ 0x06, "CON (Concentrator)" },
++	{ 0x0a, "CF (Central Function)" },
++	{ 0x0b, "TX (Transmitter)" },
++	{ 0x0c, "RX (Receiver)" },
++	{ 0, NULL }
++};
++
++static gint
++dissect_tss_mo_state(tvbuff_t *tvb, gint offset, packet_info *pinfo,
++		     proto_tree *tree)
++{
++	guint8 tmp;
++	guint i = 0;
++
++	for (i = 0; i < 8; i+= 2) {
++		tmp = tvb_get_guint8(tvb, offset);
++		proto_tree_add_uint_format(tree, hf_om2k_tsn_state, tvb, offset, 1, tmp & 0xf,
++					   "Timslot %u MO State: %s", i,
++					   val_to_str(tmp & 0xf, om2k_mo_state_vals, "unknown (%02d)"));
++		proto_tree_add_uint_format(tree, hf_om2k_tsn_state, tvb, offset, 1, tmp >> 4,
++					   "Timslot %u MO State: %s", i+1,
++					   val_to_str(tmp >> 4, om2k_mo_state_vals, "unknown (%02d)"));
++		offset++;
++	}
++
++	return offset;
++}
++
++
++static gint
++dissect_om2k_time(tvbuff_t *tvb, int offset, proto_tree *tree)
++{
++	nstime_t tmptime;
++	time_t tval;
++	struct tm _time;
++
++	_time.tm_year = 100 + tvb_get_guint8(tvb, offset++);
++	_time.tm_mon = tvb_get_guint8(tvb, offset++) -1;
++	_time.tm_mday = tvb_get_guint8(tvb, offset++);
++	_time.tm_hour = tvb_get_guint8(tvb, offset++);
++	_time.tm_min = tvb_get_guint8(tvb, offset++);
++	_time.tm_sec = tvb_get_guint8(tvb, offset++);
++	_time.tm_isdst = -1;
++
++	tval = mktime(&_time);
++	tmptime.secs = tval;
++	tmptime.nsecs = 0;
++
++	proto_tree_add_time(tree, hf_om2k_cal_time, tvb, offset, 6,
++			    &tmptime);
++	return 6;
++}
++
++static gint
++dissect_om2k_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) {
++		guint8 iei = tvb_get_guint8(tvb, offset++);
++		guint8 len, tmp;
++		switch (iei) {
++		case 0x00: /* Accordance Information */
++			proto_tree_add_item(tree, hf_om2k_aip, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x06: /* BCC */
++			proto_tree_add_item(tree, hf_om2k_bcc, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x07: /* BS_AG_BLKS_RES */
++			proto_tree_add_item(tree, hf_om2k_bs_ag_blks_res, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x09: /* BSIC */
++			proto_tree_add_item(tree, hf_om2k_bsic, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x0a: /* BS_PA_MFRMS */
++			proto_tree_add_item(tree, hf_om2k_bs_pa_mfrms, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x0b: /* CBCH indicator */
++			proto_tree_add_item(tree, hf_om2k_cbi, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x0c: /* CCCH Options */
++			tmp = tvb_get_guint8(tvb, offset);
++			proto_tree_add_item(tree, hf_om2k_cr, tvb,
++					    offset, 1, FALSE);
++			proto_tree_add_item(tree, hf_om2k_ipt3, tvb,
++					    offset, 1, FALSE);
++			proto_tree_add_uint(tree, hf_om2k_aop, tvb,
++					    offset, 1, (tmp & 0x3f) >> 2);
++			offset++;
++			break;
++		case 0x0d: /* Calendar Time */
++			offset += dissect_om2k_time(tvb, offset, tree);
++			break;
++		case 0x0f: /* Combination */
++			proto_tree_add_item(tree, hf_om2k_comb, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x10: /* CON Connection List */
++			len = tvb_get_guint8(tvb, offset++);
++			/* FIXME */
++			offset += len;
++			break;
++		case 0x12: /* DRX_DEV_MAX */
++			proto_tree_add_item(tree, hf_om2k_drx_dev_max, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x13: /* End List Number */
++			proto_tree_add_item(tree, hf_om2k_list_nr_end, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x14: /* External Condition Map Class 1 */
++			/* FIXME */
++		case 0x15: /* External Condition Map Class 2 */
++			/* FIXME */
++			offset += 2;
++			break;
++		case 0x16: /* File Relation Indication */
++			proto_tree_add_item(tree, hf_om2k_filerel_ilr, tvb,
++					    offset, 1, FALSE);
++			proto_tree_add_item(tree, hf_om2k_filerel_cur, tvb,
++					    offset, 1, FALSE);
++			offset++;
++			proto_tree_add_item(tree, hf_om2k_filerel_other, tvb,
++					    offset, 1, FALSE);
++			offset++;
++			break;
++		case 0x17: /* File Revision */
++			proto_tree_add_item(tree, hf_om2k_file_rev, tvb,
++					    offset, 8, FALSE);
++			offset += 8;
++			break;
++		case 0x1c: /* Filling Marker */
++			proto_tree_add_item(tree, hf_om2k_fill_mark, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x1d: /* FN Offset */
++			proto_tree_add_item(tree, hf_om2k_fn_offs, tvb,
++					    offset, 2, FALSE);
++			offset += 2;
++			break;
++		case 0x1e: /* Frequency List */
++			len = tvb_get_guint8(tvb, offset++);
++			/* FIXME */
++			offset += len;
++			break;
++		case 0x1f: /* Frequency Specifier Rx */
++			/* FIXME */
++		case 0x20: /* Frequency Specifier Rx */
++			/* FIXME */
++			offset += 2;
++			break;
++		case 0x21: /* HSN */
++			proto_tree_add_item(tree, hf_om2k_hsn, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x22: /* ICM */
++			proto_tree_add_item(tree, hf_om2k_icm, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x23: /* Internal Fault Map Class 1A */
++			/* FIXME */
++		case 0x24: /* Internal Fault Map Class 1B */
++			/* FIXME */
++		case 0x25: /* Internal Fault Map Class 2A */
++			/* FIXME */
++		case 0x26: /* Internal Fault Map Class 2A Ext */
++			/* FIXME */
++			offset += 6;
++			break;
++		case 0x27: /* IS Connection List */
++			len = tvb_get_guint8(tvb, offset++);
++			/* FIXME */
++			offset += len;
++			break;
++		case 0x28: /* List Number */
++			proto_tree_add_item(tree, hf_om2k_list_nr, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x2a: /* Local Access State */
++			proto_tree_add_item(tree, hf_om2k_la_state, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x2b: /* MAIO */
++			proto_tree_add_item(tree, hf_om2k_maio, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x2c: /* MO State */
++			proto_tree_add_item(tree, hf_om2k_mo_state, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x2d: /* Ny1 */
++			proto_tree_add_item(tree, hf_om2k_ny1, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x2e: /* Operational Information */
++			proto_tree_add_item(tree, hf_om2k_oip, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x2f: /* Nominal Power */
++			proto_tree_add_item(tree, hf_om2k_nom_pwr, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x33: /* Receiver Diversity */
++			proto_tree_add_item(tree, hf_om2k_diversity, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x34: /* Replacement Unit Map */
++			/* FIXME */
++			offset += 6;
++			break;
++		case 0x38: /* T3105 */
++			proto_tree_add_item(tree, hf_om2k_t3105, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x3c: /* TS Number */
++			proto_tree_add_item(tree, hf_om2k_ts, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x3d: /* TSC */
++			proto_tree_add_item(tree, hf_om2k_tsc, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x40: /* BTS Version */
++			proto_tree_add_item(tree, hf_om2k_bts_manuf, tvb,
++					    offset, 3, FALSE);
++			offset += 3;
++			proto_tree_add_item(tree, hf_om2k_bts_gen, tvb,
++					    offset, 3, FALSE);
++			offset += 3;
++			proto_tree_add_item(tree, hf_om2k_bts_rev, tvb,
++					    offset, 3, FALSE);
++			offset += 3;
++			proto_tree_add_item(tree, hf_om2k_bts_var, tvb,
++					    offset, 3, FALSE);
++			offset += 3;
++			break;
++		case 0x43: /* OML Function Map 1 */
++		case 0x44: /* OML Function Map 2 */
++		case 0x45: /* RSL Function Map 1 */
++		case 0x46: /* RSL Function Map 2 */
++			len = tvb_get_guint8(tvb, offset++);
++			/* FIXME */
++			offset += len;
++			break;
++		case 0x47: /* Ext Range */
++			proto_tree_add_item(tree, hf_om2k_ext_range, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x48: /* Request Indicators */
++			proto_tree_add_item(tree, hf_om2k_brr, tvb,
++					    offset, 1, FALSE);
++			proto_tree_add_item(tree, hf_om2k_bfr, tvb,
++					    offset, 1, FALSE);
++			offset++;
++			break;
++		case 0x50: /* Replacement Unit Map Extension */
++			/* FIXME */
++			offset += 6;
++			break;
++		case 0x74: /* ICM Boundary */
++			/* FIXME */
++			offset += 5;
++			break;
++		case 0x79: /* Link Supervision Control */
++			proto_tree_add_item(tree, hf_om2k_lsc_fm, tvb,
++					    offset, 1, FALSE);
++			proto_tree_add_item(tree, hf_om2k_lsc_lsi, tvb,
++					    offset, 1, FALSE);
++			proto_tree_add_item(tree, hf_om2k_lsc_lsa, tvb,
++					    offset, 1, FALSE);
++			offset++;
++			break;
++		case 0x7a: /* Link Supervision Control */
++			proto_tree_add_item(tree, hf_om2k_ls_ft, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x7b: /* Call Supervision Time */
++			proto_tree_add_item(tree, hf_om2k_cst, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x7e: /* ICM Channel Rate */
++			proto_tree_add_item(tree, hf_om2k_icm_cr, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x84: /* HW Info Signature */
++			proto_tree_add_item(tree, hf_om2k_hwinfo_sig, tvb,
++					    offset, 2, FALSE);
++			offset += 2;
++			break;
++		case 0x87: /* TTA */
++			proto_tree_add_item(tree, hf_om2k_tta, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x8a: /* Capabilities Signature */
++			proto_tree_add_item(tree, hf_om2k_capa_sig, tvb,
++					    offset, 2, FALSE);
++			offset += 2;
++			break;
++		case 0x90: /* Negotiation Record I */
++		case 0x91: /* Negotiation Record II */
++			len = tvb_get_guint8(tvb, offset++);
++			/* FIXME */
++			offset += len;
++			break;
++		case 0x92: /* Encryption Algorithm */
++			proto_tree_add_item(tree, hf_om2k_ea, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x94: /* Interference Rejection Combining */
++			proto_tree_add_item(tree, hf_om2k_irc, tvb,
++					    offset++, 1, FALSE);
++			break;
++		case 0x95: /* Dedication information */
++			/* FIXME */
++			offset += 3;
++			break;
++		case 0x9c: /* External Condition Class 2 Extension */
++			/* FIXME */
++			offset += 4;
++			break;
++		case 0x9d: /* TSs MO State */
++			dissect_tss_mo_state(tvb, offset, pinfo, tree);
++			offset += 4;
++			break;
++		case 0x9e:
++		case 0x9f:
++		default:
++			tmp = tvb_get_guint8(tvb, offset);
++			proto_tree_add_uint_format(tree, hf_om2k_unknown_tag, tvb,
++					    offset-1, 1, tmp, "Tag %s: 0x%02x",
++					    val_to_str(iei, om2k_attr_vals, "0x%02x"), tmp);
++			offset++;
++			break;
++		}
++	}
++
++	return offset;
++}
++
++static void
++dissect_abis_om2000(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
++{
++	proto_item *ti;
++	proto_tree *om2k_tree;
++
++	int offset = 0;
++
++	col_set_str(pinfo->cinfo, COL_PROTOCOL, "OM2000");
++
++	top_tree = tree;
++	if (tree) {
++		guint16 msg_code = tvb_get_ntohs(tvb, offset);
++		guint32 mo_if = tvb_get_ntohl(tvb, offset+2);
++		guint8 tmp;
++
++		ti = proto_tree_add_item(tree, proto_abis_om2000,
++					 tvb, 0, -1, FALSE);
++		om2k_tree = proto_item_add_subtree(ti, ett_om2000);
++
++		proto_tree_add_item(om2k_tree, hf_om2k_msg_code, tvb, offset,
++				    2, FALSE);
++		col_append_fstr(pinfo->cinfo, COL_INFO, " %08x %s ", mo_if,
++				val_to_str(msg_code, &om2k_msgcode_vals,
++					   "unknown 0x%04x"));
++		proto_item_append_text(ti, ": %08x %s ", mo_if,
++				val_to_str(msg_code, &om2k_msgcode_vals,
++					   "unknown 0x%04x"));
++		offset += 2;
++		proto_tree_add_item(om2k_tree, hf_om2k_mo_if, tvb, offset,
++				    4, FALSE);
++		proto_tree_add_item(om2k_tree, hf_om2k_mo_class, tvb, offset,
++				    1, FALSE);
++		offset += 4;
++
++		switch (msg_code) {
++		case 0x74: /* Operational Info */
++			tmp = tvb_get_guint8(tvb, offset+1);
++			proto_item_append_text(ti, ": %s",
++				    val_to_str(tmp, om2k_oip_vals,
++						"unknown 0x%02x"));
++			break;
++		case 0x1A: /* CON Configuration Result */
++		case 0x66: /* IS Configuration Result */
++		case 0x82: /* RX Configuration Result */
++		case 0xA6: /* TF Configuration Result */
++		case 0xAE: /* TS Configuration Result */
++		case 0xB6: /* TX Configuration Result */
++		case 0xE2: /* DP Configuration Result */
++		case 0xF6: /* DP Configuration Result */
++			tmp = tvb_get_guint8(tvb, offset+1);
++			proto_item_append_text(ti, ": %s",
++				    val_to_str(tmp, om2k_aip_vals,
++						"unknown 0x%02x"));
++			break;
++		default:
++			break;
++		}
++		dissect_om2k_attrs(tvb, offset, pinfo, om2k_tree);
++	}
++}
++
++void
++proto_reg_handoff_abis_om2000(void);
++
++void
++proto_register_abis_om2000(void)
++{
++	static hf_register_info hf[] = {
++		{ &hf_om2k_msg_code,
++			{ "Message Code", "om2000.msg_code",
++			  FT_UINT16, BASE_HEX, VALS(om2k_msgcode_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_mo_if,
++			{ "MO Interface", "om2000.mo_if",
++			  FT_BYTES, BASE_NONE, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_mo_class,
++			{ "MO IF Class", "om2000.mo_if.class",
++			  FT_UINT8, BASE_HEX, VALS(om2k_mo_class_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_oip,
++			{ "OIP (Operational Info)", "om2000.oip",
++			  FT_UINT8, BASE_HEX, VALS(om2k_oip_vals), 0,
++			  "Operational Information Parameter", HFILL }
++		},
++		{ &hf_om2k_aip,
++			{ "AIP (Accordance Info)", "om2000.aip",
++			  FT_UINT8, BASE_HEX, VALS(om2k_aip_vals), 0,
++			  "Accordance Information Parameter", HFILL }
++		},
++		{ &hf_om2k_comb,
++			{ "Channel Combination", "om2000.chan_comb",
++			  FT_UINT8, BASE_DEC, VALS(om2k_comb_vals), 0,
++			  "Logical Channel Combination", HFILL }
++		},
++		{ &hf_om2k_ts,
++			{ "Timeslot Number", "om2000.ts",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_hsn,
++			{ "HSN", "om2000.hsn",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  "Hopping Sequence Number", HFILL }
++		},
++		{ &hf_om2k_maio,
++			{ "MAIO", "om2000.maio",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  "Mobile Allication Index Offset", HFILL }
++		},
++		{ &hf_om2k_bsic,
++			{ "BSIC", "om2000.bsic",
++			  FT_UINT8, BASE_HEX, NULL, 0,
++			  "Base Station Identity Code", HFILL }
++		},
++		{ &hf_om2k_diversity,
++			{ "Receiver Diversity", "om2000.diversity",
++			  FT_UINT8, BASE_HEX, VALS(om2k_diversity_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_fn_offs,
++			{ "FN Offset", "om2000.fn_offset",
++			  FT_UINT16, BASE_DEC, NULL, 0,
++			  "GSM Frame Number Offset", HFILL }
++		},
++		{ &hf_om2k_ext_range,
++			{ "Extended Range", "om2000.ext_range",
++			  FT_BOOLEAN, 1, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_irc,
++			{ "Interference Rejection Combining", "om2000.irc",
++			  FT_BOOLEAN, 1, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bs_pa_mfrms,
++			{ "BS_PA_MFRMS", "om2000.bs_pa_mfrms",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bs_ag_blks_res,
++			{ "BS_AG_BLKS_RES", "om2000.bs_ag_blks_res",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_drx_dev_max,
++			{ "DRX_DEV_MAX", "om2000.drx_dev_max",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_cr,
++			{ "CCCH Repeat", "om2000.ccch_repeat",
++			  FT_BOOLEAN, 1, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_ipt3,
++			{ "Inhibit Paging Request Type 3", "om2000.ipt3",
++			  FT_BOOLEAN, 2, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_aop,
++			{ "Age Of Paging", "om2000.aop",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_t3105,
++			{ "T3105 (in 10ms)", "om2000.t3105",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_ny1,
++			{ "Ny1", "om2000.ny1",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_cbi,
++			{ "CBCH Indicator", "om2000.ny1",
++			  FT_BOOLEAN, 1, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_tsc,
++			{ "Training Sequence Code", "om2000.tsc",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_icm,
++			{ "Idle Channel Measurement", "om2000.icm",
++			  FT_BOOLEAN, 1, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_tta,
++			{ "Timer for Time Alignment", "om2000.tta",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_icm_cr,
++			{ "ICM Channel Rate", "om2000.icm_cr",
++			  FT_BOOLEAN, 1, VALS(om2k_icmcr_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_lsc_fm,
++			{ "LSC Dummy Frequency Measurement", "om2000.lsc.fm",
++			  FT_BOOLEAN, 0x80, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_lsc_lsi,
++			{ "LSC Idle Channels", "om2000.ls.lsi",
++			  FT_BOOLEAN, 0x01, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_lsc_lsa,
++			{ "LSC Active Channels", "om2000.ls.lsa",
++			  FT_BOOLEAN, 0x02, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_ls_ft,
++			{ "Link Supervision Filtering Time (100ms)", "om2000.ls_ft",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_cst,
++			{ "Call Supervision Time (480ms)", "om2000.cst",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_ea,
++			{ "Encryption Algorithm", "om2000.ea",
++			  FT_UINT8, BASE_DEC, VALS(om2k_ea_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_nom_pwr,
++			{ "Nominal Power (dBm)", "om2000.pwr",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_fill_mark,
++			{ "Filling Marker", "om2000.filling",
++			  FT_BOOLEAN, 0x01, VALS(om2k_fill_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bcc,
++			{ "BCC", "om2000.bcc",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  "Base Station Color Code", HFILL }
++		},
++		{ &hf_om2k_mo_state,
++			{ "MO State", "om2000.mo_state",
++			  FT_UINT8, BASE_DEC, VALS(om2k_mo_state_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_la_state,
++			{ "Local Access State", "om2000.la_state",
++			  FT_UINT8, BASE_DEC, VALS(om2k_la_state_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_tsn_state,
++			{ "Time Slot N MO State", "om2000.tsn_mo_state",
++			  FT_UINT8, BASE_DEC, VALS(om2k_mo_state_vals), 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bts_manuf,
++			{ "BTS Manufacturer ID", "om2000.bts_ver.manuf",
++			  FT_STRING, BASE_NONE, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bts_gen,
++			{ "BTS Generation", "om2000.bts_ver.gen",
++			  FT_STRING, BASE_NONE, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bts_rev,
++			{ "BTS Revision", "om2000.bts_ver.rev",
++			  FT_STRING, BASE_NONE, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bts_var,
++			{ "BTS Variant", "om2000.bts_ver.variant",
++			  FT_STRING, BASE_NONE, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_brr,
++			{ "BTS Requested Restart", "om2000.brr",
++			  FT_BOOLEAN, 0x01, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_bfr,
++			{ "BTS Requested File Relation", "om2000.bfr",
++			  FT_BOOLEAN, 0x01, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_hwinfo_sig,
++			{ "HW Info Signature", "om2000.hwinfo_sig",
++			  FT_UINT16, BASE_HEX, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_capa_sig,
++			{ "Capabilities Signature", "om2000.capa_sig",
++			  FT_UINT16, BASE_HEX, NULL, 0,
++			  NULL, HFILL }
++		},
++
++		{ &hf_om2k_unknown_tag,
++			{ "Unknown Tag", "om2000.unknown_tag",
++			  FT_UINT8, BASE_HEX, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_file_rev,
++			{ "File Revision", "om2000.file_rev",
++			  FT_STRING, BASE_NONE, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_filerel_ilr,
++			{ "Immediate Load Requested", "om2000.filerel.ilr",
++			  FT_BOOLEAN, 0x08, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_filerel_cur,
++			{ "Current State", "om2000.filerel.cur",
++			  FT_UINT8, BASE_HEX, VALS(filerel_state_vals), 0x07,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_filerel_other,
++			{ "Other State", "om2000.filerel.other",
++			  FT_UINT8, BASE_HEX, VALS(filerel_state_vals), 0x07,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_cal_time,
++			{ "Calendar Time", "om2000.cal_time",
++			  FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_list_nr,
++			{ "List Number", "om2000.list_nr",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++		{ &hf_om2k_list_nr_end,
++			{ "End List Number", "om2000.list_nr_end",
++			  FT_UINT8, BASE_DEC, NULL, 0,
++			  NULL, HFILL }
++		},
++	};
++	static gint *ett[] = {
++		&ett_om2000,
++	};
++
++	module_t *oml_module;
++
++	proto_abis_om2000 = proto_register_protocol("Ericsson A-bis OML",
++						    "Ericsson OML",
++						    "gsm_abis_om2000");
++
++	proto_register_field_array(proto_abis_om2000, hf, array_length(hf));
++
++	proto_register_subtree_array(ett, array_length(ett));
++
++	register_dissector("gsm_abis_om2000", dissect_abis_om2000,
++			   proto_abis_om2000);
++#if 0
++	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);
++#endif
++}
++
++/* This function is called once at startup and every time the user hits
++ * 'apply' in the preferences dialogue */
++void
++proto_reg_handoff_abis_om2000(void)
++{
++	static gboolean initialized = FALSE;
++
++	if (!initialized) {
++		dissector_handle_t abis_om2k_handle;
++
++		abis_om2k_handle = create_dissector_handle(dissect_abis_om2000,
++							   proto_abis_om2000);
++		//dissector_add("lapd.gsm.sapi", LAPD_GSM_SAPI_OM_PROC, abis_oml_handle);
++	} else {
++		/* preferences have been changed */
++	}
++}
+Index: wireshark/epan/dissectors/packet-gsm_abis_oml.c
+===================================================================
+--- wireshark.orig/epan/dissectors/packet-gsm_abis_oml.c
++++ wireshark/epan/dissectors/packet-gsm_abis_oml.c
+@@ -119,9 +119,12 @@
+ 
+ /* Decode things as nanoBTS traces */
+ static gboolean global_oml_use_nano_bts = TRUE;
++static gboolean global_oml_use_ericsson = TRUE;
+ 
+ static proto_tree *top_tree;
+ 
++static dissector_handle_t sub_om2000;
++
+ /* TS 12.21 Chapter 8.1 / TS 08.59 */
+ static const value_string oml_msg_disc_vals[] = {
+ 	{ ABIS_OM_MDISC_FOM,	"Formatted O&M" },
+@@ -1196,6 +1199,7 @@
+ 	top_tree = tree;
+ 	if (tree) {
+ 		u_int8_t msg_disc = tvb_get_guint8(tvb, offset);
++		u_int8_t len = tvb_get_guint8(tvb, offset+3);
+ 
+ 		ti = proto_tree_add_item(tree, proto_abis_oml, tvb, 0, -1, FALSE);
+ 		oml_tree = proto_item_add_subtree(ti, ett_oml);
+@@ -1209,6 +1213,14 @@
+ 		proto_tree_add_item(oml_tree, hf_oml_length, tvb, offset++,
+ 				    1, TRUE);
+ 
++		if (global_oml_use_ericsson == TRUE) {
++			tvbuff_t *subtvb;
++			subtvb = tvb_new_subset(tvb, offset, len, len);
++
++			if (sub_om2000)
++				call_dissector(sub_om2000, subtvb, pinfo, tree);
++		} else {
++
+ 		switch (msg_disc) {
+ 		case ABIS_OM_MDISC_FOM:
+ 			offset = dissect_oml_fom(tvb, pinfo, oml_tree,
+@@ -1222,6 +1234,8 @@
+ 		default:
+ 			break;
+ 		}
++
++		}
+ 	}
+ }
+ 
+@@ -1569,6 +1583,11 @@
+ 		    "Use nanoBTS definitions",
+ 		    "Use ipaccess nanoBTS specific definitions for OML",
+ 		    &global_oml_use_nano_bts);
++
++	prefs_register_bool_preference(oml_module, "use_ericsson_oml",
++		    "Use Ericsson definitions",
++		    "Use Ericsson A-bis OML (OM2000) definitions for OML",
++		    &global_oml_use_ericsson);
+ }
+ 
+ /* This function is called once at startup and every time the user hits
+@@ -1605,4 +1624,6 @@
+ 		oml_fom_attr_vse._vs_num_entries =
+ 				array_length(oml_fom_attr_vals_bs11)-1;
+ 	}
++
++	sub_om2000 = find_dissector("gsm_abis_om2000");
+ }
+Index: wireshark/epan/dissectors/packet-ehdlc.c
+===================================================================
+--- /dev/null
++++ wireshark/epan/dissectors/packet-ehdlc.c
+@@ -0,0 +1,301 @@
++/* packet-ehdlc.c
++ * Routines for packet dissection of Ericsson HDLC as used in A-bis over IP
++ * Copyright 2010 by Harald Welte <laforge@gnumonks.org>
++ *
++ * $Id: packet-ehdlc.c 33767 2010-08-11 11:59:47Z etxrab $
++ *
++ * 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/ipproto.h>
++#include <epan/xdlc.h>
++
++/* Initialize the protocol and registered fields */
++static int proto_ehdlc = -1;
++
++static int hf_ehdlc_data_len = -1;
++static int hf_ehdlc_protocol = -1;
++static int hf_ehdlc_sapi = -1;
++static int hf_ehdlc_c_r = -1;
++
++static int hf_ehdlc_control = -1;
++
++static int hf_ehdlc_p = -1;
++static int hf_ehdlc_f = -1;
++static int hf_ehdlc_u_modifier_cmd = -1;
++static int hf_ehdlc_u_modifier_resp = -1;
++static int hf_ehdlc_ftype_s_u = -1;
++
++static int hf_ehdlc_n_r = -1;
++static int hf_ehdlc_n_s = -1;
++static int hf_ehdlc_p_ext = -1;
++static int hf_ehdlc_f_ext = -1;
++static int hf_ehdlc_s_ftype = -1;
++static int hf_ehdlc_ftype_i = -1;
++static int hf_ehdlc_ftype_s_u_ext = -1;
++
++/* Used only for U frames */
++static const xdlc_cf_items ehdlc_cf_items = {
++	NULL,
++	NULL,
++	&hf_ehdlc_p,
++	&hf_ehdlc_f,
++	NULL,
++	&hf_ehdlc_u_modifier_cmd,
++	&hf_ehdlc_u_modifier_resp,
++	NULL,
++	&hf_ehdlc_ftype_s_u
++};
++
++/* Used only for I and S frames */
++static const xdlc_cf_items ehdlc_cf_items_ext = {
++	&hf_ehdlc_n_r,
++	&hf_ehdlc_n_s,
++	&hf_ehdlc_p_ext,
++	&hf_ehdlc_f_ext,
++	&hf_ehdlc_s_ftype,
++	NULL,
++	NULL,
++	&hf_ehdlc_ftype_i,
++	&hf_ehdlc_ftype_s_u_ext,
++};
++
++/* Initialize the subtree pointers */
++static gint ett_ehdlc = -1;
++static gint ett_ehdlc_control = -1;
++
++static const value_string ehdlc_protocol_vals[] = {
++	{ 0x20,		"RSL" },
++	{ 0xa0,		"ACK" },
++	{ 0xc0,		"OML" },
++	{ 0, 		NULL }
++};
++
++enum {
++	SUB_RSL,
++	SUB_OML,
++	SUB_DATA,
++
++	SUB_MAX
++};
++
++static dissector_handle_t sub_handles[SUB_MAX];
++
++/* Code to actually dissect the packets */
++static void
++dissect_ehdlc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
++{
++	gint remaining;
++	int offset = 4;
++
++	col_set_str(pinfo->cinfo, COL_PROTOCOL, "EHDLC");
++	col_clear(pinfo->cinfo, COL_INFO);
++
++	while ((remaining = tvb_reported_length_remaining(tvb, offset)) > 0) {
++		proto_item *ti = NULL;
++		proto_tree *ehdlc_tree = NULL;
++		guint16 len, msg_type;
++		tvbuff_t *next_tvb;
++		guint16 control;
++		gboolean is_response = 0, is_extended = TRUE;
++		gint header_length = 2;	/* Address + Length field */
++
++		msg_type = tvb_get_guint8(tvb, offset);
++		len = tvb_get_guint8(tvb, offset+1);
++#if 0
++		col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
++		                val_to_str(msg_type, ehdlc_protocol_vals,
++		                           "unknown 0x%02x"));
++#endif
++		if (tree) {
++			ti = proto_tree_add_protocol_format(tree, proto_ehdlc,
++					tvb, offset, len,
++					"Ericsson HDLC protocol, type: %s",
++					val_to_str(msg_type, ehdlc_protocol_vals,
++						   "unknown 0x%02x"));
++			ehdlc_tree = proto_item_add_subtree(ti, ett_ehdlc);
++			proto_tree_add_item(ehdlc_tree, hf_ehdlc_protocol,
++					    tvb, offset, 1, FALSE);
++#if 0
++			proto_tree_add_item(ehdlc_tree, hf_ehdlc_sapi,
++					    tvb, offset, 1, FALSE);
++			proto_tree_add_item(ehdlc_tree, hf_ehdlc_c_r,
++					    tvb, offset, 1, FALSE);
++#endif
++			proto_tree_add_item(ehdlc_tree, hf_ehdlc_data_len,
++					    tvb, offset+1, 1, FALSE);
++		}
++
++		control = dissect_xdlc_control(tvb, offset+2, pinfo, ehdlc_tree, hf_ehdlc_control,
++					       ett_ehdlc_control, &ehdlc_cf_items, &ehdlc_cf_items_ext,
++					       NULL, NULL, is_response, is_extended, FALSE);
++		header_length += XDLC_CONTROL_LEN(control, is_extended);
++
++		if (XDLC_IS_INFORMATION(control)) {
++			next_tvb = tvb_new_subset(tvb, offset+header_length,
++						  len-header_length, len);
++
++			switch (msg_type) {
++			case 0x20:
++				/* len == 4 seems to be some kind of ACK */
++				if (len <= 4)
++					break;
++				call_dissector(sub_handles[SUB_RSL], next_tvb, pinfo, tree);
++				break;
++			case 0xbc:
++			case 0xdc:
++			case 0xa0:
++			case 0xc0:
++				/* len == 4 seems to be some kind of ACK */
++				if (len <= 4)
++					break;
++				call_dissector(sub_handles[SUB_OML], next_tvb, pinfo, tree);
++				break;
++			default:
++				call_dissector(sub_handles[SUB_DATA], next_tvb, pinfo, tree);
++				break;
++			}
++		}
++
++		offset += len;
++	}
++}
++
++void proto_register_ehdlc(void)
++{
++	static hf_register_info hf[] = {
++		{ &hf_ehdlc_data_len,
++		  { "DataLen", "ehdlc.data_len",
++		    FT_UINT8, BASE_DEC, NULL, 0x0,
++		    "The length of the data (in bytes)", HFILL }
++		},
++		{ &hf_ehdlc_protocol,
++		  { "Protocol", "ehdlc.protocol",
++		    FT_UINT8, BASE_HEX, VALS(ehdlc_protocol_vals), 0x0,
++		    "The HDLC Sub-Protocol", HFILL }
++		},
++		{ &hf_ehdlc_sapi,
++		  { "SAPI", "ehdlc.sapi",
++		    FT_UINT8, BASE_DEC, NULL, 0x1f,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_c_r,
++		  { "C/R", "ehdlc.c_r",
++		    FT_UINT8, BASE_HEX, NULL, 0x20,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_control,
++		  { "Control Field", "ehdlc.control",
++		    FT_UINT16, BASE_HEX, NULL, 0,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_n_r,
++		  { "N(R)", "ehdlc.control.n_r",
++		    FT_UINT16, BASE_DEC, NULL, XDLC_N_R_EXT_MASK,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_n_s,
++		  { "N(S)", "ehdlc.control.n_s",
++		    FT_UINT16, BASE_DEC, NULL, XDLC_N_S_EXT_MASK,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_p,
++		  { "Poll", "ehdlc.control.p",
++		    FT_BOOLEAN, 8, TFS(&tfs_set_notset), XDLC_P_F,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_p_ext,
++		  { "Poll", "ehdlc.control.p",
++		    FT_BOOLEAN, 16, TFS(&tfs_set_notset), XDLC_P_F_EXT,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_f,
++		  { "Final", "ehdlc.control.f",
++		    FT_BOOLEAN, 8, TFS(&tfs_set_notset), XDLC_P_F,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_f_ext,
++		  { "Final", "ehdlc.control.f",
++		    FT_BOOLEAN, 16, TFS(&tfs_set_notset), XDLC_P_F_EXT,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_s_ftype,
++		  { "Supervisory frame type", "ehdlc.control.s_ftype",
++		    FT_UINT16, BASE_HEX, VALS(stype_vals), XDLC_S_FTYPE_MASK,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_u_modifier_cmd,
++		  { "Command", "ehdlc.control.u_modifier_cmd",
++		    FT_UINT8, BASE_HEX, VALS(modifier_vals_cmd), XDLC_U_MODIFIER_MASK,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_u_modifier_resp,
++		  { "Response", "ehdlc.control.u_modifier_resp",
++		    FT_UINT8, BASE_HEX, VALS(modifier_vals_resp), XDLC_U_MODIFIER_MASK,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_ftype_i,
++		  { "Frame Type", "ehdlc.control.ftype",
++		    FT_UINT16, BASE_HEX, VALS(ftype_vals), XDLC_I_MASK,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_ftype_s_u,
++		  { "Frame Type", "ehdlc.control.ftype",
++		    FT_UINT8, BASE_HEX, VALS(ftype_vals), XDLC_S_U_MASK,
++		    NULL, HFILL }
++		},
++		{ &hf_ehdlc_ftype_s_u_ext,
++		  { "Frame Type", "ehdlc.control.ftype",
++		    FT_UINT16, BASE_HEX, VALS(ftype_vals), XDLC_S_U_MASK,
++		    NULL, HFILL }
++		},
++	};
++
++	static gint *ett[] = {
++		&ett_ehdlc,
++		&ett_ehdlc_control,
++	};
++
++	proto_ehdlc =
++	    proto_register_protocol("Ericsson HDLC",
++				    "Ericsson HDLC as used in A-bis over IP", "ehdlc");
++
++	proto_register_field_array(proto_ehdlc, hf, array_length(hf));
++	proto_register_subtree_array(ett, array_length(ett));
++
++	register_dissector("ehdlc", dissect_ehdlc, proto_ehdlc);
++}
++
++void proto_reg_handoff_ehdlc(void)
++{
++	dissector_handle_t ehdlc_handle;
++
++	sub_handles[SUB_RSL] = find_dissector("gsm_abis_rsl");
++	sub_handles[SUB_OML] = find_dissector("gsm_abis_oml");
++	sub_handles[SUB_DATA] = find_dissector("data");
++
++	ehdlc_handle = create_dissector_handle(dissect_ehdlc, proto_ehdlc);
++}
