root/wireshark/abis_oml.patch

Revision 31b0347e7221375ff811c0cb2842505816b543c2, 73.0 kB (checked in by Harald Welte <laforge@…>, 7 weeks ago)

fix crash in A-bis OML plugin in recent wireshark versions

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

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