module RSL_Types {

	import from General_Types all;
	import from Osmocom_Types all;
	import from GSM_Types all;

	/* Section 9.1 */
	type enumerated RSL_MessageGroup {
		RSL_MDISC_RESERVED	('0000000'B),
		RSL_MDISC_RLL		('0000001'B),
		RSL_MDISC_DCHAN		('0000100'B),
		RSL_MDISC_CCHAN		('0000110'B),
		RSL_MDISC_TRX_MGMT	('0001000'B),
		RSL_MDISC_LCS		('0010000'B),
		RSL_MDISC_IPACCESS	('0111111'B)
	} with { variant "FIELDLENGTH(7)" };

	/* Section 9.1 */
	type record RSL_MessageDiscriminator {
		RSL_MessageGroup	msg_group,
		boolean			transparent
	} with { variant "FIELDORDER(msb)" };

	template RSL_MessageDiscriminator ts_RSL_MsgDisc(RSL_MessageGroup mg, boolean t := true) := {
		msg_group := mg,
		transparent := t
	}

	/* Section 9.2 */
	type enumerated RSL_MessageType {
		/* Radio Link Layer Management */
		RSL_MT_DATA_REQ		('00000001'B),
		RSL_MT_DATA_IND		('00000010'B),
		RSL_MT_ERROR_IND	('00000011'B),
		RSL_MT_EST_REQ		('00000100'B),
		RSL_MT_EST_CONF		('00000101'B),
		RSL_MT_EST_IND		('00000110'B),
		RSL_MT_REL_REQ		('00000111'B),
		RSL_MT_REL_CONF		('00001000'B),
		RSL_MT_REL_IND		('00001001'B),
		RSL_MT_UNIT_DATA_REQ	('00001010'B),
		RSL_MT_UNIT_DATA_IND	('00001011'B),

		/* non-standard below */
		RSL_MT_SUSP_REQ		('00001100'B),
		RSL_MT_SUSP_CONF	('00001101'B),
		RSL_MT_RES_REQ		('00001110'B),
		RSL_MT_RECON_REQ	('00001111'B),

		/* Common Channel Management / TRX Management */
		RSL_MT_BCCH_INFO	('00010001'B),
		RSL_MT_CCCH_LOAD_IND,
		RSL_MT_CHAN_RQD,
		RSL_MT_DELETE_IND,
		RSL_MT_PAGING_CMD,
		RSL_MT_IMMEDIATE_ASSIGN_CMD,
		RSL_MT_SMS_BC_REQ,
		RSL_MT_CHAN_CONF,		/* non-standard element */
		/* empty */
		RSL_MT_RF_RES_IND	('00011001'B),
		RSL_MT_SACCH_FILL,
		RSL_MT_OVERLOAD,
		RSL_MT_ERROR_REPORT,
		RSL_MT_SMS_BC_CMD,
		RSL_MT_CBCH_LOAD_IND,
		RSL_MT_NOT_CMD,

		/* Dedicate Channel Management */
		RSL_MT_CHAN_ACTIV	('00100001'B),
		RSL_MT_CHAN_ACTIV_ACK,
		RSL_MT_CHAN_ACTIV_NACK,
		RSL_MT_CONN_FAIL,
		RSL_MT_DEACTIVATE_SACCH,
		RSL_MT_ENCR_CMD,
		RSL_MT_HANDO_DET,
		RSL_MT_MEAS_RES,
		RSL_MT_MODE_MODIFY_REQ,
		RSL_MT_MODE_MODIFY_ACK,
		RSL_MT_MODE_MODIFY_NACK,
		RSL_MT_PHY_CONTEXT_REQ,
		RSL_MT_PHY_CONTEXT_CONF,
		RSL_MT_RF_CHAN_REL,
		RSL_MT_MS_POWER_CONTROL,
		RSL_MT_BS_POWER_CONTROL,		/* 0x30 */
		RSL_MT_PREPROC_CONFIG,
		RSL_MT_PREPROC_MEAS_RES,
		RSL_MT_RF_CHAN_REL_ACK,
		RSL_MT_SACCH_INFO_MODIFY,
		RSL_MT_TALKER_DET,
		RSL_MT_LISTENER_DET,
		RSL_MT_REMOTE_CODEC_CONF_REP,
		RSL_MT_RTD_REP,
		RSL_MT_PRE_HANDO_NOTIF,
		RSL_MT_MR_CODEC_MOD_REQ,
		RSL_MT_MR_CODEC_MOD_ACK,
		RSL_MT_MR_CODEC_MOD_NACK,
		RSL_MT_MR_CODEC_MOD_PER,
		RSL_MT_TFO_REP,
		RSL_MT_TFO_MOD_REQ,		/* 0x3f */

		RSL_MT_LOCATION_INFO		('01000001'B),

		/* ip.access specific RSL message types */
		RSL_MT_IPAC_DIR_RETR_ENQ	('01000000'B),

		RSL_MT_IPAC_PDCH_ACT		('01001000'B),
		RSL_MT_IPAC_PDCH_ACT_ACK,
		RSL_MT_IPAC_PDCH_ACT_NACK,
		RSL_MT_IPAC_PDCH_DEACT		('01001011'B),
		RSL_MT_IPAC_PDCH_DEACT_ACK,
		RSL_MT_IPAC_PDCH_DEACT_NACK,

		RSL_MT_IPAC_CONNECT_MUX		('01010000'B),
		RSL_MT_IPAC_CONNECT_MUX_ACK,
		RSL_MT_IPAC_CONNECT_MUX_NACK,
		RSL_MT_IPAC_BIND_MUX,
		RSL_MT_IPAC_BIND_MUX_ACK,
		RSL_MT_IPAC_BIND_MUX_NACK,
		RSL_MT_IPAC_DISC_MUX,
		RSL_MT_IPAC_DISC_MUX_ACK,
		RSL_MT_IPAC_DISC_MUX_NACK,
		RSL_MT_IPAC_MEAS_PREPROC_DFT 	('01100000'B),
		RSL_MT_IPAC_HO_CAN_ENQ,
		RSL_MT_IPAC_HO_CAN_RES,
		RSL_MT_IPAC_CRCX,
		RSL_MT_IPAC_CRCX_ACK,
		RSL_MT_IPAC_CRCX_NACK,
		RSL_MT_IPAC_MDCX,
		RSL_MT_IPAC_MDCX_ACK,
		RSL_MT_IPAC_MDCX_NACK,
		RSL_MT_IPAC_DLCX_IND,
		RSL_MT_IPAC_DLCX,
		RSL_MT_IPAC_DLCX_ACK,
		RSL_MT_IPAC_DLCX_NACK
	} with { variant "FIELDLENGTH(8)" };

	/*! RSL Information Element Identifiers (Chapter 9.3) */
	type enumerated RSL_IE_Type {
		RSL_IE_CHAN_NR			('00000001'B),
		RSL_IE_LINK_IDENT,
		RSL_IE_ACT_TYPE,
		RSL_IE_BS_POWER,
		RSL_IE_CHAN_IDENT,
		RSL_IE_CHAN_MODE,
		RSL_IE_ENCR_INFO,
		RSL_IE_FRAME_NUMBER,
		RSL_IE_HANDO_REF,
		RSL_IE_L1_INFO,
		RSL_IE_L3_INFO,
		RSL_IE_MS_IDENTITY,
		RSL_IE_MS_POWER,
		RSL_IE_PAGING_GROUP,
		RSL_IE_PAGING_LOAD,
		RSL_IE_PYHS_CONTEXT,
		RSL_IE_ACCESS_DELAY,
		RSL_IE_RACH_LOAD,
		RSL_IE_REQ_REFERENCE,
		RSL_IE_RELEASE_MODE,
		RSL_IE_RESOURCE_INFO,
		RSL_IE_RLM_CAUSE,
		RSL_IE_STARTNG_TIME,
		RSL_IE_TIMING_ADVANCE,
		RSL_IE_UPLINK_MEAS,
		RSL_IE_CAUSE,
		RSL_IE_MEAS_RES_NR,
		RSL_IE_MSG_ID,
		/* reserved */
		RSL_IE_SYSINFO_TYPE		('00011110'B),
		RSL_IE_MS_POWER_PARAM,
		RSL_IE_BS_POWER_PARAM,
		RSL_IE_PREPROC_PARAM,
		RSL_IE_PREPROC_MEAS,
		RSL_IE_IMM_ASS_INFO,		/* Phase 1 (3.6.0), later Full below */
		RSL_IE_SMSCB_INFO,
		RSL_IE_MS_TIMING_OFFSET,
		RSL_IE_ERR_MSG,
		RSL_IE_FULL_BCCH_INFO,
		RSL_IE_CHAN_NEEDED,
		RSL_IE_CB_CMD_TYPE,
		RSL_IE_SMSCB_MSG,
		RSL_IE_FULL_IMM_ASS_INFO,
		RSL_IE_SACCH_INFO,
		RSL_IE_CBCH_LOAD_INFO,
		RSL_IE_SMSCB_CHAN_INDICATOR,
		RSL_IE_GROUP_CALL_REF,
		RSL_IE_CHAN_DESC,
		RSL_IE_NCH_DRX_INFO,
		RSL_IE_CMD_INDICATOR,
		RSL_IE_EMLPP_PRIO,
		RSL_IE_UIC,
		RSL_IE_MAIN_CHAN_REF,
		RSL_IE_MR_CONFIG,
		RSL_IE_MR_CONTROL,
		RSL_IE_SUP_CODEC_TYPES,
		RSL_IE_CODEC_CONFIG,
		RSL_IE_RTD,
		RSL_IE_TFO_STATUS,
		RSL_IE_LLP_APDU,

		/* ip.access */
		RSL_IE_IPAC_SRTP_CONFIG		('11100000'B),
		RSL_IE_IPAC_PROXY_UDP,
		RSL_IE_IPAC_BSCMPL_TOUT,

		RSL_IE_IPAC_REMOTE_IP		('11110000'B),
		RSL_IE_IPAC_REMOTE_PORT,
		RSL_IE_IPAC_RTP_PAYLOAD,
		RSL_IE_IPAC_LOCAL_PORT,
		RSL_IE_IPAC_SPEECH_MODE,
		RSL_IE_IPAC_LOCAL_IP,
		RSL_IE_IPAC_CONN_STAT,
		RSL_IE_IPAC_HO_C_PARMS,
		RSL_IE_IPAC_CONN_ID,
		RSL_IE_IPAC_RTP_CSD_FMT,
		RSL_IE_IPAC_RTP_JIT_BUF,
		RSL_IE_IPAC_RTP_COMPR,
		RSL_IE_IPAC_RTP_PAYLOAD2,
		RSL_IE_IPAC_RTP_MPLEX,
		RSL_IE_IPAC_RTP_MPLEX_ID
	} with { variant "FIELDLENGTH(8)" };

	type record RSL_LV {
		uint8_t		len,
		octetstring	payload
	} with { variant (len) "LENGTHTO(payload)" }

	template RSL_LV ts_RSL_LV(template octetstring pl) := {
		len := 0,
		payload := pl
	}

	type record RSL_IE_V {
		uint8_t		val
	}

	/* 9.3.3 */
	type record RSL_IE_ActivationType {
		boolean		reactivation,
		uint4_t		reserved,
		uint3_t		a_bits
	}

	template RSL_IE_ActivationType t_RSL_IE_ActType := {
		reactivation := false,
		reserved := 0,
		a_bits := 0 /* related to immediate assignment */
	}

	/* 9.3.6 */
	type enumerated RSL_SpeechDataInd {
		RSL_SPDI_SPEECH		('00000001'B),
		RSL_SPDI_DATA		('00000010'B),
		RSL_SPDI_SIGN		('00000011'B)
	} with { variant "FIELDLENGTH(8)" };
	type enumerated RSL_ChanRateType {
		RSL_CHRT_SDCCH		('00000001'B),
		RSL_CHRT_TCH_F		('00001000'B),
		RSL_CHRT_TCH_H		('00001001'B),
		RSL_CHRT_TCH_F_BD_MSLOT	('00001010'B),
		RSL_CHRT_TCH_F_DL_MSLOT	('00011010'B),
		RSL_CHRT_TCH_F_GROUP	('00011000'B),
		RSL_CHRT_TCH_H_GROUP	('00011001'B),
		RSL_CHRT_TCH_F_BCAST	('00101000'B),
		RSL_CHRT_TCH_H_BCAST	('00101001'B)
	} with { variant "FIELDLENGTH(8)" };
	type enumerated RSL_SpeechAlgo {
		RSL_CMOD_NO_RESOURCE	('00000000'B),
		RSL_CMOD_SP_GSM1	('00000001'B),
		RSL_CMOD_SP_GSM2	('00010001'B),
		RSL_CMOD_SP_GSM3	('00100001'B),
		RSL_CMOD_SP_GSM4	('00110001'B),
		RSL_CMOD_SP_GSM5	('00001001'B),
		RSL_CMOD_SP_GSM6	('00001101'B)
	} with { variant "FIELDLENGTH(8)" };
	type record RSL_IE_ChannelMode {
		BIT6		reserved,
		boolean		dtx_d,
		boolean		dtx_u,
		RSL_SpeechDataInd spd_ind,
		RSL_ChanRateType  ch_rate_type,
		RSL_SpeechAlgo	coding_alg_rate
	}

	template RSL_IE_ChannelMode ts_RSL_ChanMode_SIGN := {
		reserved := '000000'B,
		dtx_d := false,
		dtx_u := false,
		spd_ind := RSL_SPDI_SIGN,
		ch_rate_type := RSL_CHRT_SDCCH,
		coding_alg_rate := RSL_CMOD_NO_RESOURCE
	}

	template RSL_IE_ChannelMode ts_RSL_ChanMode(RSL_ChanRateType t, RSL_SpeechAlgo alg) := {
		reserved := '000000'B,
		dtx_d := false,
		dtx_u := false,
		spd_ind := RSL_SPDI_SPEECH,
		ch_rate_type := t,
		coding_alg_rate := alg
	}

	/* 9.3.4 */
	type record RSL_IE_BS_Power {
		uint1_t 	reserved,
		boolean		epc,
		boolean		fpc,
		uint5_t		power_level
	}

	/* 9.3.8 */
	type record RSL_IE_FrameNumber {
		uint5_t		t1_p,
		uint6_t		t3,
		uint5_t		t2
	}
	type RSL_IE_FrameNumber RSL_IE_StartingTime;

	/* 9.3.10 */
	type record RSL_IE_L1Info {
		uint5_t		ms_power_lvl,
		boolean		fpc,
		uint2_t		reserved,
		uint8_t		actual_ta
	}

	/* 9.3.13 */
	type record RSL_IE_MS_Power {
		uint2_t		reserved,
		boolean		fpc_epc,
		uint5_t		power_level
	}

	/* 9.3.19 */
	type record RSL_IE_RequestRef {
		OCT1		ra,
		RSL_IE_FrameNumber frame_nr
	}

	/* 3GPP TS 44.018 / 10.5.2.38 Starting Time */
	template RSL_IE_FrameNumber ts_RSL_IE_FrameNumber(GsmFrameNumber fn) := {
		t1_p := (fn / 1326) mod 32,
		t3 := fn mod 51,
		t2 := fn mod 26
	}

	template RSL_IE_RequestRef ts_RSL_IE_ReqRef(OCT1 ra, GsmFrameNumber frame_nr) := {
		ra := ra,
		frame_nr := ts_RSL_IE_FrameNumber(frame_nr)
	}

	/* 9.3.26 */
	type uint7_t RSL_Cause;
	type record RSL_IE_Cause {
		uint1_t		e,
		RSL_Cause	cause,
		octetstring	cause_ext optional
	}

	template RSL_IE_Cause ts_RSL_IE_Cause(RSL_Cause cause) := {
		e := 0,
		cause := cause,
		cause_ext := omit
	}

	/* 9.3.40 */
	type enumerated RSL_ChanNeeded {
		RSL_CHANNEED_ANY	('00'B),
		RSL_CHANNEED_SDCCH	('01'B),
		RSL_CHANNEED_TCH_F	('10'B),
		RSL_CHANNEED_TCH_ForH	('11'B)
	}
	type record RSL_IE_ChanNeeded {
		uint6_t		reserved,
		RSL_ChanNeeded	chan_needed
	}

	/* 9.3.53 */
	type record RSL_IE_MultirateCtrl {
		uint3_t		spare,
		boolean		od,
		boolean		pre,
		uint2_t		rae,
		boolean		tfo
	}

	type enumerated RSL_IE_SysinfoType {
		RSL_SYSTEM_INFO_8	('00000000'B),
		RSL_SYSTEM_INFO_1	('00000001'B),
		RSL_SYSTEM_INFO_2	('00000010'B),
		RSL_SYSTEM_INFO_3	('00000011'B),
		RSL_SYSTEM_INFO_4	('00000100'B),
		RSL_SYSTEM_INFO_5	('00000101'B),
		RSL_SYSTEM_INFO_6	('00000110'B),
		RSL_SYSTEM_INFO_7	('00000111'B),
		RSL_SYSTEM_INFO_16	('00001000'B),
		RSL_SYSTEM_INFO_17	('00001001'B),
		RSL_SYSTEM_INFO_2bis	('00001010'B),
		RSL_SYSTEM_INFO_2ter	('00001011'B),
		RSL_SYSTEM_INFO_5bis	('00001101'B),
		RSL_SYSTEM_INFO_5ter	('00001110'B),
		RSL_SYSTEM_INFO_10	('00001111'B),
		RSL_EXT_MEAS_ORDER	('01000111'B),
		RSL_MEAS_INFO		('01001000'B),
		RSL_SYSTEM_INFO_13	('00101000'B),
		RSL_ERIC_SYSTEM_INFO_13 ('00001100'B),
		RSL_SYSTEM_INFO_2quater ('00101001'B),
		RSL_SYSTEM_INFO_9	('00101010'B),
		RSL_SYSTEM_INFO_18	('00101011'B),
		RSL_SYSTEM_INFO_19	('00101100'B),
		RSL_SYSTEM_INFO_20	('00101101'B)
	} with { variant "FIELDLENGTH(8)" }

	/* union of all IE bodies */
	type union RSL_IE_Body {
		RslChannelNr		chan_nr,
		RslLinkId		link_id,
		RSL_LV			l3_info,
		RSL_LV			rlm_cause,
		uint8_t			release_mode,
		RSL_IE_ActivationType	act_type,
		RSL_IE_ChannelMode	chan_mode,
		uint8_t			handover_ref,
		RSL_IE_BS_Power		bs_power,
		RSL_IE_MS_Power		ms_power,
		uint8_t			timing_adv,
		RSL_IE_MultirateCtrl	multirate_ctrl,
		RSL_IE_FrameNumber	frame_nr,
		RSL_IE_Cause		cause,
		uint8_t			access_delay,
		uint8_t			meas_res_nr,
		RSL_IE_L1Info		l1_info,
		RSL_IE_SysinfoType	sysinfo_type,
		uint16_t		paging_load,
		uint8_t			paging_group,
		RSL_IE_ChanNeeded	chan_needed,
		RSL_IE_StartingTime	starting_time,
		RSL_IE_RequestRef	req_ref,
		RSL_LV			full_imm_ass_info,

		RSL_LV		other
	}

	type record RSL_IE {
		RSL_IE_Type	iei,
		RSL_IE_Body	body
	} with { variant (body) "CROSSTAG(
					chan_nr, iei = RSL_IE_CHAN_NR;
					link_id, iei = RSL_IE_LINK_IDENT;
					l3_info, iei = RSL_IE_L3_INFO;
					rlm_cause, iei = RSL_IE_RLM_CAUSE;
					release_mode, iei = RSL_IE_RELEASE_MODE;
					act_type, iei = RSL_IE_ACT_TYPE;
					chan_mode, iei = RSL_IE_CHAN_MODE;
					handover_ref, iei = RSL_IE_HANDO_REF;
					bs_power, iei = RSL_IE_BS_POWER;
					ms_power, iei = RSL_IE_MS_POWER;
					timing_adv, iei = RSL_IE_TIMING_ADVANCE;
					multirate_ctrl, iei = RSL_IE_MR_CONTROL;

					frame_nr, iei = RSL_IE_FRAME_NUMBER;
					cause, iei = RSL_IE_CAUSE;
					access_delay, iei = RSL_IE_ACCESS_DELAY;
					meas_res_nr, iei = RSL_IE_MEAS_RES_NR;
					l1_info, iei = RSL_IE_L1_INFO;
					sysinfo_type, iei = RSL_IE_SYSINFO_TYPE;
					paging_load, iei = RSL_IE_PAGING_LOAD;
					paging_group, iei = RSL_IE_PAGING_GROUP;
					chan_needed, iei = RSL_IE_CHAN_NEEDED;
					starting_time, iei = RSL_IE_STARTNG_TIME;

					req_ref, iei = RSL_IE_REQ_REFERENCE;

					other, OTHERWISE;
		)" };

	template RSL_IE t_RSL_IE(template RSL_IE_Body body) := {
		iei := RSL_IE_CHAN_NR, /* overwritten? */
		body := body
	}

	type record of RSL_IE RSL_IE_List;

	type record RSL_Message {
		RSL_MessageDiscriminator	msg_disc,
		RSL_MessageType			msg_type,
		RSL_IE_List			ies optional
	}

	external function enc_RSL_Message(in RSL_Message msg) return octetstring
		with { extension "prototype(convert) encode(RAW)" };
	external function dec_RSL_Message(in octetstring stream) return RSL_Message
		with { extension "prototype(convert) decode(RAW)" };

	template RSL_Message tr_RSL_MsgType(RSL_MessageDiscriminator m_disc,
				RSL_MessageType m_type) := {
		msg_disc := m_disc,
		msg_type := m_type,
		ies := *
	}

	/* 8.3.1 BSC -> BTS */
	template RSL_Message ts_RSL_DATA_REQ(RslChannelNr chan_nr, RslLinkId link_id, octetstring l3_info) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_RLL, true),
		msg_type := RSL_MT_DATA_REQ,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{link_id := link_id}),
			t_RSL_IE(RSL_IE_Body:{l3_info := ts_RSL_LV(l3_info)})
		}
	}

	/* 8.3.2 BTS -> BSC */
	template RSL_Message ts_RSL_DATA_IND(RslChannelNr chan_nr, RslLinkId link_id, octetstring l3_info) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_RLL, true),
		msg_type := RSL_MT_DATA_IND,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{link_id := link_id}),
			t_RSL_IE(RSL_IE_Body:{l3_info := ts_RSL_LV(l3_info)})
		}
	}

	/* 8.3.3 BTS -> BSC */
	template RSL_Message ts_RSL_ERROR_IND(RslChannelNr chan_nr, RslLinkId link_id, RSL_Cause cause) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_RLL, false),
		msg_type := RSL_MT_ERROR_IND,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{link_id := link_id}),
			t_RSL_IE(RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
		}
	}

	/* 8.3.6 BTS -> BSC */
	template RSL_Message ts_RSL_EST_IND(RslChannelNr chan_nr, RslLinkId link_id, octetstring l3_info) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_RLL, false),
		msg_type := RSL_MT_EST_IND,
		ies := {
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{link_id := link_id}),
			t_RSL_IE(RSL_IE_Body:{l3_info := ts_RSL_LV(l3_info)})
		}
	}

	/* 8.3.7 BSC -> BTS */
	template RSL_Message ts_RSL_REL_REQ(RslChannelNr chan_nr, RslLinkId link_id) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_RLL, false),
		msg_type := RSL_MT_REL_REQ,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{link_id := link_id})
		}
	}

	/* 8.3.8 BTS -> BSC */
	template RSL_Message ts_RSL_REL_CONF(RslChannelNr chan_nr, RslLinkId link_id) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_RLL, false),
		msg_type := RSL_MT_REL_CONF,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{link_id := link_id})
		}
	}

	/* 8.3.9 BTS -> BSC */
	template RSL_Message ts_RSL_REL_IND(RslChannelNr chan_nr, RslLinkId link_id) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_RLL, false),
		msg_type := RSL_MT_REL_IND,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{link_id := link_id})
		}
	}

	/* 8.3.10 BSC -> BTS */
	template RSL_Message ts_RSL_UNITDATA_REQ(RslChannelNr chan_nr, RslLinkId link_id, octetstring l3_info)
	modifies ts_RSL_DATA_REQ := {
		msg_type := RSL_MT_UNIT_DATA_REQ
	}

	/* 8.3.11 BTS -> BSC */
	template RSL_Message ts_RSL_UNITDATA_IND(RslChannelNr chan_nr, RslLinkId link_id, octetstring l3_info)
	modifies ts_RSL_DATA_IND := {
		msg_type := RSL_MT_UNIT_DATA_IND
	}


	/* DEDICATED CANNEL MANAGEMENT MESSAGES */

	/* 8.4.1 BSC -> BTS */
	template RSL_Message ts_RSL_CHAN_ACT(RslChannelNr chan_nr, RSL_IE_ChannelMode mode) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
		msg_type := RSL_MT_CHAN_ACTIV,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{act_type := t_RSL_IE_ActType}),
			t_RSL_IE(RSL_IE_Body:{chan_mode := mode})
			/* lots of optional IEs */
		}
	}

	/* 8.4.2 BTS -> BSC */
	template RSL_Message ts_RSL_CHAN_ACT_ACK(RslChannelNr chan_nr, GsmFrameNumber fn) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
		msg_type := RSL_MT_CHAN_ACTIV_ACK,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{frame_nr := ts_RSL_IE_FrameNumber(fn)})
		}
	}

	/* 8.4.3 BTS -> BSC */
	template RSL_Message ts_RSL_CHAN_ACT_NACK(RslChannelNr chan_nr, RSL_Cause cause) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
		msg_type := RSL_MT_CHAN_ACTIV_NACK,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
		}
	}

	/* 8.4.4 BTS -> BSC */
	template RSL_Message ts_RSL_CONN_FAIL_IND(RslChannelNr chan_nr, RSL_Cause cause) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
		msg_type := RSL_MT_CONN_FAIL,
		ies :={
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
		}
	}

	/* 8.4.11 BTS -> BSC */
	template RSL_Message ts_RSL_MODE_MODIFY_NACK(RslChannelNr chan_nr, RSL_Cause cause)
	modifies ts_RSL_CHAN_ACT_NACK := {
		msg_type := RSL_MT_MODE_MODIFY_NACK
	}

	/* COMMON CHANNEL MANAGEMENT MESSAGES */

	/* 8.5.3 BTS -> BSC */
	template RSL_Message ts_RSL_CHAN_RQD(OCT1 ra, GsmFrameNumber fn) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
		msg_type := RSL_MT_CHAN_RQD,
		ies := {
			t_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_RACH(0)}),
			t_RSL_IE(RSL_IE_Body:{req_ref := ts_RSL_IE_ReqRef(ra, fn)})
		}
	}

	/* 8.5.4 BTS -> BSC */
	template RSL_Message ts_DELETE_IND(RslChannelNr chan_nr, octetstring imm_ass) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
		msg_type := RSL_MT_DELETE_IND,
		ies := {
			t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
			t_RSL_IE(RSL_IE_Body:{full_imm_ass_info := ts_RSL_LV(imm_ass)})
		}
	}

	/* 8.6.4 BTS -> BSC */
	template RSL_Message ts_RSL_ERROR_REPORT(RSL_Cause cause) := {
		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
		msg_type := RSL_MT_ERROR_IND,
		ies := {
			t_RSL_IE(RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
		}
	}

} with { encode "RAW" ; variant "FIELDORDER(msb)" }
