module RSL_Tests {

import from GSM_Types all;
import from RSL_Types all;
import from MobileL3_Types all;
import from MobileL3_CommonIE_Types all;
import from L3_Templates all;
import from RSL_Emulation all;

type component RSL_Tests_CT extends RSL_DchanHdlr {
}

private function f_rx_l3(PDU_ML3_NW_MS l3) runs on RSL_Tests_CT {
	log("L3 received ", l3);
	if (ischosen(l3.msgs.rrm.channelRelease)) {
	}
}

function test_mahlzeit(hexstring imsi) runs on RSL_Tests_CT {

	var RSL_Message rsl;
	var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(0));
	var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(imsi));
	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ('0001'B, mi));
	timer T := 1.0;

	f_chan_est('23'O, enc_PDU_ML3_MS_NW(l3_info), link_id, 23);
	/* if we reach here, we have established a dedicated channel */

	alt {
	[] RSL.receive(tr_RSL_MsgTypeR(RSL_MT_DATA_REQ)) -> value rsl {
		var PDU_ML3_NW_MS l3 := dec_PDU_ML3_NW_MS(rsl.ies[2].body.l3_info.payload);
		f_rx_l3(l3);
		}
	}
}



}
