forked from osmocom/wireshark
WIP: RSL Ericsson support
Change-Id: I1e9b3c08848f4feb60361e629d7225b6d2e1dcbd
This commit is contained in:
parent
43968887ba
commit
3128d7534f
|
@ -445,6 +445,33 @@ static const value_string rsl_msg_disc_vals[] = {
|
|||
#define RSL_IE_OSMO_TOP_ACCH_CAP 0x62
|
||||
#define RSL_IE_OSMO_OSMUX_CID 0x63
|
||||
|
||||
/* Vendor-specific definitions used in Ericsson RSL */
|
||||
#define RSL_MSG_ERIC_IMM_ASS_SENT 0x10
|
||||
#define RSL_MSG_ERIC_TRX_REP_CTRL 0x1d
|
||||
#define RSL_MSG_ERIC_TRX_REP_CTRL_ACK 0x1e
|
||||
#define RSL_MSG_ERIC_TRX_REPORT 0x1f
|
||||
|
||||
#define RSL_IE_ERIC_INST_NUM 0x48
|
||||
#define RSL_IE_ERIC_PGSL_TIMERS 0x49
|
||||
#define RSL_IE_ERIC_REP_DL_FACCH 0x4a
|
||||
#define RSL_IE_ERIC_L2_HDR_TYPE 0xe0
|
||||
#define RSL_IE_ERIC_PWR_INFO 0xf0
|
||||
#define RSL_IE_ERIC_MOBILE_ID 0xf1
|
||||
#define RSL_IE_ERIC_BCCH_MAPPING 0xf2
|
||||
#define RSL_IE_ERIC_PACKET_PAGING_IND 0xf3
|
||||
#define RSL_IE_ERIC_COUNTER_CTRL 0xf4
|
||||
#define RSL_IE_ERIC_COUNTER_CTRL_ACK 0xf5
|
||||
#define RSL_IE_ERIC_COUNTER_REPORT 0xf6
|
||||
#define RSL_IE_ERIC_ICP_CONN 0xf7
|
||||
#define RSL_IE_ERIC_EMR_SUPPORT 0xf8
|
||||
#define RSL_IE_ERIC_EGPRS_REQ_REF 0xf9
|
||||
#define RSL_IE_ERIC_VGCSREL 0xfa
|
||||
#define RSL_IE_ERIC_NCH_REP_PERIOD 0xfb
|
||||
#define RSL_IE_ERIC_NY2 0xfc
|
||||
#define RSL_IE_ERIC_T3115 0xfd
|
||||
#define RSL_IE_ERIC_ACT_FLAG 0xfe
|
||||
#define RSL_IE_ERIC_FULL_NCH_INFO 0xff
|
||||
|
||||
static const value_string rsl_msg_type_vals[] = {
|
||||
/* 0 0 0 0 - - - - Radio Link Layer Management messages: */
|
||||
/* 0x01 */ { RSL_MSG_TYPE_DATA_REQ, "DATA REQuest" }, /* 8.3.1 */
|
||||
|
@ -533,7 +560,9 @@ static const value_string rsl_msg_type_vals[] = {
|
|||
/* 0x78 */ { RSL_MSG_TYPE_IPAC_DLCX_ACK, "ip.access DLCX ACK" },
|
||||
/* 0x79 */ { RSL_MSG_TYPE_IPAC_DLCX_NACK, "ip.access DLCX NACK" },
|
||||
/* 0x7f */ { RSL_MSG_TYPE_OSMO_ETWS_CMD, "Osmocom PRIMARY ETWS CMD" },
|
||||
/* 0x48 */ { 0, NULL }
|
||||
{ 0x10, "Immediate Assignment Sent" },
|
||||
{ 0x18, "RACH Load?" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static value_string_ext rsl_msg_type_vals_ext = VALUE_STRING_EXT_INIT(rsl_msg_type_vals);
|
||||
|
||||
|
@ -687,6 +716,7 @@ static const value_string rsl_ie_type_vals[] = {
|
|||
/* 0x61 */ { RSL_IE_OSMO_TRAINING_SEQUENCE, "Training Sequence Code/Set" },
|
||||
/* 0x62 */ { RSL_IE_OSMO_TOP_ACCH_CAP, "Temporary ACCH Overpower Capabilities" },
|
||||
/* 0x63 */ { RSL_IE_OSMO_OSMUX_CID, "Osmux CID" },
|
||||
/* FIXME: Distinguish between IPA and Ericsson definitions */
|
||||
/* 0xe0 */ { RSL_IE_IPAC_SRTP_CONFIG,"SRTP Configuration" },
|
||||
/* 0xe1 */ { RSL_IE_IPAC_PROXY_UDP, "BSC Proxy UDP Port" },
|
||||
/* 0xe2 */ { RSL_IE_IPAC_BSCMPL_TOUT,"BSC Multiplex Timeout" },
|
||||
|
@ -3919,6 +3949,81 @@ dissct_rsl_ipaccess_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
|
|||
return offset;
|
||||
}
|
||||
|
||||
static int
|
||||
dissct_rsl_ericsson_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
|
||||
{
|
||||
//guint8 msg_type;
|
||||
//conversation_t *conv;
|
||||
|
||||
//msg_type = tvb_get_guint8(tvb, offset) & 0x7f;
|
||||
offset++;
|
||||
|
||||
/* parse TLV attributes */
|
||||
while (tvb_reported_length_remaining(tvb, offset) > 0) {
|
||||
guint8 tag;
|
||||
unsigned int len, hlen;
|
||||
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 = tdef->fixed_len;
|
||||
break;
|
||||
case TLV_TYPE_T:
|
||||
hlen = 1;
|
||||
len = 0;
|
||||
break;
|
||||
case TLV_TYPE_TV:
|
||||
hlen = 1;
|
||||
len = 1;
|
||||
break;
|
||||
case TLV_TYPE_TLV:
|
||||
hlen = 2;
|
||||
len = tvb_get_guint8(tvb, offset+1);
|
||||
break;
|
||||
case TLV_TYPE_TL16V:
|
||||
hlen = 3;
|
||||
len = tvb_get_guint8(tvb, offset+1) << 8 |
|
||||
tvb_get_guint8(tvb, offset+2);
|
||||
break;
|
||||
case TLV_TYPE_UNKNOWN:
|
||||
default:
|
||||
return tvb_reported_length(tvb);
|
||||
}
|
||||
|
||||
ti = proto_tree_add_item(tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
|
||||
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_ERIC_INST_NUM:
|
||||
case RSL_IE_ERIC_REP_DL_FACCH:
|
||||
case RSL_IE_ERIC_PWR_INFO:
|
||||
case RSL_IE_ERIC_MOBILE_ID:
|
||||
case RSL_IE_ERIC_BCCH_MAPPING:
|
||||
case RSL_IE_ERIC_PACKET_PAGING_IND:
|
||||
case RSL_IE_ERIC_COUNTER_CTRL:
|
||||
case RSL_IE_ERIC_COUNTER_CTRL_ACK:
|
||||
case RSL_IE_ERIC_COUNTER_REPORT:
|
||||
case RSL_IE_ERIC_ICP_CONN:
|
||||
case RSL_IE_ERIC_EGPRS_REQ_REF:
|
||||
break;
|
||||
}
|
||||
offset += len;
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
|
||||
{
|
||||
|
@ -3935,6 +4040,18 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
|
|||
}
|
||||
offset++;
|
||||
|
||||
switch (msg_type) {
|
||||
case RSL_MSG_ERIC_IMM_ASS_SENT:
|
||||
case RSL_MSG_ERIC_TRX_REP_CTRL:
|
||||
case RSL_MSG_ERIC_TRX_REP_CTRL_ACK:
|
||||
case RSL_MSG_ERIC_TRX_REPORT:
|
||||
case 0x18:
|
||||
offset = dissct_rsl_ericsson_msg(tvb, pinfo, tree, offset-1);
|
||||
return offset;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (msg_type) {
|
||||
/* Radio Link Layer Management messages */
|
||||
/* 8.3.1 DATA REQUEST */
|
||||
|
@ -5523,6 +5640,29 @@ void proto_register_rsl(void)
|
|||
RSL_ATT_TLVDEF(RSL_IE_OSMO_TRAINING_SEQUENCE, TLV_TYPE_TLV, 0);
|
||||
RSL_ATT_TLVDEF(RSL_IE_OSMO_OSMUX_CID, TLV_TYPE_TLV, 0);
|
||||
|
||||
#if 0
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_INST_NUM, TLV_TYPE_TV, 0);
|
||||
/* RSL_IE_ERIC_PGSL_TIMERS? */
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_REP_DL_FACCH, TLV_TYPE_TV, 0);
|
||||
/* RSL_IE_ERIC_L2_HDR_TYPE? */
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_PWR_INFO, TLV_TYPE_FIXED, 2);
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_MOBILE_ID, TLV_TYPE_FIXED, 4);
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_BCCH_MAPPING, TLV_TYPE_TV, 0);
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_PACKET_PAGING_IND, TLV_TYPE_TV, 0);
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_COUNTER_CTRL, TLV_TYPE_FIXED, 2);
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_COUNTER_CTRL_ACK, TLV_TYPE_TV, 0);
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_COUNTER_REPORT, TLV_TYPE_TLV, 0);
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_ICP_CONN, TLV_TYPE_TLV, 0);
|
||||
/* RSL_IE_ERIC_EMR_SUPPORT? */
|
||||
RSL_ATT_TLVDEF(RSL_IE_ERIC_EGPRS_REQ_REF, TLV_TYPE_FIXED, 4);
|
||||
/* RSL_IE_ERIC_VGCSREL */
|
||||
/* RSL_IE_ERIC_NCH_REP_PERIOD */
|
||||
/* RSL_IE_ERIC_NY2 */
|
||||
/* RSL_IE_ERIC_T3115 */
|
||||
/* RSL_IE_ERIC_ACT_FLAG */
|
||||
/* RSL_IE_ERIC_FULL_NCH_INFO */
|
||||
#endif
|
||||
|
||||
/* Register the protocol name and description */
|
||||
proto_rsl = proto_register_protocol("Radio Signalling Link (RSL)", "RSL", "gsm_abis_rsl");
|
||||
|
||||
|
|
Loading…
Reference in New Issue