root/wireshark/abis_oml.patch

Revision b88b6d3ea612985cb09d6b2785c0d0c4c94895ee, 82.9 kB (checked in by Harald Welte <laforge@gnumonks.org>, 3 months ago)

[wireshark] Major wireshark OML dissector

Now it properly parses message types and IEs that are defined different
depending on the BTS vendor / A-bis implementor. This fixes a lot of
decoding bugs with Siemens BS-11 traces.

  • Property mode set to 100644
  • epan/dissectors/Makefile.common

    From b659280ff645354bb55529b05114419b9f0efd6f Mon Sep 17 00:00:00 2001
    From: Holger Hans Peter Freyther <zecke@selfish.org>
    Date: Mon, 19 Apr 2010 13:23:51 +0800
    Subject: [PATCH 1/2] Add the Abis OML patch.
    
    ---
     epan/dissectors/Makefile.common       |    1 +
     epan/dissectors/packet-gsm_abis_oml.c | 1405 +++++++++++++++++++++++++++++++++
     epan/dissectors/packet-gsm_abis_oml.h |  800 +++++++++++++++++++
     3 files changed, 2206 insertions(+), 0 deletions(-)
     create mode 100644 epan/dissectors/packet-gsm_abis_oml.c
     create mode 100644 epan/dissectors/packet-gsm_abis_oml.h
    
    old new  
    483483        packet-gsm_a_gm.c               \ 
    484484        packet-gsm_a_rp.c               \ 
    485485        packet-gsm_a_rr.c       \ 
     486        packet-gsm_abis_oml.c   \ 
    486487        packet-gsm_ipa.c        \ 
    487488        packet-gsm_bsslap.c             \ 
    488489        packet-gsm_bssmap_le.c  \ 
  • (a) /dev/null vs. (b) wireshark/epan/dissectors/packet-gsm_abis_oml.c

    a b  
     1/* packet-abis_oml.c 
     2 * Routines for packet dissection of GSM A-bis over IP (3GPP TS 12.21) 
     3 * Copyright 2009-2010 by Harald Welte <laforge@gnumonks.org> 
     4 * Copyright 2009 by Holger Hans Peter Freyther <zecke@selfish.org> 
     5 * based on A-bis OML code in OpenBSC 
     6 * 
     7 * $Id$ 
     8 * 
     9 * Wireshark - Network traffic analyzer 
     10 * By Gerald Combs <gerald@wireshark.org> 
     11 * Copyright 1998 Gerald Combs 
     12 * 
     13 * This program is free software; you can redistribute it and/or 
     14 * modify it under the terms of the GNU General Public License 
     15 * as published by the Free Software Foundation; either version 2 
     16 * of the License, or (at your option) any later version. 
     17 * 
     18 * This program is distributed in the hope that it will be useful, 
     19 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     21 * GNU General Public License for more details. 
     22 * 
     23 * You should have received a copy of the GNU General Public License 
     24 * along with this program; if not, write to the Free Software 
     25 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
     26 */ 
     27 
     28#ifdef HAVE_CONFIG_H 
     29# include "config.h" 
     30#endif 
     31 
     32#include <glib.h> 
     33 
     34#include <epan/packet.h> 
     35#include <epan/emem.h> 
     36#include <epan/lapd_sapi.h> 
     37#include <epan/prefs.h> 
     38 
     39#include "packet-gsm_abis_oml.h" 
     40#include "packet-gsm_a_common.h" 
     41 
     42#include <stdio.h> 
     43 
     44/* initialize the protocol and registered fields */ 
     45static int proto_abis_oml = -1; 
     46 
     47/* OML header */ 
     48static int hf_oml_msg_disc = -1; 
     49static int hf_oml_placement = -1; 
     50static int hf_oml_sequence = -1; 
     51static int hf_oml_length = -1; 
     52/* FOM header */ 
     53static int hf_oml_fom_msgtype = -1; 
     54static int hf_oml_fom_objclass = -1; 
     55static int hf_oml_fom_inst_bts = -1; 
     56static int hf_oml_fom_inst_trx = -1; 
     57static int hf_oml_fom_inst_ts = -1; 
     58static int hf_oml_fom_attr_tag = -1; 
     59static int hf_oml_fom_attr_len = -1; 
     60static int hf_oml_fom_attr_val = -1; 
     61/* FOM attributes */ 
     62static int hf_attr_adm_state = -1; 
     63static int hf_attr_arfcn = -1; 
     64static int hf_attr_oper_state = -1; 
     65static int hf_attr_avail_state = -1; 
     66static int hf_attr_event_type = -1; 
     67static int hf_attr_severity = -1; 
     68static int hf_attr_bcch_arfcn = -1; 
     69static int hf_attr_bsic = -1; 
     70static int hf_attr_test_no = -1; 
     71static int hf_attr_tsc = -1; 
     72static int hf_attr_tei = -1; 
     73static int hf_attr_ach_btsp = -1; 
     74static int hf_attr_ach_tslot = -1; 
     75static int hf_attr_ach_sslot = -1; 
     76static int hf_attr_gsm_time = -1; 
     77static int hf_attr_chan_comb = -1; 
     78static int hf_attr_hsn = -1; 
     79static int hf_attr_maio = -1; 
     80/* Ipaccess */ 
     81static int hf_oml_ipa_tres_attr_tag = -1; 
     82static int hf_oml_ipa_tres_attr_len = -1; 
     83static int hf_attr_ipa_test_res = -1; 
     84static int hf_attr_ipa_tr_rxlev = -1; 
     85static int hf_attr_ipa_tr_b_rxlev = -1; 
     86static int hf_attr_ipa_tr_arfcn = -1; 
     87static int hf_attr_ipa_tr_f_qual = -1; 
     88static int hf_attr_ipa_tr_f_err = -1; 
     89static int hf_attr_ipa_tr_rxqual = -1; 
     90static int hf_attr_ipa_tr_frame_offs = -1; 
     91static int hf_attr_ipa_tr_framenr_offs = -1; 
     92static int hf_attr_ipa_tr_bsic = -1; 
     93static int hf_attr_ipa_tr_cell_id = -1; 
     94static int hf_attr_ipa_tr_si2 = -1; 
     95static int hf_attr_ipa_tr_si2bis = -1; 
     96static int hf_attr_ipa_tr_si2ter = -1; 
     97static int hf_attr_ipa_tr_chan_desc = -1; 
     98static int hf_attr_ipa_rsl_ip = -1; 
     99static int hf_attr_ipa_rsl_port = -1; 
     100static int hf_attr_ipa_prim_oml_ip = -1; 
     101static int hf_attr_ipa_prim_oml_port = -1; 
     102static int hf_attr_ipa_location_name = -1; 
     103static int hf_attr_ipa_unit_id = -1; 
     104static int hf_attr_ipa_unit_name = -1; 
     105static int hf_attr_ipa_nv_flags = -1; 
     106static int hf_attr_ipa_nv_mask = -1; 
     107static int hf_attr_ipa_nsl_sport = -1; 
     108static int hf_attr_ipa_nsl_daddr = -1; 
     109static int hf_attr_ipa_nsl_dport = -1; 
     110static int hf_attr_ipa_nsei = -1; 
     111static int hf_attr_ipa_nsvci = -1; 
     112static int hf_attr_ipa_bvci = -1; 
     113static int hf_attr_ipa_rac = -1; 
     114 
     115/* initialize the subtree pointers */ 
     116static int ett_oml = -1; 
     117static int ett_oml_fom = -1; 
     118static int ett_oml_fom_att = -1; 
     119 
     120/* Decode things as nanoBTS traces */ 
     121static gboolean global_oml_use_nano_bts = TRUE; 
     122 
     123static proto_tree *top_tree; 
     124 
     125/* TS 12.21 Chapter 8.1 / TS 08.59 */ 
     126static const value_string oml_msg_disc_vals[] = { 
     127        { ABIS_OM_MDISC_FOM,    "Formatted O&M" }, 
     128        { ABIS_OM_MDISC_MMI,    "MMI Transfer" }, 
     129        { ABIS_OM_MDISC_TRAU,   "TRAU O&M" }, 
     130        { ABIS_OM_MDISC_MANUF,  "Manufacturer specific" }, 
     131}; 
     132 
     133/* TS 12.21 Chapter 8.1.1 */ 
     134static const value_string oml_placement_vals[] = { 
     135        { ABIS_OM_PLACEMENT_ONLY,       "Only" }, 
     136        { ABIS_OM_PLACEMENT_FIRST,      "First" }, 
     137        { ABIS_OM_PLACEMENT_MIDDLE,     "Middle" }, 
     138        { ABIS_OM_PLACEMENT_LAST,       "Last" }, 
     139}; 
     140 
     141/* Standard Message Types as per TS 12.21 Chapter 9.2 */ 
     142static const value_string _oml_fom_msgtype_vals[] = { 
     143        { NM_MT_LOAD_INIT,              "Software Load Init" }, 
     144        { NM_MT_LOAD_INIT_ACK,          "Software Load Init ACK" }, 
     145        { NM_MT_LOAD_INIT_NACK,         "Software Load Init NACK" }, 
     146        { NM_MT_LOAD_SEG,               "Software Load Segment" }, 
     147        { NM_MT_LOAD_SEG_ACK,           "Software Load Segment ACK" }, 
     148        { NM_MT_LOAD_END,               "Software Load End" }, 
     149        { NM_MT_LOAD_END_ACK,           "Software Load End ACK" }, 
     150        { NM_MT_LOAD_END_NACK,          "Software Load End NACK" }, 
     151        { NM_MT_SW_ACT_REQ,             "Software Activate Request" }, 
     152        { NM_MT_SW_ACT_REQ_ACK,         "Software Activate Request ACK" }, 
     153        { NM_MT_SW_ACT_REQ_NACK,        "Software Activate Request NACK" }, 
     154        { NM_MT_ACTIVATE_SW,            "Activate Software" }, 
     155        { NM_MT_ACTIVATE_SW_ACK,        "Activate Software ACK" }, 
     156        { NM_MT_ACTIVATE_SW_NACK,       "Activate Software NACK" }, 
     157        { NM_MT_SW_ACTIVATED_REP,       "Software Activated Report" }, 
     158        { NM_MT_ESTABLISH_TEI,          "Establish TEI" }, 
     159        { NM_MT_ESTABLISH_TEI_ACK,      "Establish TEI ACK" }, 
     160        { NM_MT_ESTABLISH_TEI_NACK,     "Establish TEI NACK" }, 
     161        { NM_MT_CONN_TERR_SIGN,         "Connect Terrestrial Signalling" }, 
     162        { NM_MT_CONN_TERR_SIGN_ACK,     "Connect Terrestrial Signalling ACK" }, 
     163        { NM_MT_CONN_TERR_SIGN_NACK,    "Connect Terrestrial Signalling NACK" }, 
     164        { NM_MT_DISC_TERR_SIGN,         "Disconnect Terrestrial Signalling" }, 
     165        { NM_MT_DISC_TERR_SIGN_ACK,     "Disconnect Terrestrial Signalling ACK" }, 
     166        { NM_MT_DISC_TERR_SIGN_NACK,    "Disconnect Terrestrial Signalling NACK" }, 
     167        { NM_MT_CONN_TERR_TRAF,         "Connect Terrestrial Traffic" }, 
     168        { NM_MT_CONN_TERR_TRAF_ACK,     "Connect Terrestrial Traffic ACK" }, 
     169        { NM_MT_CONN_TERR_TRAF_NACK,    "Connect Terrestrial Traffic NACK" }, 
     170        { NM_MT_DISC_TERR_TRAF,         "Disconnect Terrestrial Traffic" }, 
     171        { NM_MT_DISC_TERR_TRAF_ACK,     "Disconnect Terrestrial Traffic ACK" }, 
     172        { NM_MT_DISC_TERR_TRAF_NACK,    "Disconnect Terrestrial Traffic NACK" }, 
     173        { NM_MT_CONN_MDROP_LINK,        "Connect Multi-Drop Link" }, 
     174        { NM_MT_CONN_MDROP_LINK_ACK,    "Connect Multi-Drop Link ACK" }, 
     175        { NM_MT_CONN_MDROP_LINK_NACK,   "Connect Multi-Drop Link NACK" }, 
     176        { NM_MT_DISC_MDROP_LINK,        "Disconnect Multi-Drop Link" }, 
     177        { NM_MT_DISC_MDROP_LINK_ACK,    "Disconnect Multi-Drop Link ACK" }, 
     178        { NM_MT_DISC_MDROP_LINK_NACK,   "Disconnect Multi-Drop Link NACK" }, 
     179        { NM_MT_SET_BTS_ATTR,           "Set BTS Attributes" }, 
     180        { NM_MT_SET_BTS_ATTR_ACK,       "Set BTS Attributes ACK" }, 
     181        { NM_MT_SET_BTS_ATTR_NACK,      "Set BTS Attributes NACK" }, 
     182        { NM_MT_SET_RADIO_ATTR,         "Set Radio Carrier Attributes" }, 
     183        { NM_MT_SET_RADIO_ATTR_ACK,     "Set Radio Carrier Attributes ACK" }, 
     184        { NM_MT_SET_RADIO_ATTR_NACK,    "Set Radio Carrier Attributes NACK" }, 
     185        { NM_MT_SET_CHAN_ATTR,          "Set Channel Attributes" }, 
     186        { NM_MT_SET_CHAN_ATTR_ACK,      "Set Channel Attributes ACK" }, 
     187        { NM_MT_SET_CHAN_ATTR_NACK,     "Set Channel Attributes NACK" }, 
     188        { NM_MT_PERF_TEST,              "Perform Test" }, 
     189        { NM_MT_PERF_TEST_ACK,          "Perform Test ACK" }, 
     190        { NM_MT_PERF_TEST_NACK,         "Perform Test NACK" }, 
     191        { NM_MT_TEST_REP,               "Test Report" }, 
     192        { NM_MT_SEND_TEST_REP,          "Send Test Report" }, 
     193        { NM_MT_SEND_TEST_REP_ACK,      "Send Test Report ACK" }, 
     194        { NM_MT_SEND_TEST_REP_NACK,     "Send Test Report NACK" }, 
     195        { NM_MT_STOP_TEST,              "Stop Test" }, 
     196        { NM_MT_STOP_TEST_ACK,          "Stop Test ACK" }, 
     197        { NM_MT_STOP_TEST_NACK,         "Stop Test NACK" }, 
     198        { NM_MT_STATECHG_EVENT_REP,     "State Changed Event Report" }, 
     199        { NM_MT_FAILURE_EVENT_REP,      "Failure Event Report" }, 
     200        { NM_MT_STOP_EVENT_REP,         "Stop Sending Event Reports" }, 
     201        { NM_MT_STOP_EVENT_REP_ACK,     "Stop Sending Event Reports ACK" }, 
     202        { NM_MT_STOP_EVENT_REP_NACK,    "Stop Sending Event Reports NACK" }, 
     203        { NM_MT_REST_EVENT_REP,         "Restart Sending Event Reports" }, 
     204        { NM_MT_REST_EVENT_REP_ACK,     "Restart Sending Event Reports ACK" }, 
     205        { NM_MT_REST_EVENT_REP_NACK,    "Restart Sending Event Reports NACK" }, 
     206        { NM_MT_CHG_ADM_STATE,          "Change Administrative State" }, 
     207        { NM_MT_CHG_ADM_STATE_ACK,      "Change Administrative State ACK" }, 
     208        { NM_MT_CHG_ADM_STATE_NACK,     "Change Administrative State NACK" }, 
     209        { NM_MT_CHG_ADM_STATE_REQ,      "Change Administrative State Request" }, 
     210        { NM_MT_CHG_ADM_STATE_REQ_ACK,  "Change Administrative State Request ACK" }, 
     211        { NM_MT_CHG_ADM_STATE_REQ_NACK, "Change Administrative State Request NACK" }, 
     212        { NM_MT_REP_OUTST_ALARMS,       "Report Outstanding Alarms" }, 
     213        { NM_MT_REP_OUTST_ALARMS_ACK,   "Report Outstanding Alarms ACK" }, 
     214        { NM_MT_REP_OUTST_ALARMS_NACK,  "Report Outstanding Alarms NACK" }, 
     215        { NM_MT_CHANGEOVER,             "Changeover" }, 
     216        { NM_MT_CHANGEOVER_ACK,         "Changeover ACK" }, 
     217        { NM_MT_CHANGEOVER_NACK,        "Changeover NACK" }, 
     218        { NM_MT_OPSTART,                "Opstart" }, 
     219        { NM_MT_OPSTART_ACK,            "Opstart ACK" }, 
     220        { NM_MT_OPSTART_NACK,           "Opstart NACK" }, 
     221        { NM_MT_REINIT,                 "Reinitialize" }, 
     222        { NM_MT_REINIT_ACK,             "Reinitialize ACK" }, 
     223        { NM_MT_REINIT_NACK,            "Reinitialize NACK" }, 
     224        { NM_MT_SET_SITE_OUT,           "Set Site Outputs" }, 
     225        { NM_MT_SET_SITE_OUT_ACK,       "Set Site Outputs ACK" }, 
     226        { NM_MT_SET_SITE_OUT_NACK,      "Set Site Outputs NACK" }, 
     227        { NM_MT_CHG_HW_CONF,            "Change HW Configuration" }, 
     228        { NM_MT_CHG_HW_CONF_ACK,        "Change HW Configuration ACK" }, 
     229        { NM_MT_CHG_HW_CONF_NACK,       "Change HW Configuration NACK" }, 
     230        { NM_MT_MEAS_RES_REQ,           "Measurement Result Request" }, 
     231        { NM_MT_MEAS_RES_RESP,          "Measurement Result Response" }, 
     232        { NM_MT_STOP_MEAS,              "Stop Measurement" }, 
     233        { NM_MT_START_MEAS,             "Start Measurement" }, 
     234        { NM_MT_GET_ATTR,               "Get Attributes" }, 
     235        { NM_MT_GET_ATTR_RESP,          "Get Attributes Response" }, 
     236        { NM_MT_GET_ATTR_NACK,          "Get Attributes NACK" }, 
     237        { NM_MT_SET_ALARM_THRES,        "Set Alarm Threshold" }, 
     238        { NM_MT_SET_ALARM_THRES_ACK,    "Set Alarm Threshold ACK" }, 
     239        { NM_MT_SET_ALARM_THRES_NACK,   "Set Alarm Threshold NACK" }, 
     240        { 0, NULL } 
     241}; 
     242 
     243/* proprietary ip.access message types, not in the standard */ 
     244static const value_string _oml_fom_msgtype_vals_ipa[] = { 
     245        { NM_MT_IPACC_RESTART,          "IPA Restart" }, 
     246        { NM_MT_IPACC_RESTART_ACK,      "IPA Restart ACK" }, 
     247        { NM_MT_IPACC_RSL_CONNECT,      "IPA RSL Connect" }, 
     248        { NM_MT_IPACC_RSL_CONNECT_ACK,  "IPA RSL Connect ACK" }, 
     249        { NM_MT_IPACC_RSL_CONNECT_NACK, "IPA RSL Connect NACK" }, 
     250        { NM_MT_IPACC_RSL_DISCONNECT,   "IPA RSL Disconnect" }, 
     251        { NM_MT_IPACC_RSL_DISCONNECT_ACK, "IPA RSL Disconnect ACK" }, 
     252        { NM_MT_IPACC_RSL_DISCONNECT_NACK, "IPA RSL Disconnect NACK" }, 
     253        { NM_MT_IPACC_CONN_TRAF,        "IPA Connect Traffic" }, 
     254        { NM_MT_IPACC_CONN_TRAF_ACK,    "IPA Connect Traffic ACK" }, 
     255        { NM_MT_IPACC_CONN_TRAF_NACK,   "IPA Connect Traffic NACK" }, 
     256        { NM_MT_IPACC_DISC_TRAF,        "IPA Disconnect Traffic" }, 
     257        { NM_MT_IPACC_DISC_TRAF_ACK,    "IPA Disconnect Traffic ACK" }, 
     258        { NM_MT_IPACC_DISC_TRAF_NACK,   "IPA Disconnect Traffic NACK" }, 
     259        { NM_MT_IPACC_DEF_BOOT_SW,      "IPA Default Boot Software" }, 
     260        { NM_MT_IPACC_DEF_BOOT_SW_ACK,  "IPA Default Boot Software ACK" }, 
     261        { NM_MT_IPACC_DEF_BOOT_SW_NACK, "IPA Default Boot Software NACK" }, 
     262        { NM_MT_IPACC_SET_NVATTR,       "IPA Set NVRAM Attributes" }, 
     263        { NM_MT_IPACC_SET_NVATTR_ACK,   "IPA Set NVRAM Attributes ACK" }, 
     264        { NM_MT_IPACC_SET_NVATTR_NACK,  "IPA Set NVRAM Attributes NACK" }, 
     265        { NM_MT_IPACC_GET_NVATTR,       "IPA Get NVRAM Attributes" }, 
     266        { NM_MT_IPACC_GET_NVATTR_ACK,   "IPA Get NVRAM Attributes ACK" }, 
     267        { NM_MT_IPACC_GET_NVATTR_NACK,  "IPA Get NVRAM Attributes NACK" }, 
     268        { NM_MT_IPACC_SET_ATTR,         "IPA Set Attributes" }, 
     269        { NM_MT_IPACC_SET_ATTR_ACK,     "IPA Set Attributes ACK" }, 
     270        { NM_MT_IPACC_SET_ATTR_NACK,    "IPA Set Attributes NACK" }, 
     271        { NM_MT_IPACC_ATTR_CHG_EVT,     "IPA Attribute Change Event" }, 
     272        { NM_MT_IPACC_SW_DEACT,         "IPA Software Deactivate" }, 
     273        { NM_MT_IPACC_SW_DEACT_ACK,     "IPA Software Deactivate ACK" }, 
     274        { NM_MT_IPACC_SW_DEACT_NACK,    "IPA Software Deactivate NACK" }, 
     275        { NM_MT_IPACC_MEAS_RES_REQ_NACK,"IPA Measurement Result Request NACK" }, 
     276        { NM_MT_IPACC_START_MEAS_NACK,  "IPA Start Measurement NACK" }, 
     277        { NM_MT_IPACC_STOP_MEAS_NACK,   "IPA Stop Measurement NACK" }, 
     278        { 0, NULL } 
     279}; 
     280 
     281/* proprietary Siemens message types, not in the standard */ 
     282static const value_string _oml_fom_msgtype_vals_bs11[] = { 
     283        { NM_MT_BS11_RESET_RESOURCE,    "SIE Reset Resource" }, 
     284        { NM_MT_BS11_BEGIN_DB_TX,       "SIE Begin Database Transmission" }, 
     285        { NM_MT_BS11_BEGIN_DB_TX_ACK,   "SIE Begin Database Transmission ACK" }, 
     286        { NM_MT_BS11_BEGIN_DB_TX_NACK,  "SIE Begin Database Transmission NACK" }, 
     287        { NM_MT_BS11_END_DB_TX,         "SIE End Database Transmission" }, 
     288        { NM_MT_BS11_END_DB_TX_ACK,     "SIE End Database Transmission ACK" }, 
     289        { NM_MT_BS11_END_DB_TX_NACK,    "SIE End Database Transmission NACK" }, 
     290        { NM_MT_BS11_CREATE_OBJ,        "SIE Create Object" }, 
     291        { NM_MT_BS11_CREATE_OBJ_ACK,    "SIE Create Object ACK" }, 
     292        { NM_MT_BS11_CREATE_OBJ_NACK,   "SIE Create Object NACK" }, 
     293        { NM_MT_BS11_DELETE_OBJ,        "SIE Delete Object" }, 
     294        { NM_MT_BS11_DELETE_OBJ_ACK,    "SIE Delete Object ACK" }, 
     295        { NM_MT_BS11_DELETE_OBJ_NACK,   "SIE Delete Object NACK" }, 
     296        { NM_MT_BS11_SET_ATTR,          "SIE Set Attribute" }, 
     297        { NM_MT_BS11_SET_ATTR_ACK,      "SIE Set Attribute ACK" }, 
     298        { NM_MT_BS11_SET_ATTR_NACK,     "SIE Set Attribute NACK" }, 
     299        { NM_MT_BS11_GET_STATE,         "SIE Get State" }, 
     300        { NM_MT_BS11_GET_STATE_ACK,     "SIE Get State ACK" }, 
     301        { NM_MT_BS11_LMT_LOGON,         "SIE LMT Logon" }, 
     302        { NM_MT_BS11_LMT_LOGON_ACK,     "SIE LMT Logon ACK" }, 
     303        { NM_MT_BS11_RESTART,           "SIE Restart" }, 
     304        { NM_MT_BS11_RESTART_ACK,       "SIE Restart ACK" }, 
     305        { NM_MT_BS11_DISCONNECT,        "SIE Disconnect BTS" }, 
     306        { NM_MT_BS11_DISCONNECT_ACK,    "SIE Disconnect BTS ACK" }, 
     307        { NM_MT_BS11_LMT_LOGOFF,        "SIE LMT Logoff" }, 
     308        { NM_MT_BS11_LMT_LOGOFF_ACK,    "SIE LMT Logoff ACK" }, 
     309        { NM_MT_BS11_RECONNECT,         "SIE Reconnect BTS" }, 
     310        { NM_MT_BS11_RECONNECT_ACK,     "SIE Reconnect BTS ACK" }, 
     311        { 0, NULL } 
     312}; 
     313 
     314/* initialize with the standard message types only */ 
     315static value_string_ext oml_fom_msgtype_vse = VALUE_STRING_EXT_INIT(_oml_fom_msgtype_vals); 
     316 
     317/* TS 12.21 Section 9.2: Object Class */ 
     318static const value_string oml_fom_objclass_vals[] = { 
     319        { NM_OC_SITE_MANAGER,           "BTS Site Manager" }, 
     320        { NM_OC_BTS,                    "BTS" }, 
     321        { NM_OC_RADIO_CARRIER,          "Radio Carrier" }, 
     322        { NM_OC_CHANNEL,                "Radio Channel" }, 
     323        { NM_OC_BASEB_TRANSC,           "Baseband Transceiver" }, 
     324 
     325        /* proprietary, vendor specific */ 
     326        { NM_OC_BS11_ADJC,              "SIE Adjacend Channel" }, 
     327        { NM_OC_BS11_HANDOVER,          "SIE Handover" }, 
     328        { NM_OC_BS11_PWR_CTRL,          "SIE Power Control" }, 
     329        { NM_OC_BS11_BTSE,              "SIE BTSE" }, 
     330        { NM_OC_BS11_RACK,              "SIE Rack" }, 
     331        { NM_OC_BS11,                   "SIE SiemensHW" }, 
     332        { NM_OC_BS11_TEST,              "SIE Test" }, 
     333        { NM_OC_BS11_ENVABTSE,          "SIE EnvaBTSE" }, 
     334        { NM_OC_BS11_BPORT,             "SIE BPort" }, 
     335 
     336        { NM_OC_GPRS_NSE,               "GPRS NSE" }, 
     337        { NM_OC_GPRS_CELL,              "GPRS Cell" }, 
     338        { NM_OC_GPRS_NSVC0,             "GPRS NSVC0" }, 
     339        { NM_OC_GPRS_NSVC1,             "GPRS NSVC1" }, 
     340 
     341        { NM_OC_NULL,                   "NULL" }, 
     342        { 0, NULL } 
     343}; 
     344 
     345/* TS 12.21 Section 9.4: Attributes */ 
     346static const value_string _oml_fom_attr_vals[] = { 
     347        { NM_ATT_ABIS_CHANNEL,          "A-bis Channel" }, 
     348        { NM_ATT_ADD_INFO,              "Additional Information" }, 
     349        { NM_ATT_ADD_TEXT,              "Additional Text" }, 
     350        { NM_ATT_ADM_STATE,             "Administrative State" }, 
     351        { NM_ATT_ARFCN_LIST,            "ARFCN List" }, 
     352        { NM_ATT_AUTON_REPORT,          "Autonomously Report" }, 
     353        { NM_ATT_AVAIL_STATUS,          "Availability Status" }, 
     354        { NM_ATT_BCCH_ARFCN,            "BCCH ARFCN" }, 
     355        { NM_ATT_BSIC,                  "BSIC" }, 
     356        { NM_ATT_BTS_AIR_TIMER,         "BTS Air Timer" }, 
     357        { NM_ATT_CCCH_L_I_P,            "CCCH Load Indication Period" }, 
     358        { NM_ATT_CCCH_L_T,              "CCCH Load Threshold" }, 
     359        { NM_ATT_CHAN_COMB,             "Channel Combination" }, 
     360        { NM_ATT_CONN_FAIL_CRIT,        "Connection Fail Criterion" }, 
     361        { NM_ATT_DEST,                  "Destination" }, 
     362        { NM_ATT_EVENT_TYPE,            "Event Type" }, 
     363        { NM_ATT_FILE_ID,               "File ID" }, 
     364        { NM_ATT_FILE_VERSION,          "File Version" }, 
     365        { NM_ATT_GSM_TIME,              "GSM Time" }, 
     366        { NM_ATT_HSN,                   "HSN" }, 
     367        { NM_ATT_HW_CONFIG,             "HW Configuration" }, 
     368        { NM_ATT_HW_DESC,               "HW Description" }, 
     369        { NM_ATT_INTAVE_PARAM,          "Intave Parameter" }, 
     370        { NM_ATT_INTERF_BOUND,          "Interference Boundaries" }, 
     371        { NM_ATT_LIST_REQ_ATTR,         "List of required Attributes" }, 
     372        { NM_ATT_MAIO,                  "MAIO" }, 
     373        { NM_ATT_MANUF_STATE,           "Manufacturer Dependent State" }, 
     374        { NM_ATT_MANUF_THRESH,          "Manufacturer Dependent Thresholds" }, 
     375        { NM_ATT_MANUF_ID,              "Manufacturer Id" }, 
     376        { NM_ATT_MAX_TA,                "Maximum Timing Advance" }, 
     377        { NM_ATT_MDROP_LINK,            "Multi-drop BSC Link" }, 
     378        { NM_ATT_MDROP_NEXT,            "Multi-drop next BTS Link" }, 
     379        { NM_ATT_NACK_CAUSES,           "NACK Causes" }, 
     380        { NM_ATT_NY1,                   "Ny1" }, 
     381        { NM_ATT_OPER_STATE,            "Operational State" }, 
     382        { NM_ATT_OVERL_PERIOD,          "Overload Period" }, 
     383        { NM_ATT_PHYS_CONF,             "Physical Config" }, 
     384        { NM_ATT_POWER_CLASS,           "Power Class" }, 
     385        { NM_ATT_POWER_THRESH,          "Power Output Thresholds" }, 
     386        { NM_ATT_PROB_CAUSE,            "Probable Cause" }, 
     387        { NM_ATT_RACH_B_THRESH,         "RACH Busy Threshold" }, 
     388        { NM_ATT_LDAVG_SLOTS,           "RACH Load Averaging Slots" }, 
     389        { NM_ATT_RAD_SUBC,              "Radio Sub Channel" }, 
     390        { NM_ATT_RF_MAXPOWR_R,          "RF Max Power Reduction" }, 
     391        { NM_ATT_SITE_INPUTS,           "Site Inputs" }, 
     392        { NM_ATT_SITE_OUTPUTS,          "Site Outputs" }, 
     393        { NM_ATT_SOURCE,                "Source" }, 
     394        { NM_ATT_SPEC_PROB,             "Specific Problems" }, 
     395        { NM_ATT_START_TIME,            "Starting Time" }, 
     396        { NM_ATT_T200,                  "T200" }, 
     397        { NM_ATT_TEI,                   "TEI" }, 
     398        { NM_ATT_TEST_DUR,              "Test Duration" }, 
     399        { NM_ATT_TEST_NO,               "Test No" }, 
     400        { NM_ATT_TEST_REPORT,           "Test Report Info" }, 
     401        { NM_ATT_VSWR_THRESH,           "VSWR Thresholds " }, 
     402        { NM_ATT_WINDOW_SIZE,           "Window Size" }, 
     403        { NM_ATT_BS11_RSSI_OFFS,        "SIE RSSI Offset" }, 
     404        { NM_ATT_BS11_TXPWR,            "SIE TX Power" }, 
     405        { NM_ATT_BS11_DIVERSITY,        "SIE Diversity" }, 
     406        { NM_ATT_TSC,                   "Training Sequence Code" }, 
     407        { NM_ATT_SW_CONFIG,             "SW Configuration" }, 
     408        { NM_ATT_SW_DESCR,              "SW Description" }, 
     409        { NM_ATT_SEVERITY,              "Perceived Severity" }, 
     410        { NM_ATT_GET_ARI,               "Get ARI" }, 
     411        { NM_ATT_HW_CONF_CHG,           "HW Configuration Change" }, 
     412        { NM_ATT_OUTST_ALARM,           "Outstanding Alarm" }, 
     413        { NM_ATT_FILE_DATA,             "File Data" }, 
     414        { NM_ATT_MEAS_RES,              "Measurement Result" }, 
     415        { NM_ATT_MEAS_TYPE,             "Measurement Type" }, 
     416        { 0, NULL } 
     417}; 
     418 
     419static value_string_ext oml_fom_attr_vse = VALUE_STRING_EXT_INIT(_oml_fom_attr_vals); 
     420 
     421/* proprietary Siemens attributes, not in the standard */ 
     422static const value_string oml_fom_attr_vals_bs11[] = { 
     423        { NM_ATT_BS11_OM_LAPD_REL_TIMER,"SIE OML LAPD Release Timer" }, 
     424        { NM_ATT_BS11_RF_RES_IND_PER,   "SIE RF Resource Indication Period" }, 
     425        { NM_ATT_BS11_RX_LEV_MIN_CELL,  "SIE RxLevel Min Cell" }, 
     426        { NM_ATT_BS11_ABIS_EXT_TIME,    "SIE A-bis external time" }, 
     427        { NM_ATT_BS11_TIMER_HO_REQUEST, "SIE Timer Handover Request" }, 
     428        { NM_ATT_BS11_TIMER_NCELL,      "SIE Timer nCell" }, 
     429        { NM_ATT_BS11_TSYNC,            "SIE Timer Tsync" }, 
     430        { NM_ATT_BS11_TTRAU,            "SIE Timer Ttrau" }, 
     431        { NM_ATT_BS11_EMRG_CFG_MEMBER,  "SIE Emergency Config Member" }, 
     432        { NM_ATT_BS11_TRX_AREA,         "SIE TRX Area" }, 
     433        { NM_ATT_BS11_BCCH_RECONF,      "SIE BCCH Reconfiguration" }, 
     434        { NM_ATT_BS11_BIT_ERR_THESH,    "SIE Bit Error Threshold" }, 
     435        { NM_ATT_BS11_BOOT_SW_VERS,     "SIE Boot Software Version" }, 
     436        { NM_ATT_BS11_CCLK_ACCURACY,    "SIE CCLK Accuracy" }, 
     437        { NM_ATT_BS11_CCLK_TYPE,        "SIE CCLK Type" }, 
     438        { NM_ATT_BS11_INP_IMPEDANCE,    "SIE Input Impedance" }, 
     439        { NM_ATT_BS11_L1_PROT_TYPE,     "SIE L1 Protocol Type" }, 
     440        { NM_ATT_BS11_LINE_CFG,         "SIE Line Configuration" }, 
     441        { NM_ATT_BS11_LI_PORT_1,        "SIE Line Interface Port 1" }, 
     442        { NM_ATT_BS11_LI_PORT_2,        "SIE Line Interface Port 2" }, 
     443        { NM_ATT_BS11_L1_REM_ALM_TYPE,  "SIE L1 Remote Alarm Type" }, 
     444        { NM_ATT_BS11_SW_LOAD_INTENDED, "SIE Software Load Intended" }, 
     445        { NM_ATT_BS11_SW_LOAD_SAFETY,   "SIE Software Load Safety" }, 
     446        { NM_ATT_BS11_SW_LOAD_STORED,   "SIE Software Load Stored" }, 
     447        { NM_ATT_BS11_VENDOR_NAME,      "SIE Vendor Name" }, 
     448        { NM_ATT_BS11_HOPPING_MODE,     "SIE Hopping Mode" }, 
     449        { NM_ATT_BS11_LMT_LOGON_SESSION,"SIE LMT Logon Session" }, 
     450        { NM_ATT_BS11_LMT_LOGIN_TIME,   "SIE LMT Login Time" }, 
     451        { NM_ATT_BS11_LMT_USER_ACC_LEV, "SIE LMT User Account Level" }, 
     452        { NM_ATT_BS11_LMT_USER_NAME,    "SIE LMT User Account Name" }, 
     453        { NM_ATT_BS11_L1_CONTROL_TS,    "SIE L1 Control TS" }, 
     454        { NM_ATT_BS11_RADIO_MEAS_GRAN,  "SIE Radio Measurement Granularity" }, 
     455        { NM_ATT_BS11_RADIO_MEAS_REP,   "SIE Rdadio Measurement Report" }, 
     456        { NM_ATT_BS11_SH_LAPD_INT_TIMER,"SIE LAPD Internal Timer" }, 
     457        { NM_ATT_BS11_BTS_STATE,        "SIE BTS State" }, 
     458        { NM_ATT_BS11_E1_STATE,         "SIE E1 State" }, 
     459        { NM_ATT_BS11_PLL,              "SIE PLL" }, 
     460        { NM_ATT_BS11_RX_OFFSET,        "SIE Rx Offset" }, 
     461        { NM_ATT_BS11_ANT_TYPE,         "SIE Antenna Type" }, 
     462        { NM_ATT_BS11_PLL_MODE,         "SIE PLL Mode" }, 
     463        { NM_ATT_BS11_PASSWORD,         "SIE Password" }, 
     464        { NM_ATT_BS11_ESN_FW_CODE_NO,   "SIE ESN FW Code Number" }, 
     465        { NM_ATT_BS11_ESN_HW_CODE_NO,   "SIE ESN HW Code Number" }, 
     466        { NM_ATT_BS11_ESN_PCB_SERIAL,   "SIE ESN PCB Serial Number" }, 
     467        { NM_ATT_BS11_EXCESSIVE_DISTANCE, "SIE Excessive Distance" }, 
     468        { NM_ATT_BS11_ALL_TEST_CATG,    "SIE All Test Categories" }, 
     469        { NM_ATT_BS11_BTSLS_HOPPING,    "SIE BTS LS Hopping" }, 
     470        { NM_ATT_BS11_CELL_ALLOC_NR,    "SIE Cell Allocation Number" }, 
     471        { NM_ATT_BS11_CELL_GLOBAL_ID,   "SIE Cell Global ID" }, 
     472        { NM_ATT_BS11_ENA_INTERF_CLASS, "SIE Enable Interference Class" }, 
     473        { NM_ATT_BS11_ENA_INT_INTEC_HANDO, "SIE Enable Int Intec Handover" }, 
     474        { NM_ATT_BS11_ENA_INT_INTRC_HANDO, "SIE Enable Int Intrc Handover" }, 
     475        { NM_ATT_BS11_ENA_MS_PWR_CTRL,  "SIE Enable MS Power Control" }, 
     476        { NM_ATT_BS11_ENA_PWR_BDGT_HO,  "SIE Enable Power Budget HO" }, 
     477        { NM_ATT_BS11_ENA_RXLEV_HO,     "SIE Enable RxLevel HO" }, 
     478        { NM_ATT_BS11_ENA_RXQUAL_HO,    "SIE Enable RxQual HO" }, 
     479        { NM_ATT_BS11_FACCH_QUAL,       "SIE FACCH Quality" }, 
     480        { 0, NULL } 
     481}; 
     482 
     483/* proprietary ip.access attributes, not in the standard */ 
     484static const value_string oml_fom_attr_vals_ipa[] = { 
     485        { NM_ATT_IPACC_DST_IP,          "IPA Destination IP Address" }, 
     486        { NM_ATT_IPACC_DST_IP_PORT,     "IPA Destionation IP Port" }, 
     487        { NM_ATT_IPACC_SSRC,            "IPA RTP SSRC" }, 
     488        { NM_ATT_IPACC_RTP_PAYLD_TYPE,  "IPA RTP Payload Type" }, 
     489        { NM_ATT_IPACC_BASEB_ID,        "IPA Baseband Identifier" }, 
     490        { NM_ATT_IPACC_STREAM_ID,       "IPA Stream Identifier" }, 
     491        { NM_ATT_IPACC_NV_FLAGS,        "IPA NVRAM Flags" }, 
     492        { NM_ATT_IPACC_FREQ_CTRL,       "IPA Frequency Control" }, 
     493        { NM_ATT_IPACC_PRIM_OML_CFG,    "IPA Primary OML Config" }, 
     494        { NM_ATT_IPACC_SEC_OML_CFG,     "IPA Secondary OML Config" }, 
     495        { NM_ATT_IPACC_IP_IF_CFG,       "IPA IP Interface Config" }, 
     496        { NM_ATT_IPACC_IP_GW_CFG,       "IPA IP Gateway Config" }, 
     497        { NM_ATT_IPACC_IN_SERV_TIME,    "IPA In Service Time" }, 
     498        { NM_ATT_IPACC_TRX_BTS_ASS,     "IPA TRX BTS Assignment" }, 
     499        { NM_ATT_IPACC_LOCATION,        "IPA BTS Location Name" }, 
     500        { NM_ATT_IPACC_PAGING_CFG,      "IPA Paging Configuration" }, 
     501        { NM_ATT_IPACC_FILE_DATA,       "IPA File Data" }, 
     502        { NM_ATT_IPACC_UNIT_ID,         "IPA Unit ID" }, 
     503        { NM_ATT_IPACC_PARENT_UNIT_ID,  "IPA Parent Unit ID" }, 
     504        { NM_ATT_IPACC_UNIT_NAME,       "IPA Unit Name" }, 
     505        { NM_ATT_IPACC_SNMP_CFG,        "IPA SNMP Config" }, 
     506        { NM_ATT_IPACC_PRIM_OML_CFG_LIST, "IPA Primary OML Config List" }, 
     507        { NM_ATT_IPACC_PRIM_OML_FB_TOUT,"IPA Primary OML Fallback Timeout" }, 
     508        { NM_ATT_IPACC_CUR_SW_CFG,      "IPA Current Software Config" }, 
     509        { NM_ATT_IPACC_TIMING_BUS,      "IPA Timing Bus" }, 
     510        { NM_ATT_IPACC_CGI,             "IPA CGI" }, 
     511        { NM_ATT_IPACC_RAC,             "IPA RAC" }, 
     512        { NM_ATT_IPACC_OBJ_VERSION,     "IPA Object Version" }, 
     513        { NM_ATT_IPACC_GPRS_PAGING_CFG, "IPA GPRS Paging Configuration" }, 
     514        { NM_ATT_IPACC_NSEI,            "IPA NSEI" }, 
     515        { NM_ATT_IPACC_BVCI,            "IPA BVCI" }, 
     516        { NM_ATT_IPACC_NSVCI,           "IPA NSVCI" }, 
     517        { NM_ATT_IPACC_NS_CFG,          "IPA NS Configuration" }, 
     518        { NM_ATT_IPACC_BSSGP_CFG,       "IPA BSSGP Configuration" }, 
     519        { NM_ATT_IPACC_NS_LINK_CFG,     "IPA NS Link Configuration" }, 
     520        { NM_ATT_IPACC_RLC_CFG,         "IPA RLC Configuration" }, 
     521        { NM_ATT_IPACC_ALM_THRESH_LIST, "IPA Alarm Threshold List" }, 
     522        { NM_ATT_IPACC_MONIT_VAL_LIST,  "IPA Monitored Value List" }, 
     523        { NM_ATT_IPACC_TIB_CONTROL,     "IPA Timing Interface Bus Control" }, 
     524        { NM_ATT_IPACC_SUPP_FEATURES,   "IPA Supported Features" }, 
     525        { NM_ATT_IPACC_CODING_SCHEMES,  "IPA Coding Schemes" }, 
     526        { NM_ATT_IPACC_RLC_CFG_2,       "IPA RLC Configuration 2" }, 
     527        { NM_ATT_IPACC_HEARTB_TOUT,     "IPA Heartbeat Timeout" }, 
     528        { NM_ATT_IPACC_UPTIME,          "IPA Uptime" }, 
     529        { NM_ATT_IPACC_RLC_CFG_3,       "IPA RLC Configuration 3" }, 
     530        { NM_ATT_IPACC_SSL_CFG,         "IPA SSL Configuration" }, 
     531        { NM_ATT_IPACC_SEC_POSSIBLE,    "IPA Security Possible" }, 
     532        { NM_ATT_IPACC_IML_SSL_STATE,   "IPA IML SSL State" }, 
     533        { NM_ATT_IPACC_REVOC_DATE,      "IPA Revocation Date" }, 
     534        { 0, NULL } 
     535}; 
     536 
     537#if 0 
     538static gint merge_value_strings(value_string **dst, const value_string *base, const value_string delta) 
     539{ 
     540        const value_string *cur; 
     541        guint num_base, num_delta, num_max, num_out; 
     542 
     543        for (cur = base; cur->value || cur->strptr; cur++) 
     544                num_base++; 
     545        for (cur = delta; cur->value || cur->strptr; cur++) 
     546                num_delta++; 
     547        num_max = num_base + num_delta + 1; /* terminating entry */ 
     548 
     549        *dst = g_malloc(sizeof(value_string) * num_max); 
     550        if (!*dst) 
     551                return -ENOMEM; 
     552        /* zero-initialize the entire array so we always are zero- 
     553         * terminated */ 
     554        memset(*dst, 0, sizeof(value_string * num_max)); 
     555 
     556        /* initialize with the 'base' */ 
     557        memcpy(*dst, base, sizeof(value_string)*num_base); 
     558        num_out = num_base; 
     559 
     560        /* patch/append the delta */ 
     561        for (cur = delta; cur->value || cur->strptr; cur++) { 
     562                guint idx; 
     563                if (match_strval_idx(cur->value, base, &idx)) { 
     564                        /* the base set already contains a definition, 
     565                         * we need to override it */ 
     566                        memcpy((*dst)[idx], cur, sizeof(value_string)); 
     567                } else { 
     568                        /* append the entry to the end */ 
     569                        memcpy((*dst)[num_out], cur, sizeof(value_string)); 
     570                        num_out++; 
     571                } 
     572        } 
     573 
     574        return 0; 
     575} 
     576#endif 
     577 
     578static const gchar * 
     579_match_oml_fom_msgtype(const guint32 val, const value_string_ext *vs) 
     580{ 
     581        const char *ret; 
     582        ret = match_strval(val, vs->vals); 
     583        if (!ret) 
     584                ret = match_strval(val, _oml_fom_msgtype_vals); 
     585        return ret; 
     586} 
     587 
     588static const gchar * 
     589_match_oml_fom_attr(const guint32 val, const value_string_ext *vs) 
     590{ 
     591        const char *ret; 
     592        ret = match_strval(val, vs->vals); 
     593        if (!ret) 
     594                ret = match_strval(val, _oml_fom_attr_vals); 
     595        return ret; 
     596} 
     597 
     598/* Section 9.4.4: Administrative State */ 
     599static const value_string oml_adm_state_vals[] = { 
     600        { NM_STATE_LOCKED,              "Locked" }, 
     601        { NM_STATE_UNLOCKED,            "Unlocked" }, 
     602        { NM_STATE_SHUTDOWN,            "Shutdown" }, 
     603        { NM_STATE_NULL,                "Null" }, 
     604        { 0, NULL } 
     605}; 
     606 
     607static const value_string oml_oper_state_vals[] = { 
     608        { 1,    "Disabled" }, 
     609        { 2,    "Enabled" }, 
     610        { 0xff, "NULL" }, 
     611        { 0, NULL } 
     612}; 
     613 
     614/* Section 9.4.7 Availability Status */ 
     615static const value_string oml_avail_state_vals[] = { 
     616        { 0,    "In test" }, 
     617        { 1,    "Failed" }, 
     618        { 2,    "Power off" }, 
     619        { 3,    "Off line" }, 
     620        { 5,    "Dependency" }, 
     621        { 6,    "Degraded" }, 
     622        { 7,    "Not installed" }, 
     623        { 0xff, "OK" }, 
     624        { 0, NULL } 
     625}; 
     626 
     627/* Section 9.4.13: Channel Combination */ 
     628static const value_string oml_chan_comb_vals[] = { 
     629        { NM_CHANC_TCHFull,             "TCH/F" }, 
     630        { NM_CHANC_TCHHalf,             "TCH/H" }, 
     631        { NM_CHANC_TCHHalf2,            "TCH/H 2" }, 
     632        { NM_CHANC_SDCCH,               "SDCCH" }, 
     633        { NM_CHANC_mainBCCH,            "Main BCCH" }, 
     634        { NM_CHANC_BCCHComb,            "Combined BCCH" }, 
     635        { NM_CHANC_BCCH,                "BCCH" }, 
     636        { NM_CHANC_BCCH_CBCH,           "BCCH+CBCH" }, 
     637        { NM_CHANC_SDCCH_CBCH,          "SDCCH+CBCH" }, 
     638        { 0, NULL } 
     639}; 
     640 
     641/* Section 9.4.16: Event Type */ 
     642static const value_string oml_event_type_vals[] = { 
     643        { NM_EVT_COMM_FAIL,             "Communication Failure" }, 
     644        { NM_EVT_QOS_FAIL,              "QoS Failure" }, 
     645        { NM_EVT_PROC_FAIL,             "Processor Failure" }, 
     646        { NM_EVT_EQUIP_FAIL,            "Equipment Failure" }, 
     647        { NM_EVT_ENV_FAIL,              "Environment Failure" }, 
     648        { 0, NULL } 
     649}; 
     650 
     651/* Section 9.4.63: Perceived Severity */ 
     652static const value_string oml_severity_vals[] = { 
     653        { NM_SEVER_CEASED,              "Ceased" }, 
     654        { NM_SEVER_CRITICAL,            "Critical" }, 
     655        { NM_SEVER_MAJOR,               "Major" }, 
     656        { NM_SEVER_MINOR,               "Minor" }, 
     657        { NM_SEVER_WARNING,             "Warning" }, 
     658        { NM_SEVER_INDETERMINATE,       "Indeterminate" }, 
     659        { 0, NULL } 
     660}; 
     661 
     662/* Section 9.4.36: NACK Causes */ 
     663static const value_string oml_nack_cause[] = { 
     664        { NM_NACK_INCORR_STRUCT,        "Incorrect message structure" }, 
     665        { NM_NACK_MSGTYPE_INVAL,        "Invalid message type value" }, 
     666        { NM_NACK_OBJCLASS_INVAL,       "Invalid Object class value" }, 
     667        { NM_NACK_OBJCLASS_NOTSUPP,     "Object Class not supported" }, 
     668        { NM_NACK_BTSNR_UNKN,           "BTS Number unknown" }, 
     669        { NM_NACK_TRXNR_UNKN,           "TRX Number unknown" }, 
     670        { NM_NACK_OBJINST_UNKN,         "Object Instance unknown" }, 
     671        { NM_NACK_ATTRID_INVAL,         "Invalid Attribute ID value" }, 
     672        { NM_NACK_ATTRID_NOTSUPP,       "Attribute ID not supported" }, 
     673        { NM_NACK_PARAM_RANGE,          "Parameter value out of range" }, 
     674        { NM_NACK_ATTRLIST_INCONSISTENT, "Inconsistency in Attribute list" }, 
     675        { NM_NACK_SPEC_IMPL_NOTSUPP,    "Specified Implementation not supported" }, 
     676        { NM_NACK_CANT_PERFORM,         "Message cannot be performed" }, 
     677        { NM_NACK_RES_NOTIMPL,          "Resource not implemented" }, 
     678        { NM_NACK_RES_NOTAVAIL,         "Resource not available" }, 
     679        { NM_NACK_FREQ_NOTAVAIL,        "Frequency not available" }, 
     680        { NM_NACK_TEST_NOTSUPP,         "Test not supported" }, 
     681        { NM_NACK_CAPACITY_RESTR,       "Capacity restrictions" }, 
     682        { NM_NACK_PHYSCFG_NOTPERFORM,   "Phys config cannot be performed" }, 
     683        { NM_NACK_TEST_NOTINIT,         "Test not initiated" }, 
     684        { NM_NACK_PHYSCFG_NOTRESTORE,   "Phys config cannot be restored" }, 
     685        { NM_NACK_TEST_NOSUCH,          "No such Test" }, 
     686        { NM_NACK_TEST_NOSTOP,          "Test cannot be stopped" }, 
     687        { NM_NACK_MSGINCONSIST_PHYSCFG, "Message inconsisten with physical config" }, 
     688        { NM_NACK_FILE_INCOMPLETE,      "Complete file not received" }, 
     689        { NM_NACK_FILE_NOTAVAIL,        "File not available at destination" }, 
     690        { NM_NACK_FILE_NOTACTIVATE,     "File cannot be activated" }, 
     691        { NM_NACK_REQ_NOT_GRANT,        "Request not granted" }, 
     692        { NM_NACK_WAIT,                 "Wait" }, 
     693        { NM_NACK_NOTH_REPORT_EXIST,    "Nothing reportable existing" }, 
     694        { NM_NACK_MEAS_NOTSUPP,         "Measurement not supported" }, 
     695        { NM_NACK_MEAS_NOTSTART,        "Measurement not started" }, 
     696        { 0xff,                         "NULL" }, 
     697        { 0, NULL } 
     698}; 
     699 
     700static const value_string oml_test_no_vals[] = { 
     701        { NM_IPACC_TESTNO_RLOOP_ANT,    "Radio Loop test via antenna" }, 
     702        { NM_IPACC_TESTNO_RLOOP_XCVR,   "Radio Loop test via transceiver" }, 
     703        { NM_IPACC_TESTNO_FUNC_OBJ,     "BTS Functional object self test" }, 
     704        { NM_IPACC_TESTNO_CHAN_USAGE,   "Channel Usage" }, 
     705        { NM_IPACC_TESTNO_BCCH_CHAN_USAGE, "BCCH Channel Usage" }, 
     706        { NM_IPACC_TESTNO_FREQ_SYNC,    "Frequency Synchronization" }, 
     707        { NM_IPACC_TESTNO_BCCH_INFO,    "BCCH Information" }, 
     708        { NM_IPACC_TESTNO_TX_BEACON,    "Transmit Beacon" }, 
     709        { NM_IPACC_TESTNO_SYSINFO_MONITOR, "SysInfo Monitor" }, 
     710        { NM_IPACC_TESTNO_BCCCH_MONITOR, "BCCH & CCCH Monitor" }, 
     711        { 0, NULL } 
     712}; 
     713 
     714static const value_string ipacc_test_res_vals[] = { 
     715        { NM_IPACC_TESTRES_SUCCESS,     "Success" }, 
     716        { NM_IPACC_TESTRES_TIMEOUT,     "Timeout" }, 
     717        { NM_IPACC_TESTRES_NO_CHANS,    "No suitable channels available" }, 
     718        { NM_IPACC_TESTRES_PARTIAL,     "Partial" }, 
     719        { NM_IPACC_TESTRES_STOPPED,     "Stopped" }, 
     720        { 0, NULL } 
     721}; 
     722 
     723static const value_string ipacc_testres_ie_vals[] = { 
     724        { NM_IPACC_TR_IE_FREQ_ERR_LIST, "Frequency Error List" }, 
     725        { NM_IPACC_TR_IE_CHAN_USAGE,    "Channel Usage" }, 
     726        { NM_IPACC_TR_IE_BCCH_INFO,     "BCCH Information" }, 
     727        { NM_IPACC_TR_IE_RESULT_DETAILS,"Result Details" }, 
     728        { NM_IPACC_TR_IE_FREQ_ERR,      "Frequency Error" }, 
     729        { 0, NULL } 
     730}; 
     731 
     732static const struct tlv_def * 
     733find_tlv_tag(guint8 tag) 
     734{ 
     735        const struct tlv_def *specific; 
     736 
     737        if (global_oml_use_nano_bts) 
     738                specific = &nm_att_tlvdef_ipa.def[tag]; 
     739        else 
     740                specific = &nm_att_tlvdev_bs11.def[tag]; 
     741 
     742        if (specific->type != TLV_TYPE_UNKNOWN) 
     743                return specific; 
     744 
     745        return &nm_att_tlvdef_base.def[tag]; 
     746} 
     747 
     748/* Parse the ip.access specific BCCH Information IE embedded into the Test 
     749 * Report IE */ 
     750static gint 
     751ipacc_tr_ie_bcch(tvbuff_t *tvb, proto_tree *att_tree, int offset) 
     752{ 
     753        guint16 binfo_type, tmp; 
     754 
     755        binfo_type = tvb_get_ntohs(tvb, offset); 
     756        offset += 2; 
     757 
     758        tmp = tvb_get_ntohs(tvb, offset); 
     759 
     760        /* FIXME: there are still some bugs remaining here */ 
     761        proto_tree_add_item(att_tree, hf_attr_ipa_tr_arfcn, 
     762                            tvb, offset, 2, TRUE); 
     763 
     764        proto_tree_add_item(att_tree, hf_attr_ipa_tr_f_qual, 
     765                            tvb, offset, 2, TRUE); 
     766        offset += 2; 
     767 
     768        proto_tree_add_item(att_tree, hf_attr_ipa_tr_b_rxlev, 
     769                            tvb, offset++, 1, TRUE); 
     770 
     771        proto_tree_add_item(att_tree, hf_attr_ipa_tr_rxqual, 
     772                            tvb, offset++, 1, TRUE); 
     773 
     774        proto_tree_add_item(att_tree, hf_attr_ipa_tr_f_err, 
     775                            tvb, offset, 2, TRUE); 
     776        offset += 2; 
     777 
     778        proto_tree_add_item(att_tree, hf_attr_ipa_tr_frame_offs, 
     779                            tvb, offset, 2, TRUE); 
     780        offset += 2; 
     781        proto_tree_add_item(att_tree, hf_attr_ipa_tr_framenr_offs, 
     782                            tvb, offset, 4, TRUE); 
     783        offset += 4; 
     784 
     785        proto_tree_add_item(att_tree, hf_attr_ipa_tr_bsic, 
     786                            tvb, offset++, 1, TRUE); 
     787 
     788        de_lai(tvb, att_tree, offset, 5, NULL, 0); 
     789        offset += 5; 
     790 
     791        proto_tree_add_item(att_tree, hf_attr_ipa_tr_cell_id, 
     792                            tvb, offset, 2, TRUE); 
     793        offset += 2; 
     794 
     795        if (binfo_type & 0x8000) { 
     796                /* System Information 2 */ 
     797                /* FIXME: Parse 04.18 Neighbour Cell Description */ 
     798                proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2, 
     799                                    tvb, offset, 16, TRUE); 
     800                offset += 16; 
     801        } 
     802        if (binfo_type & 0x0001) { 
     803                /* System Information 2bis */ 
     804                /* FIXME: Parse 04.18 Neighbour Cell Description */ 
     805                proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2bis, 
     806                                    tvb, offset, 16, TRUE); 
     807                offset += 16; 
     808        } 
     809        if (binfo_type & 0x0002) { 
     810                /* System Information 2ter */ 
     811                /* FIXME: Parse 04.18 Neighbour Cell Description */ 
     812                proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2ter, 
     813                                    tvb, offset, 16, TRUE); 
     814                offset += 16; 
     815        } 
     816        if (binfo_type & 0x0004) { 
     817                /* FIXME: Parse 04.18 Cell Channel Description */ 
     818                proto_tree_add_item(att_tree, hf_attr_ipa_tr_chan_desc, 
     819                                    tvb, offset, 16, TRUE); 
     820                offset += 16; 
     821        } 
     822 
     823        return offset; 
     824} 
     825 
     826/* Parse the ip.access specific Channel Usage IE embedded into the Test 
     827 * Report IE */ 
     828static gint 
     829ipacc_tr_ie_chan_usage(tvbuff_t *tvb, proto_tree *att_tree, int offset) 
     830{ 
     831        while (tvb_reported_length_remaining(tvb, offset) != 0) { 
     832                guint16 result; 
     833 
     834                result = tvb_get_ntohs(tvb, offset); 
     835                proto_tree_add_uint(att_tree, hf_attr_ipa_tr_arfcn, 
     836                                    tvb, offset, 2, result); 
     837                proto_tree_add_uint(att_tree, hf_attr_ipa_tr_rxlev, 
     838                                    tvb, offset, 2, result); 
     839                offset += 2; 
     840        } 
     841        return offset; 
     842} 
     843 
     844/* Parse the ip.access specific format of the standard test report IE */ 
     845static gint 
     846dissect_ipacc_test_rep(proto_tree *tree, tvbuff_t *tvb) 
     847{ 
     848        gint offset = 0; 
     849 
     850        proto_tree_add_item(tree, hf_attr_ipa_test_res, tvb, offset++, 
     851                            1, FALSE); 
     852 
     853        while (tvb_reported_length_remaining(tvb, offset) != 0) { 
     854                guint8 ie; 
     855                guint16 len; 
     856                proto_item *ti; 
     857                proto_tree *att_tree; 
     858 
     859                ie = tvb_get_guint8(tvb, offset); 
     860                len = tvb_get_ntohs(tvb, offset+1); 
     861                ti = proto_tree_add_item(tree, hf_oml_ipa_tres_attr_tag, tvb, 
     862                                         offset++, 1, FALSE); 
     863                att_tree = proto_item_add_subtree(ti, ett_oml_fom_att); 
     864                proto_tree_add_uint(att_tree, hf_oml_ipa_tres_attr_len, tvb, 
     865                                    offset, 2, len); 
     866                offset += 2; 
     867 
     868                switch (ie) { 
     869                case NM_IPACC_TR_IE_CHAN_USAGE: 
     870                        offset = ipacc_tr_ie_chan_usage(tvb, 
     871                                                        att_tree, offset); 
     872                        break; 
     873                case NM_IPACC_TR_IE_BCCH_INFO: 
     874                        offset = ipacc_tr_ie_bcch(tvb, 
     875                                                  att_tree, offset); 
     876                        break; 
     877                default: 
     878                        break; 
     879                } 
     880        } 
     881        return offset; 
     882} 
     883 
     884/* Dissect OML FOM Attributes after OML + FOM header */ 
     885static gint 
     886dissect_oml_attrs(tvbuff_t *tvb, int base_offs, packet_info *pinfo, 
     887                  proto_tree *tree) 
     888{ 
     889        int offset = base_offs; 
     890 
     891        while (tvb_reported_length_remaining(tvb, offset) != 0) { 
     892                guint i; 
     893                guint8 tag, val8; 
     894                guint16 val16; 
     895                guint32 val32; 
     896                unsigned int len, len_len, hlen; 
     897                const struct tlv_def *tdef; 
     898                proto_item *ti; 
     899                proto_tree *att_tree; 
     900                tvbuff_t *sub_tvb; 
     901 
     902                tag = tvb_get_guint8(tvb, offset); 
     903                tdef = find_tlv_tag(tag); 
     904 
     905                switch (tdef->type) { 
     906                case TLV_TYPE_FIXED: 
     907                        hlen = 1; 
     908                        len_len = 0; 
     909                        len = tdef->fixed_len; 
     910                        break; 
     911                case TLV_TYPE_T: 
     912                        hlen = 1; 
     913                        len_len = 0; 
     914                        len = 0; 
     915                        break; 
     916                case TLV_TYPE_TV: 
     917                        hlen = 1; 
     918                        len_len = 0; 
     919                        len = 1; 
     920                        break; 
     921                case TLV_TYPE_TLV: 
     922                        hlen = 2; 
     923                        len_len = 1; 
     924                        len = tvb_get_guint8(tvb, offset+1); 
     925                        break; 
     926                case TLV_TYPE_TL16V: 
     927                        hlen = 3; 
     928                        len_len = 2; 
     929                        len = tvb_get_guint8(tvb, offset+1) << 8 | 
     930                                                tvb_get_guint8(tvb, offset+2); 
     931                        break; 
     932                case TLV_TYPE_TLV16: 
     933                        hlen = 2; 
     934                        len_len = 1; 
     935                        len = tvb_get_guint8(tvb, offset+1) * 2; 
     936                        break; 
     937                case TLV_TYPE_UNKNOWN: /* fall through */ 
     938                default: 
     939                        hlen = len_len = len = 0; 
     940                        DISSECTOR_ASSERT_NOT_REACHED(); 
     941                        break; 
     942                } 
     943 
     944                ti = proto_tree_add_item(tree, hf_oml_fom_attr_tag, tvb, 
     945                                         offset, 1, FALSE); 
     946                att_tree = proto_item_add_subtree(ti, ett_oml_fom_att); 
     947                proto_tree_add_uint(att_tree, hf_oml_fom_attr_len, tvb, 
     948                                    offset+1, len_len, len); 
     949                offset += hlen; 
     950 
     951                sub_tvb = tvb_new_subset(tvb, offset, len, len); 
     952 
     953                switch (tag) { 
     954                /* parse only the most common IE for now */ 
     955                case NM_ATT_ABIS_CHANNEL: 
     956                        proto_tree_add_item(att_tree, hf_attr_ach_btsp, tvb, 
     957                                            offset, 1, TRUE); 
     958                        proto_tree_add_item(att_tree, hf_attr_ach_tslot, tvb, 
     959                                            offset+1, 1, TRUE); 
     960                        proto_tree_add_item(att_tree, hf_attr_ach_sslot, tvb, 
     961                                            offset+2, 1, TRUE); 
     962                        break; 
     963                case NM_ATT_ADM_STATE: 
     964                        proto_tree_add_item(att_tree, hf_attr_adm_state, tvb, 
     965                                            offset, len, FALSE); 
     966                        val8 = tvb_get_guint8(tvb, offset); 
     967                        col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", 
     968                                        val_to_str(val8, oml_adm_state_vals, 
     969                                                   "%02x")); 
     970                        break; 
     971                case NM_ATT_ARFCN_LIST: 
     972                        for (i = 0; i < len; i += 2) { 
     973                                val16 = tvb_get_ntohs(tvb, offset + i); 
     974                                proto_tree_add_uint(att_tree, hf_attr_arfcn, 
     975                                                    tvb, offset + i, 2, val16); 
     976                        } 
     977                        break; 
     978                case NM_ATT_AVAIL_STATUS: 
     979                        /* Availability status can have length 0 */ 
     980                        if (len) { 
     981                                val8 = tvb_get_guint8(tvb, offset); 
     982                                proto_tree_add_item(att_tree, 
     983                                                    hf_attr_avail_state, tvb, 
     984                                                    offset, len, FALSE); 
     985                        } else 
     986                                val8 = 0xff; 
     987                        col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", 
     988                                        val_to_str(val8, oml_avail_state_vals, 
     989                                                   "%02x")); 
     990                        break; 
     991                case NM_ATT_BCCH_ARFCN: 
     992                        proto_tree_add_item(att_tree, hf_attr_bcch_arfcn, tvb, 
     993                                            offset, len, FALSE); 
     994                        break; 
     995                case NM_ATT_BSIC: 
     996                        proto_tree_add_item(att_tree, hf_attr_bsic, tvb, 
     997                                            offset, len, TRUE); 
     998                        break; 
     999                case NM_ATT_CHAN_COMB: 
     1000                        proto_tree_add_item(att_tree, hf_attr_chan_comb, tvb, 
     1001                                            offset, len, TRUE); 
     1002                        break; 
     1003                case NM_ATT_EVENT_TYPE: 
     1004                        proto_tree_add_item(att_tree, hf_attr_event_type, tvb, 
     1005                                            offset, len, TRUE); 
     1006                        break; 
     1007                case NM_ATT_GSM_TIME: 
     1008                        proto_tree_add_item(att_tree, hf_attr_gsm_time, tvb, 
     1009                                            offset, len, TRUE); 
     1010                        break; 
     1011                case NM_ATT_OPER_STATE: 
     1012                        proto_tree_add_item(att_tree, hf_attr_oper_state, tvb, 
     1013                                            offset, len, FALSE); 
     1014                        val8 = tvb_get_guint8(tvb, offset); 
     1015                        col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", 
     1016                                        val_to_str(val8, oml_oper_state_vals, 
     1017                                                   "%02x")); 
     1018                        break; 
     1019                case NM_ATT_TEI: 
     1020                        proto_tree_add_item(att_tree, hf_attr_tei, tvb, 
     1021                                            offset, len, TRUE); 
     1022                        break; 
     1023                case NM_ATT_TSC: 
     1024                        proto_tree_add_item(att_tree, hf_attr_tsc, tvb, 
     1025                                            offset, len, TRUE); 
     1026                        break; 
     1027                case NM_ATT_SEVERITY: 
     1028                        proto_tree_add_item(att_tree, hf_attr_severity, tvb, 
     1029                                            offset, len, TRUE); 
     1030                        break; 
     1031                case NM_ATT_TEST_REPORT: 
     1032                        dissect_ipacc_test_rep(att_tree, sub_tvb); 
     1033                        break; 
     1034                case NM_ATT_TEST_NO: 
     1035                        proto_tree_add_item(att_tree, hf_attr_test_no, tvb, 
     1036                                            offset, len, TRUE); 
     1037                        val8 = tvb_get_guint8(tvb, offset); 
     1038                        col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", 
     1039                                        val_to_str(val8, oml_test_no_vals, 
     1040                                                   "%02x")); 
     1041                        break; 
     1042                case NM_ATT_HSN: 
     1043                        proto_tree_add_item(att_tree, hf_attr_hsn, tvb, 
     1044                                            offset, len, TRUE); 
     1045                        break; 
     1046                case NM_ATT_MAIO: 
     1047                        proto_tree_add_item(att_tree, hf_attr_maio, tvb, 
     1048                                            offset, len, TRUE); 
     1049                        break; 
     1050                default: 
     1051                        proto_tree_add_item(att_tree, hf_oml_fom_attr_val, tvb, 
     1052                                            offset, len, FALSE); 
     1053                } 
     1054 
     1055                if (global_oml_use_nano_bts) switch (tag) { 
     1056                /* proprietary ip.access extensions */ 
     1057                case NM_ATT_IPACC_DST_IP: 
     1058                        val32 = tvb_get_ntohl(tvb, offset); 
     1059                        proto_tree_add_ipv4(att_tree, hf_attr_ipa_rsl_ip, tvb, 
     1060                                            offset, len, val32); 
     1061                        break; 
     1062                case NM_ATT_IPACC_DST_IP_PORT: 
     1063                        val16 = tvb_get_ntohs(tvb, offset); 
     1064                        proto_tree_add_uint(att_tree, hf_attr_ipa_rsl_port, tvb, 
     1065                                            offset, len, val16); 
     1066                        break; 
     1067                case NM_ATT_IPACC_LOCATION: 
     1068                        proto_tree_add_item(att_tree, hf_attr_ipa_location_name, 
     1069                                            tvb, offset, len, TRUE); 
     1070                        break; 
     1071                case NM_ATT_IPACC_UNIT_ID: 
     1072                        proto_tree_add_item(att_tree, hf_attr_ipa_unit_id, 
     1073                                            tvb, offset, len, TRUE); 
     1074                        break; 
     1075                case NM_ATT_IPACC_UNIT_NAME: 
     1076                        proto_tree_add_item(att_tree, hf_attr_ipa_unit_name, 
     1077                                            tvb, offset, len, TRUE); 
     1078                        break; 
     1079                case NM_ATT_IPACC_PRIM_OML_CFG_LIST: 
     1080                        proto_tree_add_item(att_tree, hf_attr_ipa_prim_oml_ip, 
     1081                                            tvb, offset+1, 4, TRUE); 
     1082                        proto_tree_add_item(att_tree, hf_attr_ipa_prim_oml_port, 
     1083                                            tvb, offset+1+4, 2, TRUE); 
     1084                        break; 
     1085                case NM_ATT_IPACC_NV_FLAGS: 
     1086                        { 
     1087                                guint flags, mask; 
     1088                                flags = tvb_get_guint8(tvb, offset); 
     1089                                mask = tvb_get_guint8(tvb, offset+1); 
     1090                                flags |= tvb_get_guint8(tvb, offset+2) << 8; 
     1091                                mask |= tvb_get_guint8(tvb, offset+3) << 8; 
     1092                                proto_tree_add_uint(att_tree, hf_attr_ipa_nv_flags, 
     1093                                                    tvb, offset, 3, flags); 
     1094                                proto_tree_add_uint(att_tree, hf_attr_ipa_nv_mask, 
     1095                                                    tvb, offset+1, 3, mask); 
     1096                        } 
     1097                        break; 
     1098                case NM_ATT_IPACC_RAC: 
     1099                        proto_tree_add_item(att_tree, hf_attr_ipa_rac, 
     1100                                            tvb, offset, 1, TRUE); 
     1101                        break; 
     1102                case NM_ATT_IPACC_NSEI: 
     1103                        val16 = tvb_get_ntohs(tvb, offset); 
     1104                        proto_tree_add_uint(att_tree, hf_attr_ipa_nsei, 
     1105                                           tvb, offset, 2, val16); 
     1106                        break; 
     1107                case NM_ATT_IPACC_NSVCI: 
     1108                        val16 = tvb_get_ntohs(tvb, offset); 
     1109                        proto_tree_add_uint(att_tree, hf_attr_ipa_nsvci, 
     1110                                           tvb, offset, 2, val16); 
     1111                        break; 
     1112                case NM_ATT_IPACC_BVCI: 
     1113                        val16 = tvb_get_ntohs(tvb, offset); 
     1114                        proto_tree_add_uint(att_tree, hf_attr_ipa_bvci, 
     1115                                           tvb, offset, 2, val16); 
     1116                        break; 
     1117                case NM_ATT_IPACC_NS_LINK_CFG: 
     1118                        val16 = tvb_get_ntohs(tvb, offset); 
     1119                        proto_tree_add_uint(att_tree, hf_attr_ipa_nsl_sport, 
     1120                                           tvb, offset, 2, val16); 
     1121                        val32 = tvb_get_ipv4(tvb, offset+2); 
     1122                        proto_tree_add_ipv4(att_tree, hf_attr_ipa_nsl_daddr, 
     1123                                           tvb, offset+2, 4, val32); 
     1124                        val16 = tvb_get_ntohs(tvb, offset+6); 
     1125                        proto_tree_add_uint(att_tree, hf_attr_ipa_nsl_dport, 
     1126                                           tvb, offset+6, 2, val16); 
     1127                        break; 
     1128                } 
     1129                offset += len; 
     1130        } 
     1131        return offset; 
     1132} 
     1133 
     1134static int 
     1135dissect_oml_fom(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, 
     1136                int offset, proto_item *top_ti) 
     1137{ 
     1138        guint8 msg_type, obj_class, bts_nr, trx_nr, ts_nr; 
     1139        proto_item *ti; 
     1140        proto_tree *fom_tree; 
     1141 
     1142        msg_type = tvb_get_guint8(tvb, offset); 
     1143        obj_class = tvb_get_guint8(tvb, offset+1); 
     1144        bts_nr = tvb_get_guint8(tvb, offset+2); 
     1145        trx_nr = tvb_get_guint8(tvb, offset+3); 
     1146        ts_nr = tvb_get_guint8(tvb, offset+4); 
     1147        proto_item_append_text(top_ti, ", %s(%02x,%02x,%02x) %s ", 
     1148                        val_to_str(obj_class, oml_fom_objclass_vals, "%02x"), 
     1149                        bts_nr, trx_nr, ts_nr, 
     1150                        val_to_str_ext(msg_type, &oml_fom_msgtype_vse, 
     1151                                   "unknown 0x%x")); 
     1152        col_append_fstr(pinfo->cinfo, COL_INFO, "%s(%02x,%02x,%02x) %s ", 
     1153                        val_to_str(obj_class, oml_fom_objclass_vals, "%02x"), 
     1154                        bts_nr, trx_nr, ts_nr, 
     1155                        val_to_str_ext(msg_type, &oml_fom_msgtype_vse, 
     1156                                   "unknown 0x%x")); 
     1157        ti = proto_tree_add_item(tree, hf_oml_fom_msgtype, tvb, offset++, 1, FALSE); 
     1158        fom_tree = proto_item_add_subtree(ti, ett_oml_fom); 
     1159        proto_tree_add_item(fom_tree, hf_oml_fom_objclass, tvb, offset++, 1, FALSE); 
     1160        proto_tree_add_item(fom_tree, hf_oml_fom_inst_bts, tvb, offset++, 1, FALSE); 
     1161        proto_tree_add_item(fom_tree, hf_oml_fom_inst_trx, tvb, offset++, 1, FALSE); 
     1162        proto_tree_add_item(fom_tree, hf_oml_fom_inst_ts, tvb, offset++, 1, FALSE); 
     1163 
     1164 
     1165        /* dissect the TLV objects in the message body */ 
     1166        offset = dissect_oml_attrs(tvb, offset, pinfo, fom_tree); 
     1167 
     1168        return offset; 
     1169} 
     1170 
     1171static const guint8 ipaccess_magic[] = "com.ipaccess"; 
     1172 
     1173static int 
     1174dissect_oml_manuf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, 
     1175                  int offset, proto_item *top_ti) 
     1176{ 
     1177        if (tvb_get_guint8(tvb, offset) != 0x0d || 
     1178            tvb_memeql(tvb, offset+1, ipaccess_magic, sizeof(ipaccess_magic))) 
     1179                return offset; 
     1180 
     1181        offset += sizeof(ipaccess_magic) + 1; 
     1182 
     1183        return dissect_oml_fom(tvb, pinfo, tree, offset, top_ti); 
     1184} 
     1185 
     1186static void 
     1187dissect_abis_oml(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) 
     1188{ 
     1189        proto_item *ti; 
     1190        proto_tree *oml_tree; 
     1191 
     1192        int offset = 0; 
     1193 
     1194        col_set_str(pinfo->cinfo, COL_PROTOCOL, "OML"); 
     1195 
     1196        top_tree = tree; 
     1197        if (tree) { 
     1198                u_int8_t msg_disc = tvb_get_guint8(tvb, offset); 
     1199 
     1200                ti = proto_tree_add_item(tree, proto_abis_oml, tvb, 0, -1, FALSE); 
     1201                oml_tree = proto_item_add_subtree(ti, ett_oml); 
     1202 
     1203                proto_tree_add_item(oml_tree, hf_oml_msg_disc, tvb, offset++, 
     1204                                    1, TRUE); 
     1205                proto_tree_add_item(oml_tree, hf_oml_placement, tvb, offset++, 
     1206                                    1, TRUE); 
     1207                proto_tree_add_item(oml_tree, hf_oml_sequence, tvb, offset++, 
     1208                                    1, TRUE); 
     1209                proto_tree_add_item(oml_tree, hf_oml_length, tvb, offset++, 
     1210                                    1, TRUE); 
     1211 
     1212                switch (msg_disc) { 
     1213                case ABIS_OM_MDISC_FOM: 
     1214                        offset = dissect_oml_fom(tvb, pinfo, oml_tree, 
     1215                                                 offset, ti); 
     1216                        break; 
     1217                case ABIS_OM_MDISC_MANUF: 
     1218                        offset = dissect_oml_manuf(tvb, pinfo, oml_tree,                                                               offset, ti); 
     1219                        break; 
     1220                case ABIS_OM_MDISC_MMI: 
     1221                case ABIS_OM_MDISC_TRAU: 
     1222                default: 
     1223                        break; 
     1224                } 
     1225        } 
     1226} 
     1227 
     1228void 
     1229proto_reg_handoff_abis_oml(void); 
     1230 
     1231void 
     1232proto_register_abis_oml(void) 
     1233{ 
     1234        static hf_register_info hf[] = { 
     1235                { &hf_oml_msg_disc, 
     1236                        { "Message Discriminator", "oml.msg_dsc", 
     1237                          FT_UINT8, BASE_HEX, VALS(oml_msg_disc_vals), 0, 
     1238                          "GSM 12.21 Message Discriminator", HFILL } 
     1239                }, 
     1240                { &hf_oml_placement, 
     1241                        { "Placement Indicator", "oml.placement", 
     1242                          FT_UINT8, BASE_HEX, VALS(oml_placement_vals), 0, 
     1243                          "GSM 12.21 Placement Indicator", HFILL } 
     1244                }, 
     1245                { &hf_oml_sequence, 
     1246                        { "Sequence Number", "oml.sequence", 
     1247                          FT_UINT8, BASE_HEX, NULL, 0, 
     1248                          "Sequence Number (if multi-part msg)", HFILL } 
     1249                }, 
     1250                { &hf_oml_length, 
     1251                        { "Length Indicator", "oml.length", 
     1252                          FT_UINT8, BASE_DEC, NULL, 0, 
     1253                          "Total length of payload", HFILL } 
     1254                }, 
     1255                { &hf_oml_fom_msgtype, 
     1256                        { "FOM Message Type", "oml.fom.msg_type", 
     1257                          FT_UINT8, BASE_HEX|BASE_EXT_STRING, (&oml_fom_msgtype_vse), 0, 
     1258                          NULL, HFILL } 
     1259                }, 
     1260                { &hf_oml_fom_objclass, 
     1261                        { "FOM Object Class", "oml.fom.obj_class", 
     1262                          FT_UINT8, BASE_HEX, VALS(oml_fom_objclass_vals), 0, 
     1263                          NULL, HFILL } 
     1264                }, 
     1265                { &hf_oml_fom_inst_bts, 
     1266                        { "FOM Object Instance BTS", "oml.fom.obj_inst.bts", 
     1267                          FT_UINT8, BASE_DEC, NULL, 0, 
     1268                          NULL, HFILL } 
     1269                }, 
     1270                { &hf_oml_fom_inst_trx, 
     1271                        { "FOM Object Instance TRX", "oml.fom.obj_inst.trx", 
     1272                          FT_UINT8, BASE_DEC, NULL, 0, 
     1273                          NULL, HFILL } 
     1274                }, 
     1275                { &hf_oml_fom_inst_ts, 
     1276                        { "FOM Object Instance TS", "oml.fom.obj_inst.ts", 
     1277                          FT_UINT8, BASE_DEC, NULL, 0, 
     1278                          NULL, HFILL } 
     1279                }, 
     1280                { &hf_oml_fom_attr_tag, 
     1281                        { "FOM Attribute ID", "oml.fom.attr_id", 
     1282                          FT_UINT8, BASE_HEX|BASE_EXT_STRING, (&oml_fom_attr_vse), 0, 
     1283                          NULL, HFILL } 
     1284                }, 
     1285                { &hf_oml_fom_attr_len, 
     1286                        { "FOM Attribute Length", "oml.fom.attr_len", 
     1287                          FT_UINT16, BASE_DEC, NULL, 0, 
     1288                          NULL, HFILL } 
     1289                }, 
     1290                { &hf_oml_fom_attr_val, 
     1291                        { "FOM Attribute Value", "oml.fom.attr_val", 
     1292                          FT_BYTES, BASE_NONE, NULL, 0, 
     1293                          NULL, HFILL } 
     1294                }, 
     1295 
     1296 
     1297 
     1298                /* OML Attributes */ 
     1299                { &hf_attr_adm_state, 
     1300                        { "Administrative State", "oml.fom.attr.adm_state", 
     1301                          FT_UINT8, BASE_HEX, VALS(oml_adm_state_vals), 0, 
     1302                          NULL, HFILL } 
     1303                }, 
     1304                { &hf_attr_arfcn, 
     1305                        { "ARFCN", "oml.fom.attr.arfcn", 
     1306                          FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1307                }, 
     1308                { &hf_attr_oper_state, 
     1309                        { "Operational State", "oml.fom.attr.oper_state", 
     1310                          FT_UINT8, BASE_HEX, VALS(oml_oper_state_vals), 0, 
     1311                          NULL, HFILL } 
     1312                }, 
     1313                { &hf_attr_avail_state, 
     1314                        { "Availability Status", "oml.fom.attr.avail_state", 
     1315                          FT_UINT8, BASE_HEX, VALS(oml_avail_state_vals), 0, 
     1316                          NULL, HFILL } 
     1317                }, 
     1318                { &hf_attr_event_type, 
     1319                        { "Event Type", "oml.fom.attr.event_type", 
     1320                          FT_UINT8, BASE_HEX, VALS(oml_event_type_vals), 0, 
     1321                          NULL, HFILL } 
     1322                }, 
     1323                { &hf_attr_severity, 
     1324                        { "Severity", "oml.fom.attr.severity", 
     1325                          FT_UINT8, BASE_HEX, VALS(oml_severity_vals), 0, 
     1326                          NULL, HFILL } 
     1327                }, 
     1328                { &hf_attr_bcch_arfcn, 
     1329                        { "BCCH ARFCN", "oml.fom.attr.bcch_arfcn", 
     1330                          FT_UINT16, BASE_DEC, NULL, 0, 
     1331                          "ARFCN of the BCCH", HFILL } 
     1332                }, 
     1333                { &hf_attr_bsic, 
     1334                        { "BSIC", "oml.fom.attr.bsic", 
     1335                          FT_UINT16, BASE_HEX, NULL, 0, 
     1336                          "Base Station Identity Cdoe", HFILL } 
     1337                }, 
     1338                { &hf_attr_test_no, 
     1339                        { "Test Number", "oml.fom.attr.test_no", 
     1340                          FT_UINT8, BASE_HEX, VALS(oml_test_no_vals), 0, 
     1341                          NULL, HFILL } 
     1342                }, 
     1343                { &hf_attr_tsc, 
     1344                        { "TSC", "oml.fom.attr.tsc", 
     1345                          FT_UINT8, BASE_HEX, NULL, 0, 
     1346                          "Training Sequence Code", HFILL } 
     1347                }, 
     1348                { &hf_attr_tei, 
     1349                        { "TEI", "oml.fom.attr.tei", 
     1350                          FT_UINT8, BASE_DEC, NULL, 0, 
     1351                          NULL, HFILL } 
     1352                }, 
     1353                { &hf_attr_ach_btsp, 
     1354                        { "BTS E1 Port", "oml.fom.attr.abis_ch.bts_port", 
     1355                          FT_UINT8, BASE_DEC, NULL, 0, 
     1356                          NULL, HFILL } 
     1357                }, 
     1358                { &hf_attr_ach_tslot, 
     1359                        { "E1 Timeslot", "oml.fom.attr.abis_ch.timeslot", 
     1360                          FT_UINT8, BASE_DEC, NULL, 0, 
     1361                          NULL, HFILL } 
     1362                }, 
     1363                { &hf_attr_ach_sslot, 
     1364                        { "E1 Subslot", "oml.fom.attr.abis_ch.subslot", 
     1365                          FT_UINT8, BASE_DEC, NULL, 0, 
     1366                          NULL, HFILL } 
     1367                }, 
     1368                { &hf_attr_gsm_time, 
     1369                        { "GSM Time", "oml.fom.attr.gsm_time", 
     1370                          FT_UINT16, BASE_DEC, NULL, 0, 
     1371                          "GSM Time", HFILL } 
     1372                }, 
     1373                { &hf_attr_chan_comb, 
     1374                        { "Channel Combination", "oml.fom.attr.chan_comb", 
     1375                          FT_UINT8, BASE_HEX, VALS(oml_chan_comb_vals), 0, 
     1376                          NULL, HFILL } 
     1377                }, 
     1378                { &hf_attr_hsn, 
     1379                        { "HSN", "oml.fom.attr.hsn", 
     1380                          FT_UINT8, BASE_DEC, NULL, 0, 
     1381                          "Hopping Sequence Number", HFILL } 
     1382                }, 
     1383                { &hf_attr_maio, 
     1384                        { "MAIO", "oml.fom.attr.maio", 
     1385                          FT_UINT8, BASE_DEC, NULL, 0, 
     1386                          "Mobile Allocation Index Offset", HFILL } 
     1387                }, 
     1388 
     1389                /* IP Access */ 
     1390                { &hf_oml_ipa_tres_attr_tag, 
     1391                        { "IPA Test Result Embedded IE", 
     1392                                                "oml.fom.testrep.ipa_tag", 
     1393                          FT_UINT8, BASE_HEX, VALS(ipacc_testres_ie_vals), 0, 
     1394                          "Information Element embedded into the Test Result " 
     1395                          "of ip.access BTS", HFILL }, 
     1396                }, 
     1397                { &hf_oml_ipa_tres_attr_len, 
     1398                        { "IPA Test Result Embedded IE Length", 
     1399                                                "oml.fom.testrep.ipa_len", 
     1400                          FT_UINT16, BASE_DEC, NULL, 0, 
     1401                          "Length of ip.access Test Result Embedded IE", HFILL } 
     1402                }, 
     1403                { &hf_attr_ipa_test_res, 
     1404                        { "IPA Test Result", "oml.fom.testrep.result", 
     1405                          FT_UINT8, BASE_DEC, VALS(ipacc_test_res_vals), 0, 
     1406                          NULL, HFILL } 
     1407                }, 
     1408                { &hf_attr_ipa_tr_rxlev, 
     1409                        { "Rx Level", "oml.fom.testrep.ipa_rxlev", 
     1410                          FT_UINT16, BASE_DEC, NULL, 0xfc00, NULL, HFILL } 
     1411                }, 
     1412                { &hf_attr_ipa_tr_b_rxlev, 
     1413                        { "Rx Level", "oml.fom.testrep.ipa_rxlev_b", 
     1414                          FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } 
     1415                }, 
     1416                { &hf_attr_ipa_tr_arfcn, 
     1417                        { "ARFCN", "oml.fom.testrep.ipa_arfcn", 
     1418                          FT_UINT16, BASE_DEC, NULL, 0x03ff, "ARFCN", HFILL } 
     1419                }, 
     1420                { &hf_attr_ipa_tr_f_qual, 
     1421                        { "Frequency Quality", "oml.fom.testrep.ipa.freq_qual", 
     1422                          FT_UINT8, BASE_DEC, NULL, 0xfc, NULL, HFILL } 
     1423                }, 
     1424                { &hf_attr_ipa_tr_f_err, 
     1425                        { "Frequency Error", "oml.fom.testrep.ipa.freq_err", 
     1426                          FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1427                }, 
     1428                { &hf_attr_ipa_tr_rxqual, 
     1429                        { "Rx Quality", "oml.fom.testrep.ipa.rx_qual", 
     1430                          FT_UINT8, BASE_DEC, NULL, 0x7, NULL, HFILL } 
     1431                }, 
     1432                { &hf_attr_ipa_tr_frame_offs, 
     1433                        { "Frame Offset", "oml.fom.testrep.ipa.frame_offset", 
     1434                          FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1435                }, 
     1436                { &hf_attr_ipa_tr_framenr_offs, 
     1437                        { "Frame Number Offset", 
     1438                                        "oml.fom.testrep.ipa.framenr_offset", 
     1439                          FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } 
     1440                }, 
     1441                { &hf_attr_ipa_tr_bsic, 
     1442                        { "BSIC", "oml.fom.testrep.ipa.bsic", 
     1443                          FT_UINT8, BASE_DEC, NULL, 0x3f, 
     1444                          "Base Station Identity Code", HFILL } 
     1445                }, 
     1446                { &hf_attr_ipa_tr_cell_id, 
     1447                        { "Cell ID", "oml.fom.testrep.ipa.cell_id", 
     1448                          FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } 
     1449                }, 
     1450                { &hf_attr_ipa_rsl_ip, 
     1451                        { "BSC RSL IP Address", "oml.fom.attr.ipa.rsl_ip", 
     1452                          FT_IPv4, BASE_NONE, NULL, 0, 
     1453                          "IP Address to which the BTS establishes " 
     1454                          "the RSL link", HFILL } 
     1455                }, 
     1456                { &hf_attr_ipa_rsl_port, 
     1457                        { "BSC RSL TCP Port", "oml.fom.attr.ipa.rsl_port", 
     1458                          FT_UINT16, BASE_DEC, NULL, 0, 
     1459                          "Port number to which the BST establishes " 
     1460                          "the RSL link", HFILL } 
     1461                }, 
     1462                { &hf_attr_ipa_prim_oml_ip, 
     1463                        { "Primary OML IP Address", 
     1464                                        "oml.fom.attr.ipa.prim_oml_ip", 
     1465                          FT_IPv4, BASE_NONE, NULL, 0, 
     1466                          "IP Address of the BSC for the primary OML link", 
     1467                          HFILL } 
     1468                }, 
     1469                { &hf_attr_ipa_prim_oml_port, 
     1470                        { "Primary OML TCP Port", 
     1471                                        "oml.fom.attr.ipa.prim_oml_port", 
     1472                          FT_UINT16, BASE_DEC, NULL, 0, 
     1473                          "TCP Port of the BSC for the primarly OML link", 
     1474                          HFILL } 
     1475                }, 
     1476                { &hf_attr_ipa_location_name, 
     1477                        { "Location Name", "oml.fom.attr.ipa.loc_name", 
     1478                          FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } 
     1479                }, 
     1480                { &hf_attr_ipa_unit_name, 
     1481                        { "Unit Name", "oml.fom.attr.ipa.unit_name", 
     1482                          FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } 
     1483                }, 
     1484                { &hf_attr_ipa_unit_id, 
     1485                        { "Unit ID", "oml.fom.attr.ipa.unit_id", 
     1486                          FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } 
     1487                }, 
     1488                { &hf_attr_ipa_nv_flags, 
     1489                        { "NVRAM Config Flags", "oml.fom.attr.ipa.nv_flags", 
     1490                          FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL } 
     1491                }, 
     1492                { &hf_attr_ipa_nv_mask, 
     1493                        { "NVRAM Config Mask", "oml.fom.attr.ipa.nv_mask", 
     1494                          FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL } 
     1495                }, 
     1496                { &hf_attr_ipa_tr_si2, 
     1497                        { "System Information 2", "oml.fom.attr.ipa.si2", 
     1498                          FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } 
     1499                }, 
     1500                { &hf_attr_ipa_tr_si2bis, 
     1501                        { "System Information 2bis", "oml.fom.attr.ipa.si2bis", 
     1502                          FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } 
     1503                }, 
     1504                { &hf_attr_ipa_tr_si2ter, 
     1505                        { "System Information 2ter", "oml.fom.attr.ipa.si2ter", 
     1506                          FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } 
     1507                }, 
     1508                { &hf_attr_ipa_tr_chan_desc, 
     1509                        { "Cell Channel Description", 
     1510                                                "oml.fom.attr.ipa.chan_desc", 
     1511                          FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } 
     1512                }, 
     1513                { &hf_attr_ipa_nsl_sport, 
     1514                        { "NS Link IP Source Port", 
     1515                                                "oml.fom.attr.ipa.nsl_sport", 
     1516                          FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1517                }, 
     1518                { &hf_attr_ipa_nsl_daddr, 
     1519                        { "NS Link IP Destination Addr", 
     1520                                                "oml.fom.attr.ipa.nsl_daddr", 
     1521                          FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL } 
     1522                }, 
     1523                { &hf_attr_ipa_nsl_dport, 
     1524                        { "NS Link IP Destination Port", 
     1525                                                "oml.fom.attr.ipa.nsl_dport", 
     1526                          FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1527                }, 
     1528                { &hf_attr_ipa_nsei, 
     1529                        { "NSEI", "oml.fom.attr.ipa.nsei", 
     1530                          FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1531                }, 
     1532                { &hf_attr_ipa_nsvci, 
     1533                        { "NSVCI", "oml.fom.attr.ipa.nsvci", 
     1534                          FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1535                }, 
     1536                { &hf_attr_ipa_bvci, 
     1537                        { "BVCI", "oml.fom.attr.ipa.bvci", 
     1538                          FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } 
     1539                }, 
     1540                { &hf_attr_ipa_rac, 
     1541                        { "RAC", "oml.fom.attr.ipa.rac", 
     1542                          FT_UINT8, BASE_HEX, NULL, 0, 
     1543                          "Routing Area Code", HFILL } 
     1544                }, 
     1545        }; 
     1546        static gint *ett[] = { 
     1547                &ett_oml, 
     1548                &ett_oml_fom, 
     1549                &ett_oml_fom_att, 
     1550        }; 
     1551 
     1552        module_t *oml_module; 
     1553 
     1554        /* assign our custom match functions */ 
     1555        oml_fom_msgtype_vse.match = _match_oml_fom_msgtype; 
     1556        oml_fom_attr_vse.match = _match_oml_fom_attr; 
     1557 
     1558        proto_abis_oml = proto_register_protocol("GSM A-bis OML", "A-bis OML", 
     1559                                                 "gsm_abis_oml"); 
     1560 
     1561        proto_register_field_array(proto_abis_oml, hf, array_length(hf)); 
     1562 
     1563        proto_register_subtree_array(ett, array_length(ett)); 
     1564 
     1565        register_dissector("gsm_abis_oml", dissect_abis_oml, proto_abis_oml); 
     1566 
     1567        oml_module = prefs_register_protocol(proto_abis_oml, proto_reg_handoff_abis_oml); 
     1568        prefs_register_bool_preference(oml_module, "use_ipaccess_oml", 
     1569                    "Use nanoBTS definitions", 
     1570                    "Use ipaccess nanoBTS specific definitions for OML", 
     1571                    &global_oml_use_nano_bts); 
     1572} 
     1573 
     1574/* This function is called once at startup and every time the user hits 
     1575 * 'apply' in the preferences dialogue */ 
     1576void 
     1577proto_reg_handoff_abis_oml(void) 
     1578{ 
     1579        static gboolean initialized = FALSE; 
     1580 
     1581        if (!initialized) { 
     1582                dissector_handle_t abis_oml_handle; 
     1583 
     1584                abis_oml_handle = create_dissector_handle(dissect_abis_oml, proto_abis_oml); 
     1585                dissector_add("lapd.gsm.sapi", LAPD_GSM_SAPI_OM_PROC, abis_oml_handle); 
     1586 
     1587        } else { 
     1588                /* preferences have been changed */ 
     1589        } 
     1590 
     1591        if (global_oml_use_nano_bts == TRUE) { 
     1592                /* initialize with nanobts definitions */ 
     1593                oml_fom_msgtype_vse.vals = _oml_fom_msgtype_vals_ipa; 
     1594                oml_fom_msgtype_vse.length = array_length(_oml_fom_msgtype_vals_ipa)-1; 
     1595                oml_fom_attr_vse.vals = oml_fom_attr_vals_ipa; 
     1596                oml_fom_attr_vse.length = array_length(oml_fom_attr_vals_ipa)-1; 
     1597        } else { 
     1598                /* initialize with BS11 defaults */ 
     1599                oml_fom_msgtype_vse.vals = _oml_fom_msgtype_vals_bs11; 
     1600                oml_fom_msgtype_vse.length = array_length(_oml_fom_msgtype_vals_bs11)-1; 
     1601                oml_fom_attr_vse.vals = oml_fom_attr_vals_bs11; 
     1602                oml_fom_attr_vse.length = array_length(oml_fom_attr_vals_bs11)-1; 
     1603        } 
     1604} 
  • (a) /dev/null vs. (b) wireshark/epan/dissectors/packet-gsm_abis_oml.h

    a b  
     1/* GSM Network Management messages on the A-bis interface 
     2 * 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0 */ 
     3 
     4/* (C) 2008-2009 by Harald Welte <laforge@gnumonks.org> 
     5 * All Rights Reserved 
     6 * 
     7 * This program is free software; you can redistribute it and/or modify 
     8 * it under the terms of the GNU General Public License as published by 
     9 * the Free Software Foundation; either version 2 of the License, or 
     10 * (at your option) any later version. 
     11 * 
     12 * This program is distributed in the hope that it will be useful, 
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     15 * GNU General Public License for more details. 
     16 * 
     17 * You should have received a copy of the GNU General Public License along 
     18 * with this program; if not, write to the Free Software Foundation, Inc., 
     19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 
     20 * 
     21 */ 
     22 
     23#ifndef __PACKET_ABIS_OML_H__ 
     24#define __PACKET_ABIS_OML_H__ 
     25 
     26#include <sys/types.h> 
     27 
     28/* From openbsc/include/openbsc/abis_nm.h */ 
     29 
     30/* generic header in front of every OML message according to TS 08.59 */ 
     31struct abis_om_hdr { 
     32        guint8  mdisc; 
     33        guint8  placement; 
     34        guint8  sequence; 
     35        guint8  length; 
     36        guint8  data[0]; 
     37} __attribute__ ((packed)); 
     38 
     39#define ABIS_OM_MDISC_FOM               0x80 
     40#define ABIS_OM_MDISC_MMI               0x40 
     41#define ABIS_OM_MDISC_TRAU              0x20 
     42#define ABIS_OM_MDISC_MANUF             0x10 
     43#define ABIS_OM_PLACEMENT_ONLY          0x80 
     44#define ABIS_OM_PLACEMENT_FIRST         0x40 
     45#define ABIS_OM_PLACEMENT_MIDDLE        0x20 
     46#define ABIS_OM_PLACEMENT_LAST          0x10 
     47 
     48struct abis_om_obj_inst { 
     49        guint8  bts_nr; 
     50        guint8  trx_nr; 
     51        guint8  ts_nr; 
     52} __attribute__ ((packed)); 
     53 
     54struct abis_om_fom_hdr { 
     55        guint8  msg_type; 
     56        guint8  obj_class; 
     57        struct abis_om_obj_inst obj_inst; 
     58        guint8  data[0]; 
     59} __attribute__ ((packed)); 
     60 
     61#define ABIS_OM_FOM_HDR_SIZE    (sizeof(struct abis_om_hdr) + sizeof(struct abis_om_fom_hdr)) 
     62 
     63/* Section 9.1: Message Types */ 
     64enum abis_nm_msgtype { 
     65        /* SW Download Management Messages */ 
     66        NM_MT_LOAD_INIT                 = 0x01, 
     67        NM_MT_LOAD_INIT_ACK, 
     68        NM_MT_LOAD_INIT_NACK, 
     69        NM_MT_LOAD_SEG, 
     70        NM_MT_LOAD_SEG_ACK, 
     71        NM_MT_LOAD_ABORT, 
     72        NM_MT_LOAD_END, 
     73        NM_MT_LOAD_END_ACK, 
     74        NM_MT_LOAD_END_NACK, 
     75        NM_MT_SW_ACT_REQ,               /* BTS->BSC */ 
     76        NM_MT_SW_ACT_REQ_ACK, 
     77        NM_MT_SW_ACT_REQ_NACK, 
     78        NM_MT_ACTIVATE_SW,              /* BSC->BTS */ 
     79        NM_MT_ACTIVATE_SW_ACK, 
     80        NM_MT_ACTIVATE_SW_NACK, 
     81        NM_MT_SW_ACTIVATED_REP,         /* 0x10 */ 
     82        /* A-bis Interface Management Messages */ 
     83        NM_MT_ESTABLISH_TEI             = 0x21, 
     84        NM_MT_ESTABLISH_TEI_ACK, 
     85        NM_MT_ESTABLISH_TEI_NACK, 
     86        NM_MT_CONN_TERR_SIGN, 
     87        NM_MT_CONN_TERR_SIGN_ACK, 
     88        NM_MT_CONN_TERR_SIGN_NACK, 
     89        NM_MT_DISC_TERR_SIGN, 
     90        NM_MT_DISC_TERR_SIGN_ACK, 
     91        NM_MT_DISC_TERR_SIGN_NACK, 
     92        NM_MT_CONN_TERR_TRAF, 
     93        NM_MT_CONN_TERR_TRAF_ACK, 
     94        NM_MT_CONN_TERR_TRAF_NACK, 
     95        NM_MT_DISC_TERR_TRAF, 
     96        NM_MT_DISC_TERR_TRAF_ACK, 
     97        NM_MT_DISC_TERR_TRAF_NACK, 
     98        /* Transmission Management Messages */ 
     99        NM_MT_CONN_MDROP_LINK           = 0x31, 
     100        NM_MT_CONN_MDROP_LINK_ACK, 
     101        NM_MT_CONN_MDROP_LINK_NACK, 
     102        NM_MT_DISC_MDROP_LINK, 
     103        NM_MT_DISC_MDROP_LINK_ACK, 
     104        NM_MT_DISC_MDROP_LINK_NACK, 
     105        /* Air Interface Management Messages */ 
     106        NM_MT_SET_BTS_ATTR              = 0x41, 
     107        NM_MT_SET_BTS_ATTR_ACK, 
     108        NM_MT_SET_BTS_ATTR_NACK, 
     109        NM_MT_SET_RADIO_ATTR, 
     110        NM_MT_SET_RADIO_ATTR_ACK, 
     111        NM_MT_SET_RADIO_ATTR_NACK, 
     112        NM_MT_SET_CHAN_ATTR, 
     113        NM_MT_SET_CHAN_ATTR_ACK, 
     114        NM_MT_SET_CHAN_ATTR_NACK, 
     115        /* Test Management Messages */ 
     116        NM_MT_PERF_TEST                 = 0x51, 
     117        NM_MT_PERF_TEST_ACK, 
     118        NM_MT_PERF_TEST_NACK, 
     119        NM_MT_TEST_REP, 
     120        NM_MT_SEND_TEST_REP, 
     121        NM_MT_SEND_TEST_REP_ACK, 
     122        NM_MT_SEND_TEST_REP_NACK, 
     123        NM_MT_STOP_TEST, 
     124        NM_MT_STOP_TEST_ACK, 
     125        NM_MT_STOP_TEST_NACK, 
     126        /* State Management and Event Report Messages */ 
     127        NM_MT_STATECHG_EVENT_REP        = 0x61, 
     128        NM_MT_FAILURE_EVENT_REP, 
     129        NM_MT_STOP_EVENT_REP, 
     130        NM_MT_STOP_EVENT_REP_ACK, 
     131        NM_MT_STOP_EVENT_REP_NACK, 
     132        NM_MT_REST_EVENT_REP, 
     133        NM_MT_REST_EVENT_REP_ACK, 
     134        NM_MT_REST_EVENT_REP_NACK, 
     135        NM_MT_CHG_ADM_STATE, 
     136        NM_MT_CHG_ADM_STATE_ACK, 
     137        NM_MT_CHG_ADM_STATE_NACK, 
     138        NM_MT_CHG_ADM_STATE_REQ, 
     139        NM_MT_CHG_ADM_STATE_REQ_ACK, 
     140        NM_MT_CHG_ADM_STATE_REQ_NACK, 
     141        NM_MT_REP_OUTST_ALARMS          = 0x93, 
     142        NM_MT_REP_OUTST_ALARMS_ACK, 
     143        NM_MT_REP_OUTST_ALARMS_NACK, 
     144        /* Equipment Management Messages */ 
     145        NM_MT_CHANGEOVER                = 0x71, 
     146        NM_MT_CHANGEOVER_ACK, 
     147        NM_MT_CHANGEOVER_NACK, 
     148        NM_MT_OPSTART, 
     149        NM_MT_OPSTART_ACK, 
     150        NM_MT_OPSTART_NACK, 
     151        NM_MT_REINIT, 
     152        NM_MT_REINIT_ACK, 
     153        NM_MT_REINIT_NACK, 
     154        NM_MT_SET_SITE_OUT,             /* BS11: get alarm ?!? */ 
     155        NM_MT_SET_SITE_OUT_ACK, 
     156        NM_MT_SET_SITE_OUT_NACK, 
     157        NM_MT_CHG_HW_CONF               = 0x90, 
     158        NM_MT_CHG_HW_CONF_ACK, 
     159        NM_MT_CHG_HW_CONF_NACK, 
     160        /* Measurement Management Messages */ 
     161        NM_MT_MEAS_RES_REQ              = 0x8a, 
     162        NM_MT_MEAS_RES_RESP, 
     163        NM_MT_STOP_MEAS, 
     164        NM_MT_START_MEAS, 
     165        /* Other Messages */ 
     166        NM_MT_GET_ATTR                  = 0x81, 
     167        NM_MT_GET_ATTR_RESP, 
     168        NM_MT_GET_ATTR_NACK, 
     169        NM_MT_SET_ALARM_THRES, 
     170        NM_MT_SET_ALARM_THRES_ACK, 
     171        NM_MT_SET_ALARM_THRES_NACK, 
     172 
     173        NM_MT_IPACC_RESTART             = 0x87, 
     174        NM_MT_IPACC_RESTART_ACK, 
     175}; 
     176 
     177enum abis_nm_msgtype_bs11 { 
     178        NM_MT_BS11_RESET_RESOURCE       = 0x74, 
     179 
     180        NM_MT_BS11_BEGIN_DB_TX          = 0xa3, 
     181        NM_MT_BS11_BEGIN_DB_TX_ACK, 
     182        NM_MT_BS11_BEGIN_DB_TX_NACK, 
     183        NM_MT_BS11_END_DB_TX            = 0xa6, 
     184        NM_MT_BS11_END_DB_TX_ACK, 
     185        NM_MT_BS11_END_DB_TX_NACK, 
     186        NM_MT_BS11_CREATE_OBJ           = 0xa9, 
     187        NM_MT_BS11_CREATE_OBJ_ACK, 
     188        NM_MT_BS11_CREATE_OBJ_NACK, 
     189        NM_MT_BS11_DELETE_OBJ           = 0xac, 
     190        NM_MT_BS11_DELETE_OBJ_ACK, 
     191        NM_MT_BS11_DELETE_OBJ_NACK, 
     192 
     193        NM_MT_BS11_SET_ATTR             = 0xd0, 
     194        NM_MT_BS11_SET_ATTR_ACK, 
     195        NM_MT_BS11_SET_ATTR_NACK, 
     196        NM_MT_BS11_LMT_SESSION          = 0xdc, 
     197 
     198        NM_MT_BS11_GET_STATE            = 0xe3, 
     199        NM_MT_BS11_GET_STATE_ACK, 
     200        NM_MT_BS11_LMT_LOGON            = 0xe5, 
     201        NM_MT_BS11_LMT_LOGON_ACK, 
     202        NM_MT_BS11_RESTART              = 0xe7, 
     203        NM_MT_BS11_RESTART_ACK, 
     204        NM_MT_BS11_DISCONNECT           = 0xe9, 
     205        NM_MT_BS11_DISCONNECT_ACK, 
     206        NM_MT_BS11_LMT_LOGOFF           = 0xec, 
     207        NM_MT_BS11_LMT_LOGOFF_ACK, 
     208        NM_MT_BS11_RECONNECT            = 0xf1, 
     209        NM_MT_BS11_RECONNECT_ACK, 
     210}; 
     211 
     212enum abis_nm_msgtype_ipacc { 
     213        NM_MT_IPACC_RSL_CONNECT         = 0xe0, 
     214        NM_MT_IPACC_RSL_CONNECT_ACK, 
     215        NM_MT_IPACC_RSL_CONNECT_NACK, 
     216        NM_MT_IPACC_RSL_DISCONNECT      = 0xe3, 
     217        NM_MT_IPACC_RSL_DISCONNECT_ACK, 
     218        NM_MT_IPACC_RSL_DISCONNECT_NACK, 
     219        NM_MT_IPACC_CONN_TRAF           = 0xe6, 
     220        NM_MT_IPACC_CONN_TRAF_ACK, 
     221        NM_MT_IPACC_CONN_TRAF_NACK, 
     222        NM_MT_IPACC_DISC_TRAF           = 0xe9, 
     223        NM_MT_IPACC_DISC_TRAF_ACK, 
     224        NM_MT_IPACC_DISC_TRAF_NACK, 
     225        NM_MT_IPACC_DEF_BOOT_SW         = 0xec, 
     226        NM_MT_IPACC_DEF_BOOT_SW_ACK, 
     227        NM_MT_IPACC_DEF_BOOT_SW_NACK, 
     228        NM_MT_IPACC_SET_NVATTR          = 0xef, 
     229        NM_MT_IPACC_SET_NVATTR_ACK, 
     230        NM_MT_IPACC_SET_NVATTR_NACK, 
     231        NM_MT_IPACC_GET_NVATTR          = 0xf2, 
     232        NM_MT_IPACC_GET_NVATTR_ACK, 
     233        NM_MT_IPACC_GET_NVATTR_NACK, 
     234        NM_MT_IPACC_SET_ATTR            = 0xf5, 
     235        NM_MT_IPACC_SET_ATTR_ACK, 
     236        NM_MT_IPACC_SET_ATTR_NACK, 
     237        NM_MT_IPACC_ATTR_CHG_EVT        = 0xf8, 
     238        NM_MT_IPACC_SW_DEACT            = 0xf9, 
     239        NM_MT_IPACC_SW_DEACT_ACK, 
     240        NM_MT_IPACC_SW_DEACT_NACK, 
     241        NM_MT_IPACC_MEAS_RES_REQ_NACK   = 0xfc, 
     242        NM_MT_IPACC_START_MEAS_NACK, 
     243        NM_MT_IPACC_STOP_MEAS_NACK, 
     244}; 
     245 
     246enum abis_nm_bs11_cell_alloc { 
     247        NM_BS11_CANR_GSM        = 0x00, 
     248        NM_BS11_CANR_DCS1800    = 0x01, 
     249}; 
     250 
     251/* Section 9.2: Object Class */ 
     252enum abis_nm_obj_class { 
     253        NM_OC_SITE_MANAGER              = 0x00, 
     254        NM_OC_BTS, 
     255        NM_OC_RADIO_CARRIER, 
     256        NM_OC_CHANNEL, 
     257        NM_OC_BASEB_TRANSC, 
     258        /* RFU: 05-FE */ 
     259        NM_OC_BS11_ADJC                 = 0xa0, 
     260        NM_OC_BS11_HANDOVER             = 0xa1, 
     261        NM_OC_BS11_PWR_CTRL             = 0xa2, 
     262        NM_OC_BS11_BTSE                 = 0xa3,         /* LMT? */ 
     263        NM_OC_BS11_RACK                 = 0xa4, 
     264        NM_OC_BS11                      = 0xa5,         /* 01: ALCO */ 
     265        NM_OC_BS11_TEST                 = 0xa6, 
     266        NM_OC_BS11_ENVABTSE             = 0xa8, 
     267        NM_OC_BS11_BPORT                = 0xa9, 
     268 
     269        NM_OC_GPRS_NSE                  = 0xf0, 
     270        NM_OC_GPRS_CELL                 = 0xf1, 
     271        NM_OC_GPRS_NSVC0                = 0xf2, 
     272        NM_OC_GPRS_NSVC1                = 0xf3, 
     273 
     274        NM_OC_NULL                      = 0xff, 
     275}; 
     276 
     277/* Section 9.4: Attributes */ 
     278enum abis_nm_attr { 
     279        NM_ATT_ABIS_CHANNEL     = 0x01, 
     280        NM_ATT_ADD_INFO, 
     281        NM_ATT_ADD_TEXT, 
     282        NM_ATT_ADM_STATE, 
     283        NM_ATT_ARFCN_LIST, 
     284        NM_ATT_AUTON_REPORT, 
     285        NM_ATT_AVAIL_STATUS, 
     286        NM_ATT_BCCH_ARFCN, 
     287        NM_ATT_BSIC, 
     288        NM_ATT_BTS_AIR_TIMER, 
     289        NM_ATT_CCCH_L_I_P, 
     290        NM_ATT_CCCH_L_T, 
     291        NM_ATT_CHAN_COMB, 
     292        NM_ATT_CONN_FAIL_CRIT, 
     293        NM_ATT_DEST, 
     294        /* res */ 
     295        NM_ATT_EVENT_TYPE       = 0x11, /* BS11: file data ?!? */ 
     296        NM_ATT_FILE_ID, 
     297        NM_ATT_FILE_VERSION, 
     298        NM_ATT_GSM_TIME, 
     299        NM_ATT_HSN, 
     300        NM_ATT_HW_CONFIG, 
     301        NM_ATT_HW_DESC, 
     302        NM_ATT_INTAVE_PARAM, 
     303        NM_ATT_INTERF_BOUND, 
     304        NM_ATT_LIST_REQ_ATTR, 
     305        NM_ATT_MAIO, 
     306        NM_ATT_MANUF_STATE, 
     307        NM_ATT_MANUF_THRESH, 
     308        NM_ATT_MANUF_ID, 
     309        NM_ATT_MAX_TA, 
     310        NM_ATT_MDROP_LINK,      /* 0x20 */ 
     311        NM_ATT_MDROP_NEXT, 
     312        NM_ATT_NACK_CAUSES, 
     313        NM_ATT_NY1, 
     314        NM_ATT_OPER_STATE, 
     315        NM_ATT_OVERL_PERIOD, 
     316        NM_ATT_PHYS_CONF, 
     317        NM_ATT_POWER_CLASS, 
     318        NM_ATT_POWER_THRESH, 
     319        NM_ATT_PROB_CAUSE, 
     320        NM_ATT_RACH_B_THRESH, 
     321        NM_ATT_LDAVG_SLOTS, 
     322        NM_ATT_RAD_SUBC, 
     323        NM_ATT_RF_MAXPOWR_R, 
     324        NM_ATT_SITE_INPUTS, 
     325        NM_ATT_SITE_OUTPUTS, 
     326        NM_ATT_SOURCE,          /* 0x30 */ 
     327        NM_ATT_SPEC_PROB, 
     328        NM_ATT_START_TIME, 
     329        NM_ATT_T200, 
     330        NM_ATT_TEI, 
     331        NM_ATT_TEST_DUR, 
     332        NM_ATT_TEST_NO, 
     333        NM_ATT_TEST_REPORT, 
     334        NM_ATT_VSWR_THRESH, 
     335        NM_ATT_WINDOW_SIZE, 
     336        /* Res  */ 
     337        NM_ATT_BS11_RSSI_OFFS   = 0x3d, 
     338        NM_ATT_BS11_TXPWR       = 0x3e, 
     339        NM_ATT_BS11_DIVERSITY   = 0x3f, 
     340        /* Res  */ 
     341        NM_ATT_TSC              = 0x40, 
     342        NM_ATT_SW_CONFIG, 
     343        NM_ATT_SW_DESCR, 
     344        NM_ATT_SEVERITY, 
     345        NM_ATT_GET_ARI, 
     346        NM_ATT_HW_CONF_CHG, 
     347        NM_ATT_OUTST_ALARM, 
     348        NM_ATT_FILE_DATA, 
     349        NM_ATT_MEAS_RES, 
     350        NM_ATT_MEAS_TYPE, 
     351}; 
     352 
     353enum abis_nm_attr_bs11 { 
     354        NM_ATT_BS11_OM_LAPD_REL_TIMER   = 0x02, 
     355        NM_ATT_BS11_EMERG_TIMER1        = 0x42, 
     356        NM_ATT_BS11_EMERG_TIMER2        = 0x44, 
     357        NM_ATT_BS11_ESN_FW_CODE_NO      = 0x4c, 
     358        NM_ATT_BS11_ESN_HW_CODE_NO      = 0x4f, 
     359 
     360        NM_ATT_BS11_FILE_DATA           = NM_ATT_EVENT_TYPE, 
     361 
     362        NM_ATT_BS11_ESN_PCB_SERIAL      = 0x55, 
     363        NM_ATT_BS11_EXCESSIVE_DISTANCE  = 0x58, 
     364 
     365        NM_ATT_BS11_ALL_TEST_CATG       = 0x60, 
     366        NM_ATT_BS11_BTSLS_HOPPING, 
     367        NM_ATT_BS11_CELL_ALLOC_NR, 
     368        NM_ATT_BS11_CELL_GLOBAL_ID, 
     369        NM_ATT_BS11_ENA_INTERF_CLASS    = 0x66, 
     370        NM_ATT_BS11_ENA_INT_INTEC_HANDO = 0x67, 
     371        NM_ATT_BS11_ENA_INT_INTRC_HANDO = 0x68, 
     372        NM_ATT_BS11_ENA_MS_PWR_CTRL     = 0x69, 
     373        NM_ATT_BS11_ENA_PWR_BDGT_HO     = 0x6a, 
     374        NM_ATT_BS11_ENA_PWR_CTRL_RLFW   = 0x6b, 
     375        NM_ATT_BS11_ENA_RXLEV_HO        = 0x6c, 
     376        NM_ATT_BS11_ENA_RXQUAL_HO       = 0x6d, 
     377        NM_ATT_BS11_FACCH_QUAL          = 0x6e, 
     378 
     379        NM_ATT_BS11_RF_RES_IND_PER      = 0x8f, 
     380 
     381        NM_ATT_BS11_RX_LEV_MIN_CELL     = 0x90, 
     382        NM_ATT_BS11_ABIS_EXT_TIME       = 0x91, 
     383        NM_ATT_BS11_TIMER_HO_REQUEST    = 0x92, 
     384        NM_ATT_BS11_TIMER_NCELL         = 0x93, 
     385        NM_ATT_BS11_TSYNC               = 0x94, 
     386        NM_ATT_BS11_TTRAU               = 0x95, 
     387        NM_ATT_BS11_EMRG_CFG_MEMBER     = 0x9b, 
     388        NM_ATT_BS11_TRX_AREA            = 0x9f, 
     389 
     390        NM_ATT_BS11_BCCH_RECONF         = 0xd7, 
     391        NM_ATT_BS11_BIT_ERR_THESH       = 0xa0, 
     392        NM_ATT_BS11_BOOT_SW_VERS        = 0xa1, 
     393        NM_ATT_BS11_CCLK_ACCURACY       = 0xa3, 
     394        NM_ATT_BS11_CCLK_TYPE           = 0xa4, 
     395        NM_ATT_BS11_INP_IMPEDANCE       = 0xaa, 
     396        NM_ATT_BS11_L1_PROT_TYPE        = 0xab, 
     397        NM_ATT_BS11_LINE_CFG            = 0xac, 
     398        NM_ATT_BS11_LI_PORT_1           = 0xad, 
     399        NM_ATT_BS11_LI_PORT_2           = 0xae, 
     400 
     401        NM_ATT_BS11_L1_REM_ALM_TYPE     = 0xb0, 
     402        NM_ATT_BS11_SW_LOAD_INTENDED    = 0xbb, 
     403        NM_ATT_BS11_SW_LOAD_SAFETY      = 0xbc, 
     404        NM_ATT_BS11_SW_LOAD_STORED      = 0xbd, 
     405 
     406        NM_ATT_BS11_VENDOR_NAME         = 0xc1, 
     407        NM_ATT_BS11_HOPPING_MODE        = 0xc5, 
     408        NM_ATT_BS11_LMT_LOGON_SESSION   = 0xc6, 
     409        NM_ATT_BS11_LMT_LOGIN_TIME      = 0xc7, 
     410        NM_ATT_BS11_LMT_USER_ACC_LEV    = 0xc8, 
     411        NM_ATT_BS11_LMT_USER_NAME       = 0xc9, 
     412 
     413        NM_ATT_BS11_L1_CONTROL_TS       = 0xd8, 
     414        NM_ATT_BS11_RADIO_MEAS_GRAN     = 0xdc, /* in SACCH multiframes */ 
     415        NM_ATT_BS11_RADIO_MEAS_REP      = 0xdd, 
     416 
     417        NM_ATT_BS11_SH_LAPD_INT_TIMER   = 0xe8, 
     418 
     419        NM_ATT_BS11_BTS_STATE           = 0xf0, 
     420        NM_ATT_BS11_E1_STATE            = 0xf1, 
     421        NM_ATT_BS11_PLL                 = 0xf2, 
     422        NM_ATT_BS11_RX_OFFSET           = 0xf3, 
     423        NM_ATT_BS11_ANT_TYPE            = 0xf4, 
     424        NM_ATT_BS11_PLL_MODE            = 0xfc, 
     425        NM_ATT_BS11_PASSWORD            = 0xfd, 
     426}; 
     427 
     428enum abis_nm_attr_ipa { 
     429        NM_ATT_IPACC_DST_IP             = 0x80, 
     430        NM_ATT_IPACC_DST_IP_PORT        = 0x81, 
     431        NM_ATT_IPACC_SSRC               = 0x82,         /* RTP Sync Source */ 
     432        NM_ATT_IPACC_RTP_PAYLD_TYPE     = 0x83, 
     433        NM_ATT_IPACC_BASEB_ID           = 0x84, 
     434        NM_ATT_IPACC_STREAM_ID          = 0x85, 
     435        NM_ATT_IPACC_NV_FLAGS           = 0x86, 
     436        NM_ATT_IPACC_FREQ_CTRL          = 0x87, 
     437        NM_ATT_IPACC_PRIM_OML_CFG       = 0x88, 
     438        NM_ATT_IPACC_SEC_OML_CFG        = 0x89, 
     439        NM_ATT_IPACC_IP_IF_CFG          = 0x8a,         /* IP interface */ 
     440        NM_ATT_IPACC_IP_GW_CFG          = 0x8b,         /* IP gateway */ 
     441        NM_ATT_IPACC_IN_SERV_TIME       = 0x8c, 
     442        NM_ATT_IPACC_TRX_BTS_ASS        = 0x8d, 
     443        NM_ATT_IPACC_LOCATION           = 0x8e,         /* string describing location */ 
     444        NM_ATT_IPACC_PAGING_CFG         = 0x8f, 
     445        NM_ATT_IPACC_FILE_DATA          = 0x90, 
     446        NM_ATT_IPACC_UNIT_ID            = 0x91,         /* Site/BTS/TRX */ 
     447        NM_ATT_IPACC_PARENT_UNIT_ID     = 0x92, 
     448        NM_ATT_IPACC_UNIT_NAME          = 0x93,         /* default: nbts-<mac-as-string> */ 
     449        NM_ATT_IPACC_SNMP_CFG           = 0x94, 
     450        NM_ATT_IPACC_PRIM_OML_CFG_LIST  = 0x95, 
     451        NM_ATT_IPACC_PRIM_OML_FB_TOUT   = 0x96,         /* fallback timeout */ 
     452        NM_ATT_IPACC_CUR_SW_CFG         = 0x97, 
     453        NM_ATT_IPACC_TIMING_BUS         = 0x98, 
     454        NM_ATT_IPACC_CGI                = 0x99,         /* Cell Global ID */ 
     455        NM_ATT_IPACC_RAC                = 0x9a, 
     456        NM_ATT_IPACC_OBJ_VERSION        = 0x9b, 
     457        NM_ATT_IPACC_GPRS_PAGING_CFG    = 0x9c, 
     458        NM_ATT_IPACC_NSEI               = 0x9d, 
     459        NM_ATT_IPACC_BVCI               = 0x9e, 
     460        NM_ATT_IPACC_NSVCI              = 0x9f, 
     461        NM_ATT_IPACC_NS_CFG             = 0xa0, 
     462        NM_ATT_IPACC_BSSGP_CFG          = 0xa1, 
     463        NM_ATT_IPACC_NS_LINK_CFG        = 0xa2, 
     464        NM_ATT_IPACC_RLC_CFG            = 0xa3, 
     465        NM_ATT_IPACC_ALM_THRESH_LIST    = 0xa4, 
     466        NM_ATT_IPACC_MONIT_VAL_LIST     = 0xa5, 
     467        NM_ATT_IPACC_TIB_CONTROL        = 0xa6, 
     468        NM_ATT_IPACC_SUPP_FEATURES      = 0xa7, 
     469        NM_ATT_IPACC_CODING_SCHEMES     = 0xa8, 
     470        NM_ATT_IPACC_RLC_CFG_2          = 0xa9, 
     471        NM_ATT_IPACC_HEARTB_TOUT        = 0xaa, 
     472        NM_ATT_IPACC_UPTIME             = 0xab, 
     473        NM_ATT_IPACC_RLC_CFG_3          = 0xac, 
     474        NM_ATT_IPACC_SSL_CFG            = 0xad, 
     475        NM_ATT_IPACC_SEC_POSSIBLE       = 0xae, 
     476        NM_ATT_IPACC_IML_SSL_STATE      = 0xaf, 
     477        NM_ATT_IPACC_REVOC_DATE         = 0xb0, 
     478}; 
     479 
     480/* Section 9.4.4: Administrative State */ 
     481enum abis_nm_adm_state { 
     482        NM_STATE_LOCKED         = 0x01, 
     483        NM_STATE_UNLOCKED       = 0x02, 
     484        NM_STATE_SHUTDOWN       = 0x03, 
     485        NM_STATE_NULL           = 0xff, 
     486}; 
     487 
     488/* Section 9.4.13: Channel Combination */ 
     489enum abis_nm_chan_comb { 
     490        NM_CHANC_TCHFull        = 0x00, 
     491        NM_CHANC_TCHHalf        = 0x01, 
     492        NM_CHANC_TCHHalf2       = 0x02, 
     493        NM_CHANC_SDCCH          = 0x03, 
     494        NM_CHANC_mainBCCH       = 0x04, 
     495        NM_CHANC_BCCHComb       = 0x05, 
     496        NM_CHANC_BCCH           = 0x06, 
     497        NM_CHANC_BCCH_CBCH      = 0x07, 
     498        NM_CHANC_SDCCH_CBCH     = 0x08, 
     499}; 
     500 
     501/* Section 9.4.16: Event Type */ 
     502enum abis_nm_event_type { 
     503        NM_EVT_COMM_FAIL        = 0x00, 
     504        NM_EVT_QOS_FAIL         = 0x01, 
     505        NM_EVT_PROC_FAIL        = 0x02, 
     506        NM_EVT_EQUIP_FAIL       = 0x03, 
     507        NM_EVT_ENV_FAIL         = 0x04, 
     508}; 
     509 
     510/* Section: 9.4.63: Perceived Severity */ 
     511enum abis_nm_severity { 
     512        NM_SEVER_CEASED         = 0x00, 
     513        NM_SEVER_CRITICAL       = 0x01, 
     514        NM_SEVER_MAJOR          = 0x02, 
     515        NM_SEVER_MINOR          = 0x03, 
     516        NM_SEVER_WARNING        = 0x04, 
     517        NM_SEVER_INDETERMINATE  = 0x05, 
     518}; 
     519 
     520/* Section 9.4.43: Probable Cause Type */ 
     521enum abis_nm_pcause_type { 
     522        NM_PCAUSE_T_X721        = 0x01, 
     523        NM_PCAUSE_T_GSM         = 0x02, 
     524        NM_PCAUSE_T_MANUF       = 0x03, 
     525}; 
     526 
     527/* Section 9.4.36: NACK Causes */ 
     528enum abis_nm_nack_cause { 
     529        /* General Nack Causes */ 
     530        NM_NACK_INCORR_STRUCT           = 0x01, 
     531        NM_NACK_MSGTYPE_INVAL           = 0x02, 
     532        NM_NACK_OBJCLASS_INVAL          = 0x05, 
     533        NM_NACK_OBJCLASS_NOTSUPP        = 0x06, 
     534        NM_NACK_BTSNR_UNKN              = 0x07, 
     535        NM_NACK_TRXNR_UNKN              = 0x08, 
     536        NM_NACK_OBJINST_UNKN            = 0x09, 
     537        NM_NACK_ATTRID_INVAL            = 0x0c, 
     538        NM_NACK_ATTRID_NOTSUPP          = 0x0d, 
     539        NM_NACK_PARAM_RANGE             = 0x0e, 
     540        NM_NACK_ATTRLIST_INCONSISTENT   = 0x0f, 
     541        NM_NACK_SPEC_IMPL_NOTSUPP       = 0x10, 
     542        NM_NACK_CANT_PERFORM            = 0x11, 
     543        /* Specific Nack Causes */ 
     544        NM_NACK_RES_NOTIMPL             = 0x19, 
     545        NM_NACK_RES_NOTAVAIL            = 0x1a, 
     546        NM_NACK_FREQ_NOTAVAIL           = 0x1b, 
     547        NM_NACK_TEST_NOTSUPP            = 0x1c, 
     548        NM_NACK_CAPACITY_RESTR          = 0x1d, 
     549        NM_NACK_PHYSCFG_NOTPERFORM      = 0x1e, 
     550        NM_NACK_TEST_NOTINIT            = 0x1f, 
     551        NM_NACK_PHYSCFG_NOTRESTORE      = 0x20, 
     552        NM_NACK_TEST_NOSUCH             = 0x21, 
     553        NM_NACK_TEST_NOSTOP             = 0x22, 
     554        NM_NACK_MSGINCONSIST_PHYSCFG    = 0x23, 
     555        NM_NACK_FILE_INCOMPLETE         = 0x25, 
     556        NM_NACK_FILE_NOTAVAIL           = 0x26, 
     557        NM_NACK_FILE_NOTACTIVATE        = 0x27, 
     558        NM_NACK_REQ_NOT_GRANT           = 0x28, 
     559        NM_NACK_WAIT                    = 0x29, 
     560        NM_NACK_NOTH_REPORT_EXIST       = 0x2a, 
     561        NM_NACK_MEAS_NOTSUPP            = 0x2b, 
     562        NM_NACK_MEAS_NOTSTART           = 0x2c, 
     563}; 
     564 
     565/* Section 9.4.1 */ 
     566struct abis_nm_channel { 
     567        guint8  attrib; 
     568        guint8  bts_port; 
     569        guint8  timeslot; 
     570        guint8  subslot; 
     571} __attribute__ ((packed)); 
     572 
     573/* Siemens BS-11 specific objects in the SienemsHW (0xA5) object class */ 
     574enum abis_bs11_objtype { 
     575        BS11_OBJ_ALCO           = 0x01, 
     576        BS11_OBJ_BBSIG          = 0x02, /* obj_class: 0,1 */ 
     577        BS11_OBJ_TRX1           = 0x03, /* only DEACTIVATE TRX1 */ 
     578        BS11_OBJ_CCLK           = 0x04, 
     579        BS11_OBJ_GPSU           = 0x06, 
     580        BS11_OBJ_LI             = 0x07, 
     581        BS11_OBJ_PA             = 0x09, /* obj_class: 0, 1*/ 
     582}; 
     583 
     584enum abis_bs11_trx_power { 
     585        BS11_TRX_POWER_GSM_2W   = 0x06, 
     586        BS11_TRX_POWER_GSM_250mW= 0x07, 
     587        BS11_TRX_POWER_GSM_80mW = 0x08, 
     588        BS11_TRX_POWER_GSM_30mW = 0x09, 
     589        BS11_TRX_POWER_DCS_3W   = 0x0a, 
     590        BS11_TRX_POWER_DCS_1W6  = 0x0b, 
     591        BS11_TRX_POWER_DCS_500mW= 0x0c, 
     592        BS11_TRX_POWER_DCS_160mW= 0x0d, 
     593}; 
     594 
     595enum abis_bs11_li_pll_mode { 
     596        BS11_LI_PLL_LOCKED      = 2, 
     597        BS11_LI_PLL_STANDALONE  = 3, 
     598}; 
     599 
     600enum abis_bs11_phase { 
     601        BS11_STATE_SOFTWARE_RQD         = 0x01, 
     602        BS11_STATE_LOAD_SMU_INTENDED    = 0x11, 
     603        BS11_STATE_LOAD_SMU_SAFETY      = 0x21, 
     604        BS11_STATE_LOAD_FAILED          = 0x31, 
     605        BS11_STATE_LOAD_DIAGNOSTIC      = 0x41, 
     606        BS11_STATE_WARM_UP              = 0x51, 
     607        BS11_STATE_WARM_UP_2            = 0x52, 
     608        BS11_STATE_WAIT_MIN_CFG         = 0x62, 
     609        BS11_STATE_MAINTENANCE          = 0x72, 
     610        BS11_STATE_LOAD_MBCCU           = 0x92, 
     611        BS11_STATE_WAIT_MIN_CFG_2       = 0xA2, 
     612        BS11_STATE_NORMAL               = 0x03, 
     613        BS11_STATE_ABIS_LOAD            = 0x13, 
     614}; 
     615 
     616/* From openbsc/include/openbsc/tlv.h */ 
     617enum tlv_type { 
     618        TLV_TYPE_UNKNOWN, 
     619        TLV_TYPE_FIXED, 
     620        TLV_TYPE_T, 
     621        TLV_TYPE_TV, 
     622        TLV_TYPE_TLV, 
     623        TLV_TYPE_TL16V, 
     624        TLV_TYPE_TLV16, 
     625}; 
     626 
     627struct tlv_def { 
     628        enum tlv_type type; 
     629        u_int8_t fixed_len; 
     630}; 
     631 
     632struct tlv_definition { 
     633        struct tlv_def def[0xff]; 
     634}; 
     635 
     636enum abis_nm_ipacc_test_no { 
     637        NM_IPACC_TESTNO_RLOOP_ANT       = 0x01, 
     638        NM_IPACC_TESTNO_RLOOP_XCVR      = 0x02, 
     639        NM_IPACC_TESTNO_FUNC_OBJ        = 0x03, 
     640        NM_IPACC_TESTNO_CHAN_USAGE      = 0x40, 
     641        NM_IPACC_TESTNO_BCCH_CHAN_USAGE = 0x41, 
     642        NM_IPACC_TESTNO_FREQ_SYNC       = 0x42, 
     643        NM_IPACC_TESTNO_BCCH_INFO       = 0x43, 
     644        NM_IPACC_TESTNO_TX_BEACON       = 0x44, 
     645        NM_IPACC_TESTNO_SYSINFO_MONITOR = 0x45, 
     646        NM_IPACC_TESTNO_BCCCH_MONITOR   = 0x46, 
     647}; 
     648 
     649/* first byte after length inside NM_ATT_TEST_REPORT */ 
     650enum abis_nm_ipacc_test_res { 
     651        NM_IPACC_TESTRES_SUCCESS        = 0, 
     652        NM_IPACC_TESTRES_TIMEOUT        = 1, 
     653        NM_IPACC_TESTRES_NO_CHANS       = 2, 
     654        NM_IPACC_TESTRES_PARTIAL        = 3, 
     655        NM_IPACC_TESTRES_STOPPED        = 4, 
     656}; 
     657 
     658/* internal IE inside NM_ATT_TEST_REPORT */ 
     659enum abis_nm_ipacc_testres_ie { 
     660        NM_IPACC_TR_IE_FREQ_ERR_LIST    = 3, 
     661        NM_IPACC_TR_IE_CHAN_USAGE       = 4, 
     662        NM_IPACC_TR_IE_BCCH_INFO        = 6, 
     663        NM_IPACC_TR_IE_RESULT_DETAILS   = 8, 
     664        NM_IPACC_TR_IE_FREQ_ERR         = 18, 
     665}; 
     666 
     667/* From openbsc/src/abis_nm.c */ 
     668static const struct tlv_definition nm_att_tlvdef_base = { 
     669        .def = { 
     670                [NM_ATT_ABIS_CHANNEL] =         { TLV_TYPE_FIXED, 3 }, 
     671                [NM_ATT_ADD_INFO] =             { TLV_TYPE_TL16V, 0 }, 
     672                [NM_ATT_ADD_TEXT] =             { TLV_TYPE_TL16V, 0 }, 
     673                [NM_ATT_ADM_STATE] =            { TLV_TYPE_TV, 0 }, 
     674                [NM_ATT_ARFCN_LIST]=            { TLV_TYPE_TL16V, 0 }, 
     675                [NM_ATT_AUTON_REPORT] =         { TLV_TYPE_TV, 0 }, 
     676                [NM_ATT_AVAIL_STATUS] =         { TLV_TYPE_TL16V, 0 }, 
     677                [NM_ATT_BCCH_ARFCN] =           { TLV_TYPE_FIXED, 2 }, 
     678                [NM_ATT_BSIC] =                 { TLV_TYPE_TV, 0 }, 
     679                [NM_ATT_BTS_AIR_TIMER] =        { TLV_TYPE_TV, 0 }, 
     680                [NM_ATT_CCCH_L_I_P] =           { TLV_TYPE_TV, 0 }, 
     681                [NM_ATT_CCCH_L_T] =             { TLV_TYPE_TV, 0 }, 
     682                [NM_ATT_CHAN_COMB] =            { TLV_TYPE_TV, 0 }, 
     683                [NM_ATT_CONN_FAIL_CRIT] =       { TLV_TYPE_TL16V, 0 }, 
     684                [NM_ATT_DEST] =                 { TLV_TYPE_TL16V, 0 }, 
     685                [NM_ATT_EVENT_TYPE] =           { TLV_TYPE_TV, 0 }, 
     686                [NM_ATT_FILE_ID] =              { TLV_TYPE_TL16V, 0 }, 
     687                [NM_ATT_FILE_VERSION] =         { TLV_TYPE_TL16V, 0 }, 
     688                [NM_ATT_GSM_TIME] =             { TLV_TYPE_FIXED, 2 }, 
     689                [NM_ATT_HSN] =                  { TLV_TYPE_TV, 0 }, 
     690                [NM_ATT_HW_CONFIG] =            { TLV_TYPE_TL16V, 0 }, 
     691                [NM_ATT_HW_DESC] =              { TLV_TYPE_TLV, 0 }, 
     692                [NM_ATT_INTAVE_PARAM] =         { TLV_TYPE_TV, 0 }, 
     693                [NM_ATT_INTERF_BOUND] =         { TLV_TYPE_FIXED, 6 }, 
     694                [NM_ATT_LIST_REQ_ATTR] =        { TLV_TYPE_TL16V, 0 }, 
     695                [NM_ATT_MAIO] =                 { TLV_TYPE_TV, 0 }, 
     696                [NM_ATT_MANUF_STATE] =          { TLV_TYPE_TV, 0 }, 
     697                [NM_ATT_MANUF_THRESH] =         { TLV_TYPE_TL16V, 0 }, 
     698                [NM_ATT_MANUF_ID] =             { TLV_TYPE_TL16V, 0 }, 
     699                [NM_ATT_MAX_TA] =               { TLV_TYPE_TV, 0 }, 
     700                [NM_ATT_MDROP_LINK] =           { TLV_TYPE_FIXED, 2 }, 
     701                [NM_ATT_MDROP_NEXT] =           { TLV_TYPE_FIXED, 2 }, 
     702                [NM_ATT_NACK_CAUSES] =          { TLV_TYPE_TV, 0 }, 
     703                [NM_ATT_NY1] =                  { TLV_TYPE_TV, 0 }, 
     704                [NM_ATT_OPER_STATE] =           { TLV_TYPE_TV, 0 }, 
     705                [NM_ATT_OVERL_PERIOD] =         { TLV_TYPE_TL16V, 0 }, 
     706                [NM_ATT_PHYS_CONF] =            { TLV_TYPE_TL16V, 0 }, 
     707                [NM_ATT_POWER_CLASS] =          { TLV_TYPE_TV, 0 }, 
     708                [NM_ATT_POWER_THRESH] =         { TLV_TYPE_FIXED, 3 }, 
     709                [NM_ATT_PROB_CAUSE] =           { TLV_TYPE_FIXED, 3 }, 
     710                [NM_ATT_RACH_B_THRESH] =        { TLV_TYPE_TV, 0 }, 
     711                [NM_ATT_LDAVG_SLOTS] =          { TLV_TYPE_FIXED, 2 }, 
     712                [NM_ATT_RAD_SUBC] =             { TLV_TYPE_TV, 0 }, 
     713                [NM_ATT_RF_MAXPOWR_R] =         { TLV_TYPE_TV, 0 }, 
     714                [NM_ATT_SITE_INPUTS] =          { TLV_TYPE_TL16V, 0 }, 
     715                [NM_ATT_SITE_OUTPUTS] =         { TLV_TYPE_TL16V, 0 }, 
     716                [NM_ATT_SOURCE] =               { TLV_TYPE_TL16V, 0 }, 
     717                [NM_ATT_SPEC_PROB] =            { TLV_TYPE_TV, 0 }, 
     718                [NM_ATT_START_TIME] =           { TLV_TYPE_FIXED, 2 }, 
     719                [NM_ATT_T200] =                 { TLV_TYPE_FIXED, 7 }, 
     720                [NM_ATT_TEI] =                  { TLV_TYPE_TV, 0 }, 
     721                [NM_ATT_TEST_DUR] =             { TLV_TYPE_FIXED, 2 }, 
     722                [NM_ATT_TEST_NO] =              { TLV_TYPE_TV, 0 }, 
     723                [NM_ATT_TEST_REPORT] =          { TLV_TYPE_TL16V, 0 }, 
     724                [NM_ATT_VSWR_THRESH] =          { TLV_TYPE_FIXED, 2 }, 
     725                [NM_ATT_WINDOW_SIZE] =          { TLV_TYPE_TV, 0 }, 
     726                [NM_ATT_TSC] =                  { TLV_TYPE_TV, 0 }, 
     727                [NM_ATT_SW_CONFIG] =            { TLV_TYPE_TL16V, 0 }, 
     728                [NM_ATT_SEVERITY] =             { TLV_TYPE_TV, 0 }, 
     729                [NM_ATT_GET_ARI] =              { TLV_TYPE_TL16V, 0 }, 
     730                [NM_ATT_HW_CONF_CHG] =          { TLV_TYPE_TL16V, 0 }, 
     731                [NM_ATT_OUTST_ALARM] =          { TLV_TYPE_TV, 0 }, 
     732                [NM_ATT_FILE_DATA] =            { TLV_TYPE_TL16V, 0 }, 
     733                [NM_ATT_MEAS_RES] =             { TLV_TYPE_TL16V, 0 }, 
     734 
     735        }, 
     736}; 
     737 
     738/* BS11 specifics */ 
     739static const struct tlv_definition nm_att_tlvdev_bs11 = { 
     740        .def = { 
     741                /* different stndard IEs */ 
     742                [NM_ATT_OUTST_ALARM] =          { TLV_TYPE_TLV, 0 }, 
     743                [NM_ATT_HW_DESC] =              { TLV_TYPE_TL16V, 0 }, 
     744                [NM_ATT_ARFCN_LIST]=            { TLV_TYPE_TLV16, 0 }, 
     745 
     746                /* proprietary IEs */ 
     747                [NM_ATT_BS11_ABIS_EXT_TIME] =   { TLV_TYPE_TLV, 0 }, 
     748                [NM_ATT_BS11_OM_LAPD_REL_TIMER]={ TLV_TYPE_FIXED, 2 }, 
     749                [NM_ATT_BS11_SH_LAPD_INT_TIMER]={ TLV_TYPE_TLV, 0 }, 
     750                [NM_ATT_BS11_EMERG_TIMER1] =    { TLV_TYPE_TLV, 0 }, 
     751                [NM_ATT_BS11_EMERG_TIMER2] =    { TLV_TYPE_TLV, 0 }, 
     752                [NM_ATT_BS11_BTSLS_HOPPING] =   { TLV_TYPE_FIXED, 1 }, 
     753                [NM_ATT_BS11_CELL_ALLOC_NR] =   { TLV_TYPE_FIXED, 1 }, 
     754                [NM_ATT_BS11_ENA_INTERF_CLASS]= { TLV_TYPE_FIXED, 1 }, 
     755                [NM_ATT_BS11_FACCH_QUAL] =      { TLV_TYPE_FIXED, 1 }, 
     756                [NM_ATT_BS11_TSYNC] =           { TLV_TYPE_FIXED, 2 }, 
     757                [NM_ATT_BS11_TTRAU] =           { TLV_TYPE_FIXED, 2 }, 
     758                [NM_ATT_BS11_EXCESSIVE_DISTANCE] = { TLV_TYPE_TLV, 1 }, 
     759                [NM_ATT_BS11_HOPPING_MODE] =    { TLV_TYPE_TLV, 1 }, 
     760                [NM_ATT_BS11_RF_RES_IND_PER] =  { TLV_TYPE_FIXED, 1 }, 
     761                [NM_ATT_BS11_RADIO_MEAS_GRAN] = { TLV_TYPE_TLV, 0 }, 
     762                [NM_ATT_BS11_RADIO_MEAS_REP] =  { TLV_TYPE_TLV, 0 }, 
     763                [NM_ATT_BS11_EMRG_CFG_MEMBER] = { TLV_TYPE_TLV, 0 }, 
     764                [NM_ATT_BS11_TRX_AREA] =        { TLV_TYPE_TLV, 0 }, 
     765                [NM_ATT_BS11_ESN_FW_CODE_NO] =  { TLV_TYPE_TLV, 0 }, 
     766                [NM_ATT_BS11_ESN_HW_CODE_NO] =  { TLV_TYPE_TLV, 0 }, 
     767                [NM_ATT_BS11_ESN_PCB_SERIAL] =  { TLV_TYPE_TLV, 0 }, 
     768                [NM_ATT_BS11_BOOT_SW_VERS] =    { TLV_TYPE_TLV, 0 }, 
     769                [0x59] =                        { TLV_TYPE_TLV, 0 }, 
     770                [0xd5] =                        { TLV_TYPE_TLV, 0 }, 
     771                [0xa8] =                        { TLV_TYPE_TLV, 0 }, 
     772                [NM_ATT_BS11_PASSWORD] =        { TLV_TYPE_TLV, 0 }, 
     773                [NM_ATT_BS11_TXPWR] =           { TLV_TYPE_TLV, 0 }, 
     774                [NM_ATT_BS11_RSSI_OFFS] =       { TLV_TYPE_TLV, 0 }, 
     775                [NM_ATT_BS11_LINE_CFG] =        { TLV_TYPE_TV, 0 }, 
     776                [NM_ATT_BS11_L1_PROT_TYPE] =    { TLV_TYPE_TV, 0 }, 
     777                [NM_ATT_BS11_BIT_ERR_THESH] =   { TLV_TYPE_FIXED, 2 }, 
     778                [NM_ATT_BS11_DIVERSITY] =       { TLV_TYPE_TLV, 0 }, 
     779                [NM_ATT_BS11_LMT_LOGON_SESSION]={ TLV_TYPE_TLV, 0 }, 
     780                [NM_ATT_BS11_LMT_LOGIN_TIME] =  { TLV_TYPE_TLV, 0 }, 
     781                [NM_ATT_BS11_LMT_USER_ACC_LEV] ={ TLV_TYPE_TLV, 0 }, 
     782                [NM_ATT_BS11_LMT_USER_NAME] =   { TLV_TYPE_TLV, 0 }, 
     783                [NM_ATT_BS11_BTS_STATE] =       { TLV_TYPE_TLV, 0 }, 
     784                [NM_ATT_BS11_E1_STATE]  =       { TLV_TYPE_TLV, 0 }, 
     785                [NM_ATT_BS11_PLL_MODE]  =       { TLV_TYPE_TLV, 0 }, 
     786                [NM_ATT_BS11_PLL]       =       { TLV_TYPE_TLV, 0 }, 
     787                [NM_ATT_BS11_CCLK_ACCURACY] =   { TLV_TYPE_TV, 0 }, 
     788                [NM_ATT_BS11_CCLK_TYPE] =       { TLV_TYPE_TV, 0 }, 
     789        }, 
     790}; 
     791 
     792/* ip.access specifics */ 
     793static const struct tlv_definition nm_att_tlvdef_ipa = { 
     794        .def = { 
     795                [NM_ATT_IPACC_DST_IP] =         { TLV_TYPE_FIXED, 4 }, 
     796                [NM_ATT_IPACC_DST_IP_PORT] =    { TLV_TYPE_FIXED, 2 }, 
     797                [NM_ATT_IPACC_PRIM_OML_CFG] =   { TLV_TYPE_TL16V, 0 }, 
     798                [NM_ATT_IPACC_NV_FLAGS] =       { TLV_TYPE_TL16V, 0 }, 
     799                [NM_ATT_IPACC_FREQ_CTRL] =      { TLV_TYPE_FIXED, 2 }, 
     800                [NM_ATT_IPACC_SEC_OML_CFG] =    { TLV_TYPE_FIXED, 6 }, 
     801                [NM_ATT_IPACC_IP_IF_CFG] =      { TLV_TYPE_FIXED, 8 }, 
     802                [NM_ATT_IPACC_IP_GW_CFG] =      { TLV_TYPE_FIXED, 12 }, 
     803                [NM_ATT_IPACC_LOCATION] =       { TLV_TYPE_TL16V, 0 }, 
     804                [NM_ATT_IPACC_UNIT_ID] =        { TLV_TYPE_TL16V, 0 }, 
     805                [NM_ATT_IPACC_UNIT_NAME] =      { TLV_TYPE_TL16V, 0 }, 
     806                [NM_ATT_IPACC_SNMP_CFG] =       { TLV_TYPE_TL16V, 0 }, 
     807                [NM_ATT_IPACC_ALM_THRESH_LIST]= { TLV_TYPE_TL16V, 0 }, 
     808                [NM_ATT_IPACC_CUR_SW_CFG] =     { TLV_TYPE_TL16V, 0 }, 
     809                [NM_ATT_IPACC_STREAM_ID] =      { TLV_TYPE_TV, 0 }, 
     810                [NM_ATT_IPACC_RAC] =            { TLV_TYPE_TL16V, 0 }, 
     811                [NM_ATT_IPACC_OBJ_VERSION] =    { TLV_TYPE_TL16V, 0 }, 
     812                [NM_ATT_IPACC_GPRS_PAGING_CFG] ={ TLV_TYPE_TL16V, 0 }, 
     813                [NM_ATT_IPACC_NSEI] =           { TLV_TYPE_TL16V, 0 }, 
     814                [NM_ATT_IPACC_BVCI] =           { TLV_TYPE_TL16V, 0 }, 
     815                [NM_ATT_IPACC_NSVCI] =          { TLV_TYPE_TL16V, 0 }, 
     816                [NM_ATT_IPACC_NS_CFG] =         { TLV_TYPE_TL16V, 0 }, 
     817                [NM_ATT_IPACC_BSSGP_CFG] =      { TLV_TYPE_TL16V, 0 }, 
     818                [NM_ATT_IPACC_NS_LINK_CFG] =    { TLV_TYPE_TL16V, 0 }, 
     819                [NM_ATT_IPACC_RLC_CFG] =        { TLV_TYPE_TL16V, 0 }, 
     820                [NM_ATT_IPACC_SUPP_FEATURES] =  { TLV_TYPE_TL16V, 0 }, 
     821                [NM_ATT_IPACC_CODING_SCHEMES] = { TLV_TYPE_TL16V, 0 }, 
     822                [NM_ATT_IPACC_RLC_CFG_2] =      { TLV_TYPE_TL16V, 0 }, 
     823                [NM_ATT_IPACC_RLC_CFG_3] =      { TLV_TYPE_TL16V, 0 }, 
     824                [NM_ATT_IPACC_PAGING_CFG] =     { TLV_TYPE_FIXED, 2 }, 
     825                [NM_ATT_IPACC_FILE_DATA] =      { TLV_TYPE_TL16V, 0 }, 
     826                [NM_ATT_IPACC_CGI] =            { TLV_TYPE_TL16V, 0 }, 
     827        }, 
     828}; 
     829 
     830#endif /* _NM_H */ 
Note: See TracBrowser for help on using the browser.