diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-11 16:33:52 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-11 16:33:52 +0100 |
commit | 9b5f1d7b4399932ac83c0f1f14b192a25db8cf53 (patch) | |
tree | 41a1c6a6c06bd198769a268d0d0784120d99aa16 /wireshark/0004-rsl-ipaccess.patch | |
parent | 3b0fd2b0b9e689fd96eaf9b5d58d9c655d050a89 (diff) |
wireshark: rebase the patches, rename and add a README
Add a short README mentioning the svn version they apply
to, how to rebase them in the future, and what they do.
The renaming is done to add a hint on in which order to
apply them. The abis_oml patch has been updated to some
value_string changes in epan, all patches now add the new
files to the CMakeLists.txt of epan as well.
Diffstat (limited to 'wireshark/0004-rsl-ipaccess.patch')
-rw-r--r-- | wireshark/0004-rsl-ipaccess.patch | 665 |
1 files changed, 665 insertions, 0 deletions
diff --git a/wireshark/0004-rsl-ipaccess.patch b/wireshark/0004-rsl-ipaccess.patch new file mode 100644 index 000000000..6f2b8c132 --- /dev/null +++ b/wireshark/0004-rsl-ipaccess.patch @@ -0,0 +1,665 @@ +From 54882db58b6ec12da6b80071e0ac2344d42df24c Mon Sep 17 00:00:00 2001 +From: Holger Hans Peter Freyther <zecke@selfish.org> +Date: Tue, 11 Jan 2011 16:22:33 +0100 +Subject: [PATCH 4/4] rsl-ipaccess + +Add vendor specific commands for RSL. +--- + epan/dissectors/packet-rsl.c | 522 +++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 515 insertions(+), 7 deletions(-) + +diff --git a/epan/dissectors/packet-rsl.c b/epan/dissectors/packet-rsl.c +index bf83f6f..d858e1a 100644 +--- a/epan/dissectors/packet-rsl.c ++++ b/epan/dissectors/packet-rsl.c +@@ -2,6 +2,7 @@ + * Routines for Radio Signalling Link (RSL) dissection. + * + * Copyright 2007, Anders Broman <anders.broman@ericsson.com> ++ * Copyright 2009, Harald Welte <laforge@gnumonks.org> + * + * $Id$ + * +@@ -42,6 +43,8 @@ + #include <epan/lapd_sapi.h> + + #include "packet-gsm_a_common.h" ++#include "packet-rtp.h" ++#include "packet-rtcp.h" + + /* Initialize the protocol and registered fields */ + static int proto_rsl = -1; +@@ -116,6 +119,24 @@ static int hf_rsl_emlpp_prio = -1; + static int hf_rsl_rtd = -1; + static int hf_rsl_delay_ind = -1; + static int hf_rsl_tfo = -1; ++static int hf_rsl_speech_mode_s = -1; ++static int hf_rsl_speech_mode_m = -1; ++static int hf_rsl_conn_stat = -1; ++static int hf_rsl_conn_id = -1; ++static int hf_rsl_rtp_payload = -1; ++static int hf_rsl_rtp_csd_fmt_d = -1; ++static int hf_rsl_rtp_csd_fmt_ir = -1; ++static int hf_rsl_local_port = -1; ++static int hf_rsl_remote_port = -1; ++static int hf_rsl_local_ip = -1; ++static int hf_rsl_remote_ip = -1; ++static int hf_rsl_cstat_tx_pkts = -1; ++static int hf_rsl_cstat_tx_octs = -1; ++static int hf_rsl_cstat_rx_pkts = -1; ++static int hf_rsl_cstat_rx_octs = -1; ++static int hf_rsl_cstat_lost_pkts = -1; ++static int hf_rsl_cstat_ia_jitter = -1; ++static int hf_rsl_cstat_avg_tx_dly = -1; + + /* Initialize the subtree pointers */ + static int ett_rsl = -1; +@@ -173,6 +194,15 @@ static int ett_ie_cause = -1; + static int ett_ie_meas_res_no = -1; + static int ett_ie_message_id = -1; + static int ett_ie_sys_info_type = -1; ++static int ett_ie_speech_mode = -1; ++static int ett_ie_conn_stat = -1; ++static int ett_ie_conn_id = -1; ++static int ett_ie_remote_ip = -1; ++static int ett_ie_remote_port = -1; ++static int ett_ie_local_port = -1; ++static int ett_ie_local_ip = -1; ++static int ett_ie_rtp_payload = -1; ++ + + static proto_tree *top_tree; + static dissector_handle_t gsm_a_ccch_handle; +@@ -208,8 +238,11 @@ static const value_string rsl_msg_disc_vals[] = { + { 0x06, "Common Channel Management messages" }, + { 0x08, "TRX Management messages" }, + { 0x16, "Location Services messages" }, ++ { 0x3f, "ip.access Vendor Specific messages" }, + { 0, NULL } + }; ++#define RSL_MSGDISC_IPACCESS 0x3f ++ + /* + * 9.2 MESSAGE TYPE + */ +@@ -276,6 +309,49 @@ static const value_string rsl_msg_disc_vals[] = { + /* 0 1 - - - - - - Location Services messages: */ + #define RSL_MSG_LOC_INF 65 /* 8.7.1 */ + ++/* Vendor-Specific messages of ip.access nanoBTS. There is no public documentation ++ * about those extensions, all information in this dissector is based on lawful ++ * protocol reverse enginering by Harald Welte <laforge@gnumonks.org> */ ++#define RSL_MSG_TYPE_IPAC_MEAS_PP_DEF 0x60 ++#define RSL_MSG_TYPE_IPAC_HO_CAND_INQ 0x61 ++#define RSL_MSG_TYPE_IPAC_HO_CAND_RESP 0x62 ++ ++#define RSL_MSG_TYPE_IPAC_PDCH_ACT 0x48 ++#define RSL_MSG_TYPE_IPAC_PDCH_ACT_ACK 0x49 ++#define RSL_MSG_TYPE_IPAC_PDCH_ACT_NACK 0x4a ++#define RSL_MSG_TYPE_IPAC_PDCH_DEACT 0x4b ++#define RSL_MSG_TYPE_IPAC_PDCH_DEACT_ACK 0x4c ++#define RSL_MSG_TYPE_IPAC_PDCH_DEACT_NACK 0x4d ++ ++#define RSL_MSG_TYPE_IPAC_CRCX 0x70 ++#define RSL_MSG_TYPE_IPAC_CRCX_ACK 0x71 ++#define RSL_MSG_TYPE_IPAC_CRCX_NACK 0x72 ++#define RSL_MSG_TYPE_IPAC_MDCX 0x73 ++#define RSL_MSG_TYPE_IPAC_MDCX_ACK 0x74 ++#define RSL_MSG_TYPE_IPAC_MDCX_NACK 0x75 ++#define RSL_MSG_TYPE_IPAC_DLCX_IND 0x76 ++#define RSL_MSG_TYPE_IPAC_DLCX 0x77 ++#define RSL_MSG_TYPE_IPAC_DLCX_ACK 0x78 ++#define RSL_MSG_TYPE_IPAC_DLCX_NACK 0x79 ++ ++#define RSL_IE_IPAC_SRTP_CONFIG 0xe0 ++#define RSL_IE_IPAC_PROXY_UDP 0xe1 ++#define RSL_IE_IPAC_BSCMPL_TOUT 0xe2 ++#define RSL_IE_IPAC_REMOTE_IP 0xf0 ++#define RSL_IE_IPAC_REMOTE_PORT 0xf1 ++#define RSL_IE_IPAC_RTP_PAYLOAD 0xf2 ++#define RSL_IE_IPAC_LOCAL_PORT 0xf3 ++#define RSL_IE_IPAC_SPEECH_MODE 0xf4 ++#define RSL_IE_IPAC_LOCAL_IP 0xf5 ++#define RSL_IE_IPAC_CONN_STAT 0xf6 ++#define RSL_IE_IPAC_HO_C_PARMS 0xf7 ++#define RSL_IE_IPAC_CONN_ID 0xf8 ++#define RSL_IE_IPAC_RTP_CSD_FMT 0xf9 ++#define RSL_IE_IPAC_RTP_JIT_BUF 0xfa ++#define RSL_IE_IPAC_RTP_COMPR 0xfb ++#define RSL_IE_IPAC_RTP_PAYLOAD2 0xfc ++#define RSL_IE_IPAC_RTP_MPLEX 0xfd ++#define RSL_IE_IPAC_RTP_MPLEX_ID 0xfe + + static const value_string rsl_msg_type_vals[] = { + /* 0 0 0 0 - - - - Radio Link Layer Management messages: */ +@@ -338,6 +414,26 @@ static const value_string rsl_msg_type_vals[] = { + { 0x3f, "TFO MODification REQuest" }, /* 8.4.31 */ + /* 0 1 - - - - - - Location Services messages: */ + { 0x41, "Location Information" }, /* 8.7.1 */ ++ /* ip.access */ ++ { 0x48, "ip.access PDCH ACTIVATION" }, ++ { 0x49, "ip.access PDCH ACTIVATION ACK" }, ++ { 0x4a, "ip.access PDCH ACTIVATION NACK" }, ++ { 0x4b, "ip.access PDCH DEACTIVATION" }, ++ { 0x4c, "ip.access PDCH DEACTIVATION ACK" }, ++ { 0x4d, "ip.access PDCH DEACTIVATION NACK" }, ++ { 0x60, "ip.access MEASurement PREPROCessing DeFauLT" }, ++ { 0x61, "ip.access HANDOover CANDidate ENQuiry" }, ++ { 0x62, "ip.access HANDOover CANDidate RESPonse" }, ++ { 0x70, "ip.access CRCX" }, ++ { 0x71, "ip.access CRCX ACK" }, ++ { 0x72, "ip.access CRCX NACK" }, ++ { 0x73, "ip.access MDCX" }, ++ { 0x74, "ip.access MDCX ACK" }, ++ { 0x75, "ip.access MDCX NACK" }, ++ { 0x76, "ip.access DLCX INDication" }, ++ { 0x77, "ip.access DLCX" }, ++ { 0x78, "ip.access DLCX ACK" }, ++ { 0x79, "ip.access DLCX NACK" }, + { 0, NULL } + }; + +@@ -371,10 +467,10 @@ static const value_string rsl_msg_type_vals[] = { + #define RSL_IE_MESSAGE_ID 28 + + #define RSL_IE_SYS_INFO_TYPE 30 +- +- +- +- ++#define RSL_IE_MS_POWER_PARAM 31 ++#define RSL_IE_BS_POWER_PARAM 32 ++#define RSL_IE_PREPROC_PARAM 33 ++#define RSL_IE_PREPROC_MEAS 34 + #define RSL_IE_FULL_IMM_ASS_INF 35 + #define RSL_IE_SMSCB_INF 36 + #define RSL_IE_FULL_MS_TIMING_OFFSET 37 +@@ -477,6 +573,24 @@ static const value_string rsl_ie_type_vals[] = { + Not used + + */ ++ { 0xe0, "SRTP Configuration" }, ++ { 0xe1, "BSC Proxy UDP Port" }, ++ { 0xe2, "BSC Multiplex Timeout" }, ++ { 0xf0, "Remote IP Address" }, ++ { 0xf1, "Remote RTP Port" }, ++ { 0xf2, "RTP Payload Type" }, ++ { 0xf3, "Local RTP Port" }, ++ { 0xf4, "Speech Mode" }, ++ { 0xf5, "Local IP Address" }, ++ { 0xf6, "Connection Statistics" }, ++ { 0xf7, "Handover C Parameters" }, ++ { 0xf8, "Connection Identifier" }, ++ { 0xf9, "RTP CSD Format" }, ++ { 0xfa, "RTP Jitter Buffer" }, ++ { 0xfb, "RTP Compression" }, ++ { 0xfc, "RTP Payload Type 2" }, ++ { 0xfd, "RTP Multiplex" }, ++ { 0xfe, "RTP Multiplex Identifier" }, + { 0, NULL } + }; + +@@ -513,6 +627,96 @@ static const value_string rsl_ch_no_Cbits_vals[] = { + { 0, NULL } + }; + ++/* From openbsc/include/openbsc/tlv.h */ ++enum tlv_type { ++ TLV_TYPE_FIXED, ++ TLV_TYPE_T, ++ TLV_TYPE_TV, ++ TLV_TYPE_TLV, ++ TLV_TYPE_TL16V, ++}; ++ ++struct tlv_def { ++ enum tlv_type type; ++ u_int8_t fixed_len; ++}; ++ ++struct tlv_definition { ++ struct tlv_def def[0xff]; ++}; ++ ++static const struct tlv_definition rsl_att_tlvdef = { ++ .def = { ++ [RSL_IE_CH_NO] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_LINK_ID] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_ACT_TYPE] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_BS_POW] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_CH_ID] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_CH_MODE] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_ENC_INF] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_FRAME_NO] = { TLV_TYPE_FIXED, 2 }, ++ [RSL_IE_HO_REF] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_L1_INF] = { TLV_TYPE_FIXED, 2 }, ++ [RSL_IE_L3_INF] = { TLV_TYPE_TL16V, 0 }, ++ [RSL_IE_MS_ID] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_MS_POW] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_PAGING_GRP] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_PAGING_LOAD] = { TLV_TYPE_FIXED, 2 }, ++ [RSL_IE_PHY_CTX] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_ACCESS_DELAY] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_RACH_LOAD] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_REQ_REF] = { TLV_TYPE_FIXED, 3 }, ++ [RSL_IE_REL_MODE] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_RESOURCE_INF] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_RLM_CAUSE] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_STARTING_TIME] = { TLV_TYPE_FIXED, 2 }, ++ [RSL_IE_TIMING_ADV] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_UPLINK_MEAS] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_CAUSE] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_MEAS_RES_NO] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_MESSAGE_ID] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_SYS_INFO_TYPE] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_MS_POWER_PARAM] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_BS_POWER_PARAM] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_PREPROC_PARAM] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_PREPROC_MEAS] = { TLV_TYPE_TLV, 0 }, ++ //[RSL_IE_IMM_ASS_INFO] = { TLV_TYPE_TLV, 0 }, ++ //[RSL_IE_SMSCB_INFO] = { TLV_TYPE_FIXED, 23 }, ++ //[RSL_IE_MS_TIMING_OFFSET] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_ERR_MSG] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_FULL_BCCH_INF] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_CH_NEEDED] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_CB_CMD_TYPE] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_SMSCB_MESS] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_FULL_IMM_ASS_INF] = { TLV_TYPE_TLV, 0 }, ++ //[RSL_IE_SACCH_INFO] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_CBCH_LOAD_INF] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_SMSCB_CH_IND] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_GRP_CALL_REF] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_CH_DESC] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_NCH_DRX_INF] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_CMD_IND] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_EMLPP_PRIO] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_UIC] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_MAIN_CH_REF] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_MULTIRATE_CONF] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_MULTIRATE_CNTRL] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_SUP_CODEC_TYPES] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_CODEC_CONF] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_RTD] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_TFO_STATUS] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_LLP_APDU] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_IPAC_REMOTE_IP] = { TLV_TYPE_FIXED, 4 }, ++ [RSL_IE_IPAC_REMOTE_PORT] = { TLV_TYPE_FIXED, 2 }, ++ [RSL_IE_IPAC_LOCAL_IP] = { TLV_TYPE_FIXED, 4 }, ++ [RSL_IE_IPAC_CONN_STAT] = { TLV_TYPE_TLV, 0 }, ++ [RSL_IE_IPAC_LOCAL_PORT] = { TLV_TYPE_FIXED, 2 }, ++ [RSL_IE_IPAC_SPEECH_MODE] = { TLV_TYPE_TV, 0 }, ++ [RSL_IE_IPAC_CONN_ID] = { TLV_TYPE_FIXED, 2 }, ++ [RSL_IE_IPAC_RTP_PAYLOAD2] = { TLV_TYPE_TV, 0 }, ++ }, ++}; ++ + /* 9.3.1 Channel number 9.3.1 M TV 2 */ + static int + dissect_rsl_ie_ch_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory) +@@ -2045,7 +2249,6 @@ dissect_rsl_ie_err_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int + proto_item_set_len(ti, length+2); + + proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE); +- offset++; + + /* Received Message */ + offset = dissct_rsl_msg(tvb, pinfo, ie_tree, offset); +@@ -2910,12 +3113,184 @@ dissect_rsl_ie_tfo_transp_cont(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree + } + + static int ++dissct_rsl_ipaccess_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) ++{ ++ guint8 msg_type; ++ guint32 local_addr = 0; ++ guint16 local_port = 0; ++ address src_addr; ++ ++ msg_type = tvb_get_guint8(tvb, offset)&0x7f; ++ offset++; ++ ++#if 0 ++ switch (msg_type) { ++ case RSL_MSG_TYPE_IPAC_CRCX: ++ case RSL_MSG_TYPE_IPAC_CRCX_ACK: ++ case RSL_MSG_TYPE_IPAC_CRCX_NACK: ++ case RSL_MSG_TYPE_IPAC_MDCX: ++ case RSL_MSG_TYPE_IPAC_MDCX_ACK: ++ case RSL_MSG_TYPE_IPAC_MDCX_NACK: ++ case RSL_MSG_TYPE_IPAC_DLCX_IND: ++ case RSL_MSG_TYPE_IPAC_DLCX: ++ case RSL_MSG_TYPE_IPAC_DLCX_ACK: ++ case RSL_MSG_TYPE_IPAC_DLCX_NACK: ++ case RSL_MSG_TYPE_IPAC_PDCH_ACT: ++ case RSL_MSG_TYPE_IPAC_PDCH_ACT_ACK: ++ case RSL_MSG_TYPE_IPAC_PDCH_ACT_NACK: ++ case RSL_MSG_TYPE_IPAC_PDCH_DEACT: ++ case RSL_MSG_TYPE_IPAC_PDCH_DEACT_ACK: ++ case RSL_MSG_TYPE_IPAC_PDCH_DEACT_NACK: ++ /* Channel number 9.3.1 M TV 2 */ ++ offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE); ++ break; ++ } ++#endif ++ /* parse TLV attributes */ ++ while (tvb_reported_length_remaining(tvb, offset) != 0) { ++ guint8 tag; ++ unsigned int len, hlen, len_len; ++ const struct tlv_def *tdef; ++ proto_item *ti; ++ proto_tree *ie_tree; ++ ++ tag = tvb_get_guint8(tvb, offset); ++ tdef = &rsl_att_tlvdef.def[tag]; ++ ++ switch (tdef->type) { ++ case TLV_TYPE_FIXED: ++ hlen = 1; ++ len_len = 0; ++ len = tdef->fixed_len; ++ break; ++ case TLV_TYPE_T: ++ hlen = 1; ++ len_len = 0; ++ len = 0; ++ break; ++ case TLV_TYPE_TV: ++ hlen = 1; ++ len_len = 0; ++ len = 1; ++ break; ++ case TLV_TYPE_TLV: ++ hlen = 2; ++ len_len = 1; ++ len = tvb_get_guint8(tvb, offset+1); ++ break; ++ case TLV_TYPE_TL16V: ++ hlen = 3; ++ len_len = 2; ++ len = tvb_get_guint8(tvb, offset+1) << 8 | ++ tvb_get_guint8(tvb, offset+2); ++ break; ++ default: ++ hlen = len_len = len = 0; ++ DISSECTOR_ASSERT_NOT_REACHED(); ++ break; ++ } ++ ++ ti = proto_tree_add_item(tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); ++ ie_tree = proto_item_add_subtree(ti, ett_ie_local_port); ++ offset += hlen; ++ ++ switch (tag) { ++ case RSL_IE_CH_NO: ++ dissect_rsl_ie_ch_no(tvb, pinfo, ie_tree, offset, FALSE); ++ break; ++ case RSL_IE_FRAME_NO: ++ dissect_rsl_ie_frame_no(tvb, pinfo, ie_tree, offset, FALSE); ++ break; ++ case RSL_IE_MS_POW: ++ dissect_rsl_ie_ms_pow(tvb, pinfo, ie_tree, offset, FALSE); ++ break; ++ case RSL_IE_IPAC_REMOTE_IP: ++ proto_tree_add_item(ie_tree, hf_rsl_remote_ip, tvb, ++ offset, len, FALSE); ++ break; ++ case RSL_IE_IPAC_REMOTE_PORT: ++ proto_tree_add_item(ie_tree, hf_rsl_remote_port, tvb, ++ offset, len, FALSE); ++ break; ++ case RSL_IE_IPAC_LOCAL_IP: ++ proto_tree_add_item(ie_tree, hf_rsl_local_ip, tvb, ++ offset, len, FALSE); ++ local_addr = tvb_get_ipv4(tvb, offset); ++ break; ++ case RSL_IE_IPAC_LOCAL_PORT: ++ proto_tree_add_item(ie_tree, hf_rsl_local_port, tvb, ++ offset, len, FALSE); ++ local_port = tvb_get_ntohs(tvb, offset); ++ break; ++ case RSL_IE_IPAC_SPEECH_MODE: ++ proto_tree_add_item(ie_tree, hf_rsl_speech_mode_s, tvb, ++ offset, len, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_speech_mode_m, tvb, ++ offset, len, FALSE); ++ break; ++ case RSL_IE_IPAC_RTP_PAYLOAD: ++ case RSL_IE_IPAC_RTP_PAYLOAD2: ++ proto_tree_add_item(ie_tree, hf_rsl_rtp_payload, tvb, ++ offset, len, FALSE); ++ break; ++ case RSL_IE_IPAC_RTP_CSD_FMT: ++ proto_tree_add_item(ie_tree, hf_rsl_rtp_csd_fmt_d, tvb, ++ offset, len, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_rtp_csd_fmt_ir, tvb, ++ offset, len, FALSE); ++ break; ++ case RSL_IE_IPAC_CONN_ID: ++ proto_tree_add_item(ie_tree, hf_rsl_conn_id, tvb, ++ offset, len, FALSE); ++ break; ++ case RSL_IE_IPAC_CONN_STAT: ++ proto_tree_add_item(ie_tree, hf_rsl_cstat_tx_pkts, tvb, ++ offset, 4, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_cstat_tx_octs, tvb, ++ offset+4, 4, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_cstat_rx_pkts, tvb, ++ offset+8, 4, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_cstat_rx_octs, tvb, ++ offset+12, 4, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_cstat_lost_pkts, tvb, ++ offset+16, 4, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_cstat_ia_jitter, tvb, ++ offset+20, 4, FALSE); ++ proto_tree_add_item(ie_tree, hf_rsl_cstat_avg_tx_dly, tvb, ++ offset+24, 4, FALSE); ++ break; ++ } ++ offset += len; ++ } ++ ++ switch (msg_type) { ++ case RSL_MSG_TYPE_IPAC_CRCX_ACK: ++ /* Notify the RTP and RTCP dissectors about a new RTP stream */ ++ src_addr.type = AT_IPv4; ++ 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, NULL); ++ rtcp_add_address(pinfo, &src_addr, local_port+1, 0, ++ "GSM A-bis/IP", pinfo->fd->num); ++ break; ++ } ++ return offset; ++} ++ ++static int + dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) + { +- guint8 msg_type; ++ guint8 msg_disc, msg_type; + ++ msg_disc = tvb_get_guint8(tvb, offset++) >> 1; + msg_type = tvb_get_guint8(tvb,offset)&0x7f; + proto_tree_add_item(tree, hf_rsl_msg_type, tvb, offset, 1, FALSE); ++ ++ if (msg_disc == RSL_MSGDISC_IPACCESS) { ++ offset = dissct_rsl_ipaccess_msg(tvb, pinfo, tree, offset); ++ return offset; ++ } + offset++; + + switch (msg_type){ +@@ -3483,6 +3858,18 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) + /* LLP APDU 9.3.58 M LV 2-N */ + offset = dissect_rsl_ie_llp_apdu(tvb, pinfo, tree, offset, TRUE); + break; ++ /* the following messages are ip.access specific but sent without ++ * ip.access memssage discriminator */ ++ case RSL_MSG_TYPE_IPAC_MEAS_PP_DEF: ++ case RSL_MSG_TYPE_IPAC_HO_CAND_INQ: ++ case RSL_MSG_TYPE_IPAC_HO_CAND_RESP: ++ case RSL_MSG_TYPE_IPAC_PDCH_ACT: ++ case RSL_MSG_TYPE_IPAC_PDCH_ACT_ACK: ++ case RSL_MSG_TYPE_IPAC_PDCH_ACT_NACK: ++ case RSL_MSG_TYPE_IPAC_PDCH_DEACT: ++ case RSL_MSG_TYPE_IPAC_PDCH_DEACT_ACK: ++ case RSL_MSG_TYPE_IPAC_PDCH_DEACT_NACK: ++ offset = dissct_rsl_ipaccess_msg(tvb, pinfo, tree, offset-1); + default: + break; + } +@@ -3490,6 +3877,40 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) + return offset; + + } ++ ++static const value_string rsl_ipacc_spm_s_vals[] = { ++ { 0, "GSM FR codec (GSM type 1, FS)" }, ++ { 1, "GSM EFR codec (GSM type 2, FS)" }, ++ { 2, "GSM AMR/FR codec (GSM type 3, FS)" }, ++ { 3, "GSM HR codec (GSM type 1, HS)" }, ++ { 5, "GSM AMR/HR codec (GSM type 3, HS)" }, ++ { 0xf, "As specified by RTP Payload Type IE" }, ++ { 0, NULL } ++}; ++ ++static const value_string rsl_ipacc_spm_m_vals[] = { ++ { 0, "Send and Receive" }, ++ { 1, "Receive Only" }, ++ { 2, "Send Only" }, ++ { 0, NULL } ++}; ++ ++static const value_string rsl_ipacc_rtp_csd_fmt_d_vals[] = { ++ { 0, "External TRAU format" }, ++ { 1, "Non-TRAU Packed format" }, ++ { 2, "TRAU within the BTS" }, ++ { 3, "IWF-Free BTS-BTS Data" }, ++ { 0, NULL } ++}; ++ ++static const value_string rsl_ipacc_rtp_csd_fmt_ir_vals[] = { ++ { 0, "8kb/s" }, ++ { 1, "16kb/s" }, ++ { 2, "32kb/s" }, ++ { 3, "64kb/s" }, ++ { 0, NULL } ++}; ++ + static void + dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) + { +@@ -3517,7 +3938,6 @@ dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) + /* 9.1 Message discriminator */ + proto_tree_add_item(rsl_tree, hf_rsl_msg_dsc, tvb, offset, 1, FALSE); + proto_tree_add_item(rsl_tree, hf_rsl_T_bit, tvb, offset, 1, FALSE); +- offset++; + + offset = dissct_rsl_msg(tvb, pinfo, rsl_tree, offset); + +@@ -3892,6 +4312,86 @@ void proto_register_rsl(void) + FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03, + NULL, HFILL } + }, ++ { &hf_rsl_speech_mode_s, ++ { "ip.access Speech Mode S", "rsl.ipacc.speech_mode_s", ++ FT_UINT8, BASE_HEX, VALS(rsl_ipacc_spm_s_vals), ++ 0xf, NULL, HFILL } ++ }, ++ { &hf_rsl_speech_mode_m, ++ { "ip.access Speech Mode M", "rsl.ipacc.speech_mode_m", ++ FT_UINT8, BASE_HEX, VALS(rsl_ipacc_spm_m_vals), ++ 0xf0, NULL, HFILL } ++ }, ++ { &hf_rsl_conn_stat, ++ { "ip.access Connection Statistics","rsl.ipacc.conn_stat", ++ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } ++ }, ++ { &hf_rsl_conn_id, ++ { "ip.access Connection ID", "rsl.ipacc.conn_id", ++ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } ++ }, ++ { &hf_rsl_rtp_payload, ++ { "ip.access RTP Payload Type", "rsl.ipacc.rtp_payload", ++ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } ++ }, ++ { &hf_rsl_rtp_csd_fmt_d, ++ { "ip.access RTP CSD Format D", "rsl.ipacc.rtp_csd_fmt_d", ++ FT_UINT8, BASE_HEX, VALS(rsl_ipacc_rtp_csd_fmt_d_vals), ++ 0x0f, NULL, HFILL }, ++ }, ++ { &hf_rsl_rtp_csd_fmt_ir, ++ { "ip.access RTP CSD Format IR", "rsl.ipacc.rtp_csd_fmt_ir", ++ FT_UINT8, BASE_HEX, VALS(rsl_ipacc_rtp_csd_fmt_ir_vals), ++ 0xf0, NULL, HFILL }, ++ }, ++ { &hf_rsl_local_port, ++ { "ip.access Local RTP Port", "rsl.ipacc.local_port", ++ FT_UINT16, BASE_DEC, NULL, 0x0, ++ "ip.access Local RTP Port", HFILL }, ++ }, ++ { &hf_rsl_remote_port, ++ { "ip.access Remote RTP Port", "rsl.ipacc.remote_port", ++ FT_UINT16, BASE_DEC, NULL, 0x0, ++ "ip.access Remote RTP Port", HFILL }, ++ }, ++ { &hf_rsl_local_ip, ++ { "ip.access Local IP Address", "rsl.ipacc.local_ip", ++ FT_IPv4, BASE_NONE, NULL, 0x0, ++ "ip.access Local IP Address", HFILL }, ++ }, ++ { &hf_rsl_remote_ip, ++ { "ip.access Remote IP Address", "rsl.ipacc.remote_ip", ++ FT_IPv4, BASE_NONE, NULL, 0x0, ++ "ip.access Remote IP Address", HFILL }, ++ }, ++ { &hf_rsl_cstat_tx_pkts, ++ { "Packets Sent", "rsl.ipacc.cstat.tx_pkts", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_rsl_cstat_tx_octs, ++ { "Octets Sent", "rsl.ipacc.cstat.tx_octets", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_rsl_cstat_rx_pkts, ++ { "Packets Received", "rsl.ipacc.cstat.rx_pkts", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_rsl_cstat_rx_octs, ++ { "Octets Received", "rsl.ipacc.cstat.rx_octets", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_rsl_cstat_lost_pkts, ++ { "Packets Lost", "rsl.ipacc.cstat.lost_pkts", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_rsl_cstat_ia_jitter, ++ { "Inter-arrival Jitter", "rsl.ipacc.cstat.ia_jitter", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } ++ }, ++ { &hf_rsl_cstat_avg_tx_dly, ++ { "Average Tx Delay", "rsl.ipacc.cstat.avg_tx_delay", ++ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } ++ }, + }; + static gint *ett[] = { + &ett_rsl, +@@ -3949,6 +4449,14 @@ void proto_register_rsl(void) + &ett_ie_meas_res_no, + &ett_ie_message_id, + &ett_ie_sys_info_type, ++ &ett_ie_speech_mode, ++ &ett_ie_conn_stat, ++ &ett_ie_conn_id, ++ &ett_ie_remote_ip, ++ &ett_ie_remote_port, ++ &ett_ie_local_port, ++ &ett_ie_local_ip, ++ &ett_ie_rtp_payload, + }; + + /* Register the protocol name and description */ +-- +1.7.3.4 + |