WIP: RSL Ericsson support

Change-Id: I1e9b3c08848f4feb60361e629d7225b6d2e1dcbd
This commit is contained in:
Harald Welte 2016-12-02 16:44:20 +01:00 committed by Harald Welte
parent 43968887ba
commit 3128d7534f
1 changed files with 141 additions and 1 deletions

View File

@ -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");