diff --git a/openbsc/include/openbsc/abis_nm.h b/openbsc/include/openbsc/abis_nm.h index 4b7e2ff0f..65cef73f3 100644 --- a/openbsc/include/openbsc/abis_nm.h +++ b/openbsc/include/openbsc/abis_nm.h @@ -362,6 +362,7 @@ enum abis_nm_attr { NM_ATT_IPACC_RSL_BSC_PORT = 0x81, NM_ATT_IPACC_NV_FLAGS = 0x86, NM_ATT_IPACC_FREQ_CTRL = 0x87, + NM_ATT_IPACC_SEC_OML_CFG = 0x89, NM_ATT_IPACC_IP_IF_CFG = 0x8a, /* IP interface */ NM_ATT_IPACC_IP_GW_CFG = 0x8b, /* IP gateway */ NM_ATT_IPACC_IN_SERV_TIME = 0x8c, diff --git a/openbsc/src/abis_nm.c b/openbsc/src/abis_nm.c index b07aa3116..0ec064025 100644 --- a/openbsc/src/abis_nm.c +++ b/openbsc/src/abis_nm.c @@ -357,8 +357,19 @@ static const struct tlv_definition nm_att_tlvdef = { /* ip.access specifics */ [NM_ATT_IPACC_RSL_BSC_IP] = { TLV_TYPE_FIXED, 4 }, [NM_ATT_IPACC_RSL_BSC_PORT] = { TLV_TYPE_FIXED, 2 }, - [NM_ATT_IPACC_PRIM_OML_IP] = { TLV_TYPE_FIXED, 6 }, - [0x95] = { TLV_TYPE_FIXED, 2 }, + [NM_ATT_IPACC_PRIM_OML_IP] = { TLV_TYPE_TL16V }, + [NM_ATT_IPACC_NV_FLAGS] = { TLV_TYPE_TL16V }, + [NM_ATT_IPACC_FREQ_CTRL] = { TLV_TYPE_FIXED, 2 }, + [NM_ATT_IPACC_SEC_OML_IP] = { TLV_TYPE_TL16V }, // wrong name + [NM_ATT_IPACC_SEC_OML_CFG] = { TLV_TYPE_FIXED, 6 }, + [NM_ATT_IPACC_IP_IF_CFG] = { TLV_TYPE_FIXED, 8 }, + [NM_ATT_IPACC_IP_GW_CFG] = { TLV_TYPE_FIXED, 12 }, + [NM_ATT_IPACC_LOCATION] = { TLV_TYPE_TL16V }, + [NM_ATT_IPACC_UNIT_ID] = { TLV_TYPE_TL16V }, + [NM_ATT_IPACC_UNIT_NAME] = { TLV_TYPE_TL16V }, + [NM_ATT_IPACC_SNMP_CFG] = { TLV_TYPE_TL16V }, + [NM_ATT_IPACC_ALM_THRESH_LIST]= { TLV_TYPE_TL16V }, + //[0x95] = { TLV_TYPE_FIXED, 2 }, [0x85] = { TLV_TYPE_TV }, }, @@ -2282,6 +2293,18 @@ static int abis_nm_rx_ipacc(struct msgb *msg) else DEBUGPC(DNM, "\n"); break; + case NM_MT_IPACC_GET_NVATTR_ACK: + DEBUGPC(DNM, "GET NVATTR ACK\n"); + /* FIXME: decode and show the actual attributes */ + break; + case NM_MT_IPACC_GET_NVATTR_NACK: + DEBUGPC(DNM, "GET NVATTR NACK "); + if (TLVP_PRESENT(&tp, NM_ATT_NACK_CAUSES)) + DEBUGPC(DNM, " CAUSE=%s\n", + nack_cause_name(*TLVP_VAL(&tp, NM_ATT_NACK_CAUSES))); + else + DEBUGPC(DNM, "\n"); + break; default: DEBUGPC(DNM, "unknown\n"); break; diff --git a/openbsc/src/ipaccess-config.c b/openbsc/src/ipaccess-config.c index d3f3176b3..8c52093ae 100644 --- a/openbsc/src/ipaccess-config.c +++ b/openbsc/src/ipaccess-config.c @@ -43,6 +43,8 @@ static struct gsm_network *gsmnet; static int restart; static char *prim_oml_ip; static char *unit_id; +static u_int16_t nv_flags; +static u_int16_t nv_mask; /* static u_int8_t prim_oml_attr[] = { 0x95, 0x00, 7, 0x88, 192, 168, 100, 11, 0x00, 0x00 }; @@ -53,6 +55,7 @@ static void bootstrap_om(struct gsm_bts *bts) { int len; static u_int8_t buf[1024]; + u_int8_t *cur = buf; printf("OML link established\n"); @@ -70,7 +73,6 @@ static void bootstrap_om(struct gsm_bts *bts) } if (prim_oml_ip) { struct in_addr ia; - u_int8_t *cur = buf; if (!inet_aton(prim_oml_ip, &ia)) { fprintf(stderr, "invalid IP address: %s\n", @@ -92,6 +94,20 @@ static void bootstrap_om(struct gsm_bts *bts) printf("setting primary OML link IP to '%s'\n", inet_ntoa(ia)); abis_nm_ipaccess_set_nvattr(bts, buf, 3+len); } + if (nv_mask) { + len = 4; + + *cur++ = NM_ATT_IPACC_NV_FLAGS; + *cur++ = (len) >> 8; + *cur++ = (len) & 0xff; + *cur++ = nv_flags & 0xff; + *cur++ = nv_mask & 0xff; + *cur++ = nv_flags >> 8; + *cur++ = nv_mask >> 8; + printf("setting NV Flags/Mask to 0x%04x/0x%04x\n", + nv_flags, nv_mask); + abis_nm_ipaccess_set_nvattr(bts, buf, 3+len); + } if (restart) { printf("restarting BTS\n"); @@ -140,13 +156,15 @@ int main(int argc, char **argv) while (1) { int c; + unsigned long ul; + char *slash; static struct option long_options[] = { { "unit-id", 1, 0, 'u' }, { "oml-ip", 1, 0, 'o' }, { "restart", 0, 0, 'r' }, }; - c = getopt_long(argc, argv, "u:o:r", long_options, + c = getopt_long(argc, argv, "u:o:rn:", long_options, &option_index); if (c == -1) @@ -162,6 +180,15 @@ int main(int argc, char **argv) case 'r': restart = 1; break; + case 'n': + slash = strchr(optarg, '/'); + if (!slash) + exit(2); + ul = strtoul(optarg, NULL, 16); + nv_flags = ul & 0xffff; + ul = strtoul(slash+1, NULL, 16); + nv_mask = ul & 0xffff; + break; } }; diff --git a/wireshark/abis_oml.patch b/wireshark/abis_oml.patch index e54868c43..4d13fa23e 100644 --- a/wireshark/abis_oml.patch +++ b/wireshark/abis_oml.patch @@ -1,20 +1,20 @@ Index: wireshark/epan/dissectors/Makefile.common =================================================================== ---- wireshark.orig/epan/dissectors/Makefile.common 2009-06-25 15:04:16.000000000 +0200 -+++ wireshark/epan/dissectors/Makefile.common 2009-06-29 13:30:06.000000000 +0200 -@@ -874,6 +874,7 @@ +--- wireshark.orig/epan/dissectors/Makefile.common 2009-07-03 22:20:16.000000000 +0200 ++++ wireshark/epan/dissectors/Makefile.common 2009-07-04 03:46:47.000000000 +0200 +@@ -926,6 +926,7 @@ + # Dissectors with warnings. # DIRTY_DISSECTOR_SRC = \ - packet-abis_ip.c \ -+ packet-abis_oml.c \ ++ packet-gsm_abis_oml.c \ + packet-isakmp.c \ packet-k12.c \ packet-nbd.c \ - packet-sccp.c \ -Index: wireshark/epan/dissectors/packet-abis_oml.c +Index: wireshark/epan/dissectors/packet-gsm_abis_oml.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ wireshark/epan/dissectors/packet-abis_oml.c 2009-07-01 17:39:35.000000000 +0200 -@@ -0,0 +1,1115 @@ ++++ wireshark/epan/dissectors/packet-gsm_abis_oml.c 2009-07-04 03:47:46.000000000 +0200 +@@ -0,0 +1,1241 @@ +/* packet-abis_oml.c + * Routines for packet dissection of GSM A-bis over IP (3GPP TS 12.21) + * Copyright 2009 by Harald Welte @@ -50,7 +50,7 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c +#include +#include + -+#include "packet-abis_oml.h" ++#include "packet-gsm_abis_oml.h" +#include "packet-gsm_a_common.h" + +/* initialize the protocol and registered fields */ @@ -91,6 +91,7 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c +static int hf_oml_ipa_tres_attr_len = -1; +static int hf_attr_ipa_test_res = -1; +static int hf_attr_ipa_tr_rxlev = -1; ++static int hf_attr_ipa_tr_b_rxlev = -1; +static int hf_attr_ipa_tr_arfcn = -1; +static int hf_attr_ipa_tr_f_qual = -1; +static int hf_attr_ipa_tr_f_err = -1; @@ -99,8 +100,19 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c +static int hf_attr_ipa_tr_framenr_offs = -1; +static int hf_attr_ipa_tr_bsic = -1; +static int hf_attr_ipa_tr_cell_id = -1; ++static int hf_attr_ipa_tr_si2 = -1; ++static int hf_attr_ipa_tr_si2bis = -1; ++static int hf_attr_ipa_tr_si2ter = -1; ++static int hf_attr_ipa_tr_chan_desc = -1; +static int hf_attr_ipa_rsl_ip = -1; +static int hf_attr_ipa_rsl_port = -1; ++static int hf_attr_ipa_prim_oml_ip = -1; ++static int hf_attr_ipa_prim_oml_port = -1; ++static int hf_attr_ipa_location_name = -1; ++static int hf_attr_ipa_unit_id = -1; ++static int hf_attr_ipa_unit_name = -1; ++static int hf_attr_ipa_nv_flags = -1; ++static int hf_attr_ipa_nv_mask = -1; + +/* initialize the subtree pointers */ +static int ett_oml = -1; @@ -528,36 +540,75 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c +static gint +ipacc_tr_ie_bcch(tvbuff_t *tvb, proto_tree *att_tree, int offset) +{ -+ guint16 binfo_type = tvb_get_ntohs(tvb, offset); -+ guint16 tmp = tvb_get_ntohs(tvb, offset+2); ++ guint16 binfo_type, tmp; ++ ++ binfo_type = tvb_get_ntohs(tvb, offset); ++ offset += 2; ++ ++ tmp = tvb_get_ntohs(tvb, offset); + + /* FIXME: there are still some bugs remaining here */ + proto_tree_add_item(att_tree, hf_attr_ipa_tr_arfcn, + tvb, offset, 2, TRUE); ++ + proto_tree_add_item(att_tree, hf_attr_ipa_tr_f_qual, + tvb, offset, 2, TRUE); + offset += 2; -+ proto_tree_add_item(att_tree, hf_attr_ipa_tr_rxlev, ++ ++ proto_tree_add_item(att_tree, hf_attr_ipa_tr_b_rxlev, + tvb, offset++, 1, TRUE); ++ + proto_tree_add_item(att_tree, hf_attr_ipa_tr_rxqual, + tvb, offset++, 1, TRUE); ++ + proto_tree_add_item(att_tree, hf_attr_ipa_tr_f_err, + tvb, offset, 2, TRUE); + offset += 2; ++ + proto_tree_add_item(att_tree, hf_attr_ipa_tr_frame_offs, + tvb, offset, 2, TRUE); + offset += 2; + proto_tree_add_item(att_tree, hf_attr_ipa_tr_framenr_offs, + tvb, offset, 4, TRUE); + offset += 4; ++ + proto_tree_add_item(att_tree, hf_attr_ipa_tr_bsic, + tvb, offset++, 1, TRUE); ++ + de_lai(tvb, att_tree, offset, 5, NULL, 0); + offset += 5; ++ + proto_tree_add_item(att_tree, hf_attr_ipa_tr_cell_id, + tvb, offset, 2, TRUE); + offset += 2; -+ /* FIXME: parse GSM 04.18 IE's */ ++ ++ if (binfo_type & 0x8000) { ++ /* System Information 2 */ ++ /* FIXME: Parse 04.18 Neighbour Cell Description */ ++ proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2, ++ tvb, offset, 16, TRUE); ++ offset += 16; ++ } ++ if (binfo_type & 0x0001) { ++ /* System Information 2bis */ ++ /* FIXME: Parse 04.18 Neighbour Cell Description */ ++ proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2bis, ++ tvb, offset, 16, TRUE); ++ offset += 16; ++ } ++ if (binfo_type & 0x0002) { ++ /* System Information 2ter */ ++ /* FIXME: Parse 04.18 Neighbour Cell Description */ ++ proto_tree_add_item(att_tree, hf_attr_ipa_tr_si2ter, ++ tvb, offset, 16, TRUE); ++ offset += 16; ++ } ++ if (binfo_type & 0x0004) { ++ /* FIXME: Parse 04.18 Cell Channel Description */ ++ proto_tree_add_item(att_tree, hf_attr_ipa_tr_chan_desc, ++ tvb, offset, 16, TRUE); ++ offset += 16; ++ } + + return offset; +} @@ -779,14 +830,38 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + offset, len, TRUE); + break; + case NM_ATT_IPACC_LOCATION: ++ proto_tree_add_item(att_tree, hf_attr_ipa_location_name, ++ tvb, offset, len, TRUE); + break; + case NM_ATT_IPACC_UNIT_ID: ++ proto_tree_add_item(att_tree, hf_attr_ipa_unit_id, ++ tvb, offset, len, TRUE); + break; + case NM_ATT_IPACC_UNIT_NAME: ++ proto_tree_add_item(att_tree, hf_attr_ipa_unit_name, ++ tvb, offset, len, TRUE); + break; + case NM_ATT_IPACC_PRIM_OML_IP: ++ proto_tree_add_item(att_tree, hf_attr_ipa_prim_oml_ip, ++ tvb, offset+1, 4, TRUE); ++ proto_tree_add_item(att_tree, hf_attr_ipa_prim_oml_port, ++ tvb, offset+1+4, 2, TRUE); + break; + case NM_ATT_IPACC_SEC_OML_IP: ++ /* FIXME */ ++ break; ++ case NM_ATT_IPACC_NV_FLAGS: ++ { ++ guint flags, mask; ++ flags = tvb_get_guint8(tvb, offset); ++ mask = tvb_get_guint8(tvb, offset+1); ++ flags |= tvb_get_guint8(tvb, offset+2) << 8; ++ mask |= tvb_get_guint8(tvb, offset+3) << 8; ++ proto_tree_add_uint(att_tree, hf_attr_ipa_nv_flags, ++ tvb, offset, 3, flags); ++ proto_tree_add_uint(att_tree, hf_attr_ipa_nv_mask, ++ tvb, offset+1, 3, mask); ++ } + break; + default: + proto_tree_add_item(att_tree, hf_oml_fom_attr_val, tvb, @@ -897,62 +972,62 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + { &hf_oml_msg_disc, + { "Message Discriminator", "oml.msg_dsc", + FT_UINT8, BASE_HEX, VALS(oml_msg_disc_vals), 0, -+ "Message Discriminator", HFILL } ++ "GSM 12.21 Message Discriminator", HFILL } + }, + { &hf_oml_placement, + { "Placement Indicator", "oml.placement", + FT_UINT8, BASE_HEX, VALS(oml_placement_vals), 0, -+ "Placement Indicator", HFILL } ++ "GSM 12.21 Placement Indicator", HFILL } + }, + { &hf_oml_sequence, + { "Sequence Number", "oml.sequence", + FT_UINT8, BASE_HEX, NULL, 0, -+ "Sequence Number", HFILL } ++ "Sequence Number (if multi-part msg)", HFILL } + }, + { &hf_oml_length, + { "Length Indicator", "oml.length", + FT_UINT8, BASE_DEC, NULL, 0, -+ "Length Indicator", HFILL } ++ "Total length of payload", HFILL } + }, + { &hf_oml_fom_msgtype, + { "FOM Message Type", "oml.fom.msg_type", + FT_UINT8, BASE_HEX, VALS(oml_fom_msgtype_vals), 0, -+ "FOM Message Type", HFILL } ++ NULL, HFILL } + }, + { &hf_oml_fom_objclass, + { "FOM Object Class", "oml.fom.obj_class", + FT_UINT8, BASE_HEX, VALS(oml_fom_objclass_vals), 0, -+ "FOM Object Class", HFILL } ++ NULL, HFILL } + }, + { &hf_oml_fom_inst_bts, + { "FOM Object Instance BTS", "oml.fom.obj_inst.bts", + FT_UINT8, BASE_DEC, NULL, 0, -+ "FOM Object Instance TRX", HFILL } ++ NULL, HFILL } + }, + { &hf_oml_fom_inst_trx, + { "FOM Object Instance TRX", "oml.fom.obj_inst.trx", + FT_UINT8, BASE_DEC, NULL, 0, -+ "FOM Object Instance TRX", HFILL } ++ NULL, HFILL } + }, + { &hf_oml_fom_inst_ts, + { "FOM Object Instance TS", "oml.fom.obj_inst.ts", + FT_UINT8, BASE_DEC, NULL, 0, -+ "FOM Object Instance TS", HFILL } ++ NULL, HFILL } + }, + { &hf_oml_fom_attr_tag, + { "FOM Attribute ID", "oml.fom.attr_id", + FT_UINT8, BASE_HEX, VALS(oml_fom_attr_vals), 0, -+ "FOM Attribute ID", HFILL } ++ NULL, HFILL } + }, + { &hf_oml_fom_attr_len, + { "FOM Attribute Length", "oml.fom.attr_len", + FT_UINT16, BASE_DEC, NULL, 0, -+ "FOM Attribute Length", HFILL } ++ NULL, HFILL } + }, + { &hf_oml_fom_attr_val, + { "FOM Attribute Value", "oml.fom.attr_val", + FT_BYTES, BASE_HEX, NULL, 0, -+ "FOM Attribute Value", HFILL } ++ NULL, HFILL } + }, + + @@ -961,27 +1036,27 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + { &hf_attr_adm_state, + { "Administrative State", "oml.fom.attr.adm_state", + FT_UINT8, BASE_HEX, VALS(oml_adm_state_vals), 0, -+ "Administrative State", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_oper_state, + { "Operational State", "oml.fom.attr.oper_state", + FT_UINT8, BASE_HEX, VALS(oml_oper_state_vals), 0, -+ "Operational State", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_avail_state, + { "Availability Status", "oml.fom.attr.avail_state", + FT_UINT8, BASE_HEX, VALS(oml_avail_state_vals), 0, -+ "Availability Status", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_event_type, + { "Event Type", "oml.fom.attr.event_type", + FT_UINT8, BASE_HEX, VALS(oml_event_type_vals), 0, -+ "Event Type", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_severity, + { "Severity", "oml.fom.attr.severity", + FT_UINT8, BASE_HEX, VALS(oml_severity_vals), 0, -+ "Severity", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_bcch_arfcn, + { "BCCH ARFCN", "oml.fom.attr.bcch_arfcn", @@ -996,7 +1071,7 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + { &hf_attr_test_no, + { "Test Number", "oml.fom.attr.test_no", + FT_UINT8, BASE_HEX, VALS(oml_test_no_vals), 0, -+ "Test Number", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_tsc, + { "TSC", "oml.fom.attr.tsc", @@ -1006,22 +1081,22 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + { &hf_attr_tei, + { "TEI", "oml.fom.attr.tei", + FT_UINT8, BASE_DEC, NULL, 0, -+ "TEI", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_ach_btsp, -+ { "BTS Port", "oml.fom.attr.abis_ch.bts_port", ++ { "BTS E1 Port", "oml.fom.attr.abis_ch.bts_port", + FT_UINT8, BASE_DEC, NULL, 0, -+ "BTS Port", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_ach_tslot, -+ { "Timeslot", "oml.fom.attr.abis_ch.timeslot", ++ { "E1 Timeslot", "oml.fom.attr.abis_ch.timeslot", + FT_UINT8, BASE_DEC, NULL, 0, -+ "Time Slot", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_ach_sslot, -+ { "Subslot", "oml.fom.attr.abis_ch.subslot", ++ { "E1 Subslot", "oml.fom.attr.abis_ch.subslot", + FT_UINT8, BASE_DEC, NULL, 0, -+ "Subslot", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_gsm_time, + { "GSM Time", "oml.fom.attr.gsm_time", @@ -1031,60 +1106,59 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + { &hf_attr_chan_comb, + { "Channel Combination", "oml.fom.attr.chan_comb", + FT_UINT8, BASE_HEX, VALS(oml_chan_comb_vals), 0, -+ "Channel Combination", HFILL } ++ NULL, HFILL } + }, + /* IP Access */ + { &hf_oml_ipa_tres_attr_tag, + { "IPA Test Result Embedded IE", + "oml.fom.testrep.ipa_tag", + FT_UINT8, BASE_HEX, VALS(ipacc_testres_ie_vals), 0, -+ "IPA Test Result Embedded IE", HFILL }, ++ "Information Element embedded into the Test Result " ++ "of ip.access BTS", HFILL }, + }, + { &hf_oml_ipa_tres_attr_len, + { "IPA Test Result Embedded IE Length", + "oml.fom.testrep.ipa_len", + FT_UINT16, BASE_DEC, NULL, 0, -+ "IPA Test Result Embedded IE Length", HFILL } ++ "Length of ip.access Test Result Embedded IE", HFILL } + }, + { &hf_attr_ipa_test_res, + { "IPA Test Result", "oml.fom.testrep.result", + FT_UINT8, BASE_DEC, VALS(ipacc_test_res_vals), 0, -+ "IPA Test Result", HFILL } ++ NULL, HFILL } + }, + { &hf_attr_ipa_tr_rxlev, + { "Rx Level", "oml.fom.testrep.ipa_rxlev", -+ FT_UINT16, BASE_DEC, NULL, 0xfc00, -+ "Rx Level", HFILL } ++ FT_UINT16, BASE_DEC, NULL, 0xfc00, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_tr_b_rxlev, ++ { "Rx Level", "oml.fom.testrep.ipa_rxlev_b", ++ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_attr_ipa_tr_arfcn, + { "ARFCN", "oml.fom.testrep.ipa_arfcn", -+ FT_UINT16, BASE_DEC, NULL, 0x03ff, -+ "ARFCN", HFILL } ++ FT_UINT16, BASE_DEC, NULL, 0x03ff, "ARFCN", HFILL } + }, + { &hf_attr_ipa_tr_f_qual, + { "Frequency Quality", "oml.fom.testrep.ipa.freq_qual", -+ FT_UINT8, BASE_DEC, NULL, 0xfc, -+ "Frequency Quality", HFILL } ++ FT_UINT8, BASE_DEC, NULL, 0xfc, NULL, HFILL } + }, + { &hf_attr_ipa_tr_f_err, + { "Frequency Error", "oml.fom.testrep.ipa.freq_err", -+ FT_UINT16, BASE_DEC, NULL, 0, -+ "Frequency Error", HFILL } ++ FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_attr_ipa_tr_rxqual, + { "Rx Quality", "oml.fom.testrep.ipa.rx_qual", -+ FT_UINT8, BASE_DEC, NULL, 0x7, -+ "Rx Quality", HFILL } ++ FT_UINT8, BASE_DEC, NULL, 0x7, NULL, HFILL } + }, + { &hf_attr_ipa_tr_frame_offs, + { "Frame Offset", "oml.fom.testrep.ipa.frame_offset", -+ FT_UINT16, BASE_DEC, NULL, 0, -+ "Frame Offset", HFILL } ++ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_attr_ipa_tr_framenr_offs, -+ { "Frame Number Offset", "oml.fom.testrep.ipa.framenr_offset", -+ FT_UINT32, BASE_DEC, NULL, 0, -+ "Frame Number Offset", HFILL } ++ { "Frame Number Offset", ++ "oml.fom.testrep.ipa.framenr_offset", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_attr_ipa_tr_bsic, + { "BSIC", "oml.fom.testrep.ipa.bsic", @@ -1093,18 +1167,70 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + }, + { &hf_attr_ipa_tr_cell_id, + { "Cell ID", "oml.fom.testrep.ipa.cell_id", -+ FT_UINT16, BASE_HEX, NULL, 0, -+ "Cell ID", HFILL } ++ FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_attr_ipa_rsl_ip, + { "BSC RSL IP Address", "oml.fom.attr.ipa.rsl_ip", + FT_IPv4, BASE_NONE, NULL, 0, -+ "BSC RSL IP Address", HFILL } ++ "IP Address to which the BTS establishes " ++ "the RSL link", HFILL } + }, + { &hf_attr_ipa_rsl_port, + { "BSC RSL TCP Port", "oml.fom.attr.ipa.rsl_port", + FT_UINT16, BASE_DEC, NULL, 0, -+ "BSC RSL TCP Port", HFILL } ++ "Port number to which the BST establishes " ++ "the RSL link", HFILL } ++ }, ++ { &hf_attr_ipa_prim_oml_ip, ++ { "Primary OML IP Address", ++ "oml.fom.attr.ipa.prim_oml_ip", ++ FT_IPv4, BASE_NONE, NULL, 0, ++ "IP Address of the BSC for the primary OML link", ++ HFILL } ++ }, ++ { &hf_attr_ipa_prim_oml_port, ++ { "Primary OML TCP Port", ++ "oml.fom.attr.ipa.prim_oml_port", ++ FT_UINT16, BASE_DEC, NULL, 0, ++ "TCP Port of the BSC for the primarly OML link", ++ HFILL } ++ }, ++ { &hf_attr_ipa_location_name, ++ { "Location Name", "oml.fom.attr.ipa.loc_name", ++ FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_unit_name, ++ { "Unit Name", "oml.fom.attr.ipa.unit_name", ++ FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_unit_id, ++ { "Unit ID", "oml.fom.attr.ipa.unit_id", ++ FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_nv_flags, ++ { "NVRAM Config Flags", "oml.fom.attr.ipa.nv_flags", ++ FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_nv_mask, ++ { "NVRAM Config Mask", "oml.fom.attr.ipa.nv_mask", ++ FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_tr_si2, ++ { "System Information 2", "oml.fom.attr.ipa.si2", ++ FT_BYTES, BASE_HEX, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_tr_si2bis, ++ { "System Information 2bis", "oml.fom.attr.ipa.si2bis", ++ FT_BYTES, BASE_HEX, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_tr_si2ter, ++ { "System Information 2ter", "oml.fom.attr.ipa.si2ter", ++ FT_BYTES, BASE_HEX, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_attr_ipa_tr_chan_desc, ++ { "Cell Channel Description", ++ "oml.fom.attr.ipa.chan_desc", ++ FT_BYTES, BASE_HEX, NULL, 0, NULL, HFILL } + }, + }; + static gint *ett[] = { @@ -1130,11 +1256,11 @@ Index: wireshark/epan/dissectors/packet-abis_oml.c + + abis_oml_handle = find_dissector("abis_oml"); +} -Index: wireshark/epan/dissectors/packet-abis_oml.h +Index: wireshark/epan/dissectors/packet-gsm_abis_oml.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ wireshark/epan/dissectors/packet-abis_oml.h 2009-07-01 11:27:15.000000000 +0200 -@@ -0,0 +1,714 @@ ++++ wireshark/epan/dissectors/packet-gsm_abis_oml.h 2009-07-04 03:46:47.000000000 +0200 +@@ -0,0 +1,726 @@ +/* GSM Network Management messages on the A-bis interface + * 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0 */ + @@ -1497,6 +1623,7 @@ Index: wireshark/epan/dissectors/packet-abis_oml.h + NM_ATT_IPACC_RSL_BSC_PORT = 0x81, + NM_ATT_IPACC_NV_FLAGS = 0x86, + NM_ATT_IPACC_FREQ_CTRL = 0x87, ++ NM_ATT_IPACC_SEC_OML_CFG = 0x89, + NM_ATT_IPACC_IP_IF_CFG = 0x8a, /* IP interface */ + NM_ATT_IPACC_IP_GW_CFG = 0x8b, /* IP gateway */ + NM_ATT_IPACC_IN_SERV_TIME = 0x8c, @@ -1840,8 +1967,19 @@ Index: wireshark/epan/dissectors/packet-abis_oml.h + /* ip.access specifics */ + [NM_ATT_IPACC_RSL_BSC_IP] = { TLV_TYPE_FIXED, 4 }, + [NM_ATT_IPACC_RSL_BSC_PORT] = { TLV_TYPE_FIXED, 2 }, -+ [NM_ATT_IPACC_PRIM_OML_IP] = { TLV_TYPE_FIXED, 6 }, -+ [0x95] = { TLV_TYPE_FIXED, 2 }, ++ [NM_ATT_IPACC_PRIM_OML_IP] = { TLV_TYPE_TL16V }, ++ [NM_ATT_IPACC_NV_FLAGS] = { TLV_TYPE_TL16V }, ++ [NM_ATT_IPACC_FREQ_CTRL] = { TLV_TYPE_FIXED, 2 }, ++ [NM_ATT_IPACC_SEC_OML_IP] = { TLV_TYPE_TL16V }, // wrong name ++ [NM_ATT_IPACC_SEC_OML_CFG] = { TLV_TYPE_FIXED, 6 }, ++ [NM_ATT_IPACC_IP_IF_CFG] = { TLV_TYPE_FIXED, 8 }, ++ [NM_ATT_IPACC_IP_GW_CFG] = { TLV_TYPE_FIXED, 12 }, ++ [NM_ATT_IPACC_LOCATION] = { TLV_TYPE_TL16V }, ++ [NM_ATT_IPACC_UNIT_ID] = { TLV_TYPE_TL16V }, ++ [NM_ATT_IPACC_UNIT_NAME] = { TLV_TYPE_TL16V }, ++ [NM_ATT_IPACC_SNMP_CFG] = { TLV_TYPE_TL16V }, ++ [NM_ATT_IPACC_ALM_THRESH_LIST]= { TLV_TYPE_TL16V }, ++ //[0x95] = { TLV_TYPE_FIXED, 2 }, + [0x9b] = { TLV_TYPE_TL16V }, + [0x85] = { TLV_TYPE_TV }, + diff --git a/wireshark/abisip.patch b/wireshark/abisip.patch index 97f203a54..11ab59779 100644 --- a/wireshark/abisip.patch +++ b/wireshark/abisip.patch @@ -1,19 +1,19 @@ Index: epan/dissectors/Makefile.common =================================================================== ---- epan/dissectors/Makefile.common.orig 2009-02-28 15:39:56.000000000 +0100 -+++ epan/dissectors/Makefile.common 2009-06-25 15:04:16.000000000 +0200 -@@ -873,6 +873,7 @@ - # Dissectors with warnings. - # - DIRTY_DISSECTOR_SRC = \ -+ packet-abis_ip.c \ - packet-k12.c \ - packet-nbd.c \ - packet-sccp.c \ +--- epan/dissectors/Makefile.common.orig 2009-07-03 22:19:54.000000000 +0200 ++++ epan/dissectors/Makefile.common 2009-07-03 22:20:16.000000000 +0200 +@@ -471,6 +471,7 @@ + packet-gsm_a_gm.c \ + packet-gsm_a_rp.c \ + packet-gsm_a_rr.c \ ++ packet-gsm_abis_ip.c \ + packet-gsm_bsslap.c \ + packet-gsm_bssmap_le.c \ + packet-gsm_sms.c \ Index: epan/dissectors/packet-rsl.c =================================================================== ---- epan/dissectors/packet-rsl.c.orig 2009-02-28 15:39:51.000000000 +0100 -+++ epan/dissectors/packet-rsl.c 2009-02-28 15:39:56.000000000 +0100 +--- epan/dissectors/packet-rsl.c.orig 2009-07-03 22:19:54.000000000 +0200 ++++ epan/dissectors/packet-rsl.c 2009-07-03 22:20:16.000000000 +0200 @@ -3950,6 +3950,7 @@ proto_register_field_array(proto_rsl, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); @@ -22,12 +22,12 @@ Index: epan/dissectors/packet-rsl.c } -Index: epan/dissectors/packet-abis_ip.c +Index: epan/dissectors/packet-gsm_abis_ip.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ epan/dissectors/packet-abis_ip.c 2009-06-25 15:04:42.000000000 +0200 ++++ epan/dissectors/packet-gsm_abis_ip.c 2009-07-03 22:20:16.000000000 +0200 @@ -0,0 +1,279 @@ -+/* packet-abis_ip.c ++/* packet-gsm_abis_ip.c + * Routines for packet dissection of ip.access A-bis over IP + * Copyright 2009 by Harald Welte + * @@ -122,7 +122,7 @@ Index: epan/dissectors/packet-abis_ip.c +}; + +static gint -+dissect_ipa_attr(tvbuff_t *tvb, int base_offs, packet_info *pinfo, proto_tree *tree) ++dissect_ipa_attr(tvbuff_t *tvb, int base_offs, proto_tree *tree) +{ + guint8 len, tag, attr_type; + @@ -173,7 +173,7 @@ Index: epan/dissectors/packet-abis_ip.c + switch (msg_type) { + case 4: + case 5: -+ dissect_ipa_attr(tvb, 1, pinfo, ipaccess_tree); ++ dissect_ipa_attr(tvb, 1, ipaccess_tree); + break; + } + } @@ -242,7 +242,7 @@ Index: epan/dissectors/packet-abis_ip.c + } +} + -+void proto_register_abisip(void) ++void proto_register_abis_ip(void) +{ + static hf_register_info hf[] = { + {&hf_abisip_data_len, @@ -260,7 +260,7 @@ Index: epan/dissectors/packet-abis_ip.c + {&hf_ipaccess_msgtype, + {"MessageType", "ipaccess.msg_type", + FT_UINT8, BASE_HEX, VALS(ipaccess_msgtype_vals), 0x0, -+ "type of ip.access messsage", HFILL} ++ "Type of ip.access messsage", HFILL} + }, + {&hf_ipaccess_attr_tag, + {"Tag", "ipaccess.attr_tag", @@ -280,10 +280,10 @@ Index: epan/dissectors/packet-abis_ip.c + }; + + proto_abisip = -+ proto_register_protocol("A-bis/IP protocol as used by ip.access", -+ "A-bis/IP", "abis_ip"); ++ proto_register_protocol("GSM A-bis/IP protocol as used by ip.access", ++ "GSM A-bis/IP", "gsm_abis_ip"); + proto_ipaccess = -+ proto_register_protocol("A-bis/IP ip.access sub-protocol", ++ proto_register_protocol("GSM A-bis/IP ip.access CCM sub-protocol", + "IPA", "ipaccess"); + + proto_register_field_array(proto_abisip, hf, array_length(hf)); @@ -293,7 +293,7 @@ Index: epan/dissectors/packet-abis_ip.c + register_dissector("gsm_abis_ip", dissect_abisip, proto_abisip); +} + -+void proto_reg_handoff_abisip(void) ++void proto_reg_handoff_gsm_abis_ip(void) +{ + dissector_handle_t abisip_handle; + diff --git a/wireshark/rsl-ipaccess.patch b/wireshark/rsl-ipaccess.patch index b893faac5..75de56193 100644 --- a/wireshark/rsl-ipaccess.patch +++ b/wireshark/rsl-ipaccess.patch @@ -1,14 +1,14 @@ Index: wireshark/epan/dissectors/packet-rsl.c =================================================================== ---- wireshark.orig/epan/dissectors/packet-rsl.c 2009-02-28 15:39:56.000000000 +0100 -+++ wireshark/epan/dissectors/packet-rsl.c 2009-06-26 15:51:00.000000000 +0200 +--- wireshark.orig/epan/dissectors/packet-rsl.c 2009-07-03 22:20:16.000000000 +0200 ++++ wireshark/epan/dissectors/packet-rsl.c 2009-07-04 04:06:04.000000000 +0200 @@ -2,6 +2,7 @@ * Routines for Radio Signalling Link (RSL) dissection. * * Copyright 2007, Anders Broman + * Copyright 2009, Harald Welte * - * $Id: packet-rsl.c 27065 2008-12-20 00:09:02Z wmeier $ + * $Id: packet-rsl.c 28770 2009-06-18 21:30:42Z stig $ * @@ -44,6 +45,8 @@ #include @@ -583,7 +583,7 @@ Index: wireshark/epan/dissectors/packet-rsl.c + src_addr.len = 4; + src_addr.data = (guint8 *)&local_addr; + rtp_add_address(pinfo, &src_addr, local_port, 0, -+ "GSM A-bis/IP", pinfo->fd->num, 0); ++ "GSM A-bis/IP", pinfo->fd->num, 0, NULL); + rtcp_add_address(pinfo, &src_addr, local_port+1, 0, + "GSM A-bis/IP", pinfo->fd->num); + break; @@ -618,7 +618,7 @@ Index: wireshark/epan/dissectors/packet-rsl.c @@ -3883,6 +4399,46 @@ FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03, - "eMLPP Priority", HFILL } + NULL, HFILL } }, + { &hf_rsl_f4, + { "unknown F4 IE", "rsl.ipacc.f4",