diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn
new file mode 100644
index 0000000..436273a
--- /dev/null
+++ b/library/GSM_RR_Types.ttcn
@@ -0,0 +1,593 @@
+/* Encoding/Decoding routines for GSM System Information messages
+ * according to 3GPP TS 44.018 Version 12.3.0 Release 12 */
+
+/* (C) 2017 by Harald Welte <laforge@gnumonks.org> */
+
+module GSM_RR_Types {
+
+	import from General_Types all;
+	import from Osmocom_Types all;
+	import from GSM_Types all;
+	import from RLCMAC_CSN1_Types all;
+
+	/* Table 10.4.1 of Section 10.4 / 3GPP TS 44.018 */
+	type enumerated RrMessageType {
+		ADDITIONAL_ASSIGNMENT		('00111011'B),
+		IMMEDIATE_ASSIGNMENT		('00111111'B),
+		IMMEDIATE_ASSIGNMENT_EXTENDED	('00111001'B),
+		IMMEDIATE_ASSIGNMENT_REJECT	('00111010'B),
+		IMMEDIATE_PACKET_ASSIGNMENT	('01101001'B),
+
+		CIPHERING_MODE_COMMAND		('00110101'B),
+		CIPHERING_MODE_COMPLETE		('00110010'B),
+
+		CONFIGURATION_CHANGE_COMMAND	('00110000'B),
+		CONFIGURATION_CHANGE_ACK	('00110001'B),
+		CONFIGURATION_CHANGE_REJECT	('00110011'B),
+
+		ASSIGNMENT_COMMAND		('00101110'B),
+		ASSIGNMENT_COMPLETE		('00101001'B),
+		ASSIGNMENT_FAILURE		('00101111'B),
+		HANDOVER_COMMAND		('00101011'B),
+		HANDOVER_COMPLETE		('00101100'B),
+		HANDOVER_FAILURE		('00101000'B),
+		PHYSICAL_INFORMATION		('00101101'B),
+
+		CHANNEL_RELEASE			('00001101'B),
+		PARTIAL_RELEASE			('00001010'B),
+		PARTIAL_RELEASE_COMPLETE	('00001111'B),
+
+		PAGING_REQUEST_TYPE_1		('00100001'B),
+		PAGING_REQUEST_TYPE_2		('00100010'B),
+		PAGING_REQUEST_TYPE_3		('00100100'B),
+		PAGING_RESPONSE			('00100111'B),
+		NOTIFICATION_NCH		('00100000'B),
+		NOTIFICATION_RESPOSNE		('00100110'B),
+
+		SYSTEM_INFORMATION_TYPE_8	('00011000'B),
+		SYSTEM_INFORMATION_TYPE_1	('00011001'B),
+		SYSTEM_INFORMATION_TYPE_2	('00011010'B),
+		SYSTEM_INFORMATION_TYPE_3	('00011011'B),
+		SYSTEM_INFORMATION_TYPE_4	('00011100'B),
+		SYSTEM_INFORMATION_TYPE_5	('00011101'B),
+		SYSTEM_INFORMATION_TYPE_6	('00011110'B),
+		SYSTEM_INFORMATION_TYPE_7	('00011111'B),
+		SYSTEM_INFORMATION_TYPE_2bis	('00000010'B),
+		SYSTEM_INFORMATION_TYPE_2ter	('00000011'B),
+		SYSTEM_INFORMATION_TYPE_2quater	('00000111'B),
+		SYSTEM_INFORMATION_TYPE_5bis	('00000101'B),
+		SYSTEM_INFORMATION_TYPE_5ter	('00000110'B),
+		SYSTEM_INFORMATION_TYPE_9	('00000100'B),
+		SYSTEM_INFORMATION_TYPE_13	('00000000'B),
+
+		SYSTEM_INFORMATION_TYPE_16	('00111101'B),
+		SYSTEM_INFORMATION_TYPE_17	('00111110'B),
+
+		CHANNEL_MODE_MODIFY		('00010000'B),
+		RR_STATUS			('00010010'B),
+		CHANNEL_MODE_MODIFY_ACKNOWLEDGE	('00010111'B),
+		FREQUENCY_REDEFINITION		('00010100'B),
+		MEASUREMENT_REPORT		('00010101'B),
+		CLASSMARK_CHANGE		('00010110'B),
+		CLASSMARK_ENQUIRY		('00010011'B),
+		EXTENDED_MEASUREMENT_REPORT	('00110110'B),
+		EXTENDED_MEASUREMENT_ORDER	('00110111'B),
+		GPRS_SUSPENSION_REQUEST		('00110100'B),
+		//MBMS_ANNOUNCEMENT		('00010110'B), duplicate?
+		//SERVICE_INFORMATION		('00110110'B), duplicate?
+
+		APPLICATION_INFORMATION		('00111000'B),
+
+		SYSTEM_INFORMATION_TYPE_14	('00000001'B),
+		SYSTEM_INFORMATION_TYPE_15	('01000011'B),
+		SYSTEM_INFORMATION_TYPE_18	('01000000'B),
+		SYSTEM_INFORMATION_TYPE_19	('01000001'B),
+		SYSTEM_INFORMATION_TYPE_20	('01000010'B),
+		SYSTEM_INFORMATION_TYPE_13alt	('01000100'B),
+		SYSTEM_INFORMATION_TYPE_2n	('01000101'B),
+		SYSTEM_INFORMATION_TYPE_21	('01000110'B),
+		SYSTEM_INFORMATION_TYPE_22	('01000111'B),
+		SYSTEM_INFORMATION_TYPE_23	('01001111'B),
+
+		DTM_ASSIGNMENT_FAILURE		('01001000'B),
+		DTM_REJECT			('01001001'B),
+		DTM_REQUEST			('01001010'B),
+		PACKET_ASSIGNMENT		('01001011'B),
+		DTM_ASSIGNMENT_COMMAND		('01001100'B),
+		DTM_INFORMATION			('01001101'B),
+		PACKET_INFORMATION		('01001110'B),
+
+		UTRAN_CLASSMARK_CHANGE		('01100000'B),
+		CDMA2000_CLASSMARK_CHANGE	('01100010'B),
+		INTERSYS_TO_UTRAN_HO_CMD	('01100011'B),
+		INTERSYS_TO_CDMA2000_HO_CMD	('01100100'B),
+		GERAN_IU_MODE_CLASSMARK_CHG	('01100101'B),
+		INTERSYS_TO_EUTRAN_HO_CMD	('01100110'B)
+	} with { variant "FIELDLENGTH(8)" };
+
+	type octetstring RestOctets  with { variant "PADDING(yes), PADDING_PATTERN('00101011'B)" };
+	type hexstring GsmBcdString with { variant "HEXORDER(low)" };
+	type GsmBcdString BcdMccMnc with { variant "FIELDLENGTH(6)" };
+
+	type record L2PseudoLength {
+		uint6_t		l2_plen,
+		BIT2		zero_one
+	} with { variant "" };
+
+	template L2PseudoLength t_L2Pseudolength(template uint6_t len) := {
+		l2_plen := len,
+		zero_one := '01'B
+	};
+
+	type record RrHeader {
+		L2PseudoLength	l2_plen,
+		uint4_t		skip_indicator,
+		uint4_t		rr_protocol_discriminator,
+		RrMessageType	message_type
+	} with { variant "" };
+
+	template RrHeader t_RrHeader(RrMessageType msg_type, template uint6_t len) := {
+		l2_plen := t_L2Pseudolength(len),
+		skip_indicator := 0,
+		rr_protocol_discriminator := 6,
+		message_type := msg_type
+	};
+
+	type record RrL3Header {
+		uint4_t		skip_indicator,
+		uint4_t		rr_protocol_discriminator,
+		RrMessageType	message_type
+	} with { variant "" };
+
+	type record MaioHsn {
+	} with { variant "" };
+
+	/* TS 24.008 10.5.1.1 */
+	type uint16_t CellIdentity;
+
+	/* TS 24.008 10.5.1.2 */
+	type uint4_t CipheringKeySeqNr (0..7);
+
+	/* 24.008 10.5.1.3 */
+	type record LocationAreaIdentification {
+		BcdMccMnc	mcc_mnc,
+		uint16_t	lac
+	} with { variant "" };
+
+	/* TS 24.008 10.5.1.4 */
+	type enumerated MobileIdentityType {
+		MI_TYPE_NONE	(0),
+		MI_TYPE_IMSI,
+		MI_TYPE_IMEI,
+		MI_TYPE_IMEISV,
+		MI_TYPE_TMSI,
+		MI_TYPE_TMGI
+	} with { variant "FIELDLENGTH(3)" };
+
+	type record MobileIdentityBCD {
+		MobileIdentityType	mi_type (MI_TYPE_IMSI, MI_TYPE_IMEI, MI_TYPE_IMEISV),
+		boolean			odd,
+		hexstring		digits
+	} with { variant "FIELDORDER(lsb)" };
+
+	type record MobileIdentityTMSI {
+		BIT4			pad ('1111'B),
+		boolean			odd (false),
+		MobileIdentityType	mi_type (MI_TYPE_TMSI),
+		GsmTmsi			tmsi
+	} with { variant "FIELDORDER(lsb)" };
+
+	type record MobileIdentityNone {
+		BIT4			pad ('1111'B),
+		boolean			odd (false),
+		MobileIdentityType	mi_type (MI_TYPE_NONE)
+	} with { variant "FIELDORDER(lsb)" };
+
+	type union MobileIdentity {
+		MobileIdentityBCD	imsi,
+		MobileIdentityBCD	imei,
+		MobileIdentityBCD	imeisv,
+		MobileIdentityTMSI	tmsi,
+		MobileIdentityNone	unused
+	} with { variant "TAG(imsi, mi_type = MI_TYPE_IMSI;
+			      imei, mi_type = MI_TYPE_IMEI;
+			      imeisv, mi_type = MI_TYPE_IMEISV;
+			      tmsi, mi_type = MI_TYPE_TMSI;
+			      unused, mi_type = MI_TYPE_NONE)"
+		 variant "FIELDORDER(lsb)"
+	};
+
+	type record MobileIdentityLV {
+		uint8_t		len,
+		MobileIdentity	mi
+	} with { variant (len) "LENGTHTO(mi)" };
+
+	type record MobileIdentityTLV {
+		uint8_t		tag,
+		uint8_t		len,
+		MobileIdentity	mi
+	} with { variant (len) "LENGTHTO(mi)" };
+
+	/* TS 24.008 10.5.1.5 */
+	type record MsClassmark1 {
+		BIT1		spare,
+		uint2_t		rev_level,
+		boolean		es_ind,
+		boolean		a51,
+		uint3_t		rf_pwr_cap
+	} with { variant "" };
+
+	/* TS 24.008 10.5.1.6 */
+	type record MsClassmark2 {
+		BIT1		spare,
+		uint2_t		rev_level,
+		boolean		es_ind,
+		boolean		a51,
+		uint3_t		rf_pwr_cap,
+		BIT1		spare1,
+		boolean		ps_cap,
+		uint2_t		ss_screen_ind,
+		boolean		sm_cap,
+		boolean		vbs,
+		boolean		vgcs,
+		boolean		fc,
+		boolean		cm3,
+		BIT1		spare2,
+		boolean		lcsva_cap,
+		boolean		ucs2,
+		boolean		solsa,
+		boolean		cmsp,
+		boolean		a53,
+		boolean		a52
+	} with { variant "" };
+	type record MsClassmark2LV {
+		uint8_t		len,
+		MsClassmark2	cm2
+	} with { variant (len) "LENGTHTO(cm2)" };
+
+
+	/* 44.018 10.5.2.5 */
+	type record ChannelDescription {
+		RslChannelNr	chan_nr,
+		uint3_t		tsc,
+		boolean		h,
+		uint12_t	arfcn optional,
+		MaioHsn		maio_hsn optional
+	} with { variant (arfcn) "PRESENCE(h = false)"
+		 variant (maio_hsn) "PRESENCE(h = true)" };
+
+	type record ChannelDescriptionTV {
+		OCT1		iei,
+		ChannelDescription v
+	} with { variant "" };
+
+	/* 10.5.2.21 */
+	type record MobileAllocation {
+		uint8_t 	len,
+		bitstring	ma
+	} with { variant (len) "LENGTHTO(ma)" };
+
+	/* 10.5.2.25a */
+	type OCT3 PacketChannelDescription;
+
+	/* 10.5.2.25b */
+	type record DedicatedModeOrTbf {
+		BIT1	spare,
+		boolean	tma,
+		boolean	downlink,
+		boolean tbf
+	} with { variant "" };
+
+	/* 10.5.2.26 */
+	type enumerated PageMode {
+		PAGE_MODE_NORMAL,
+		PAGE_MODE_EXTENDED,
+		PAGE_MODE_REORGANIZATION,
+		PAGE_MODE_SAME_AS_BEFORE
+	} with { variant "FIELDLENGTH(4)" };
+
+	/* 10.5.2.30 */
+	type record RequestReference {
+		bitstring	ra length(8),
+		uint5_t 	t1p,
+		uint6_t 	t3,
+		uint5_t		t2
+	} with { variant "" };
+
+	template RequestReference t_RequestReference(template bitstring ra, template uint5_t t1p, template uint6_t t3, template uint5_t t2) := {
+		ra := ra,
+		t1p := t1p,
+		t3 := t3,
+		t2 := t2
+	}
+
+	/* compute the expected request reference for given RA + FN */
+	function f_compute_ReqRef(uint8_t ra, GsmFrameNumber fn) return RequestReference {
+		var RequestReference req_ref := { ra := int2bit(ra, 8) };
+		req_ref.t1p := (fn / 1326) mod 32;
+		req_ref.t2 := fn mod 26;
+		req_ref.t3 := fn mod 51;
+		return req_ref
+	}
+
+	/* 10.5.2.40 */
+	type integer TimingAdvance (0..219);
+
+	/* 10.5.2.43 */
+	type uint8_t WaitIndication;
+
+	/* 10.5.2.76 */
+	type record FeatureIndicator {
+		BIT2	spare,
+		boolean	cs_ir,
+		boolean	ps_ir
+	} with { variant "" };
+
+	/* 24.008 10.5.5.6 */
+	type record DrxParameter {
+		uint8_t		split_pg_cycle_code,
+		uint4_t		drx_cycle_len_coeff,
+		boolean		split_on_ccch,
+		uint3_t		non_drx_timer
+	} with { variant "" };
+
+	/* 24.008 10.5.5.15 */
+	type record RoutingAreaIdentification {
+		LocationAreaIdentification	lai,
+		uint8_t				rac
+	} with { variant "" };
+
+	/* 44.018 10.5.2.16 */
+	type record IaRestOctHL {
+		uint6_t		freq_par_len,
+		BIT2		padding ('00'B) optional,
+		uint6_t		maio optional,
+		octetstring	mobile_allocation optional
+	} with {
+		variant (freq_par_len)	"LENGTHTO(mobile_allocation,maio,padding)"
+/*
+		variant (padding)	"PRESENCE(freq_par_len != 0)"
+		variant (maio)		"PRESENCE(freq_par_len != 0)"
+		variant (mobile_allocation) "PRESENCE(freq_par_len != 0)"
+*/
+	};
+	type record IaRestOctHH {
+		BIT2			presence,
+		PacketUlAssign		ul optional,
+		PacketDlAssign		dl optional
+	} with {
+		variant (ul) "PRESENCE(presence = '00'B)"
+		variant (dl) "PRESENCE(presence = '01'B)"
+	};
+	type record PacketUlAssignDyn {
+		uint5_t		tfi_assignment,
+		BIT1		polling,
+		BIT1		spare ('0'B),
+		uint3_t		usf,
+		BIT1		usf_granularity,
+		BIT1		p0_present,
+		uint4_t		p0 optional,
+		BIT1		pr_mode optional,
+		ChCodingCommand	ch_coding_cmd,
+		BIT1		tlli_block_chan_coding,
+		BIT1		alpha_present,
+		uint4_t		alpha optional,
+		uint5_t		gamma,
+		BIT1		ta_index_present,
+		uint4_t		ta_index optional,
+		BIT1		tbf_starting_time_present,
+		uint16_t	tbf_starting_time optional
+	} with {
+		variant (p0)		"PRESENCE(p0_present = '1'B)"
+		variant (pr_mode)	"PRESENCE(p0_present = '1'B)"
+		variant (alpha)		"PRESENCE(alpha_present = '1'B)"
+		variant (ta_index)	"PRESENCE(ta_index_present = '1'B)"
+		variant (tbf_starting_time)	"PRESENCE(tbf_starting_time_present = '1'B)"
+	};
+	type record PacketUlAssignSgl {
+		BIT1		alpha_present,
+		uint4_t		alpha optional,
+		uint5_t		gamma,
+		BIT2		padding ('01'B),
+		uint16_t	tbf_starting_time
+		/* TODO: P0 / PR_MODE */
+	} with {
+		variant (alpha)		"PRESENCE(alpha_present = '1'B)"
+	};
+	type record PacketUlAssign {
+		BIT1			presence,
+		PacketUlAssignDyn	dynamic optional,
+		PacketUlAssignSgl	single optional
+		/* TODO: Estended RA, PFI */
+	} with {
+		variant (dynamic)	"PRESENCE(presence = '1'B)"
+		variant (single)	"PRESENCE(presence = '0'B)"
+	};
+	type record PacketDlAssG1 {
+		uint5_t		tfi_assignment,
+		BIT1		rlc_mode,
+		BIT1		alpha_present,
+		uint4_t		alpha optional,
+		uint5_t		gamma,
+		BIT1		polling,
+		BIT1		ta_valid
+	} with { variant "" };
+	type record PacketDlAssign {
+		GprsTlli	tlli,
+		BIT1		group1_present,
+		PacketDlAssG1	group1 optional,
+		BIT1		ta_index_present,
+		uint4_t		ta_index optional,
+		BIT1		tbf_starting_time_present,
+		uint16_t	tbf_starting_time optional,
+		BIT1		p0_present,
+		uint4_t		p0 optional,
+		BIT1		pr_mode optional
+		/* TODO: EGPRS window size, etc. */
+	} with {
+		variant (group1)	"PRESENCE(group1_present = '1'B)"
+		variant (ta_index)	"PRESENCE(ta_index_present = '1'B)"
+		variant (tbf_starting_time)	"PRESENCE(tbf_starting_time_present = '1'B)"
+		variant (p0)		"PRESENCE(p0_present = '1'B)"
+		variant (pr_mode)	"PRESENCE(p0_present = '1'B)"
+	};
+	type record IaRestOctLL {
+		BIT1		compressed_irat_ho_info_ind
+	} with { variant "" };
+	type octetstring EgprsUlAss;	/* TODO */
+	type octetstring MblkDlAss;	/* TODO */
+	type record IaRestOctLH {
+		BIT2		presence,
+		EgprsUlAss	egprs_ul optional,
+		MblkDlAss	multiblock_dl_ass optional
+	} with {
+		variant (egprs_ul) "PRESENCE(presence = '00'B)"
+		variant (multiblock_dl_ass) "PRESENCE(presence = '01'B)"
+	};
+	type record IaRestOctets {
+		BIT2		presence,
+		IaRestOctLL	ll optional,
+		IaRestOctLH	lh optional,
+		IaRestOctHL	hl optional,
+		IaRestOctHH	hh optional
+	} with {
+		variant (ll) "PRESENCE(presence = '00'B)"
+		variant (lh) "PRESENCE(presence = '01'B)"
+		variant (hl) "PRESENCE(presence = '10'B)"
+		variant (hh) "PRESENCE(presence = '11'B)"
+	};
+
+
+	/* 9.1.18 */
+	type record ImmediateAssignment {
+		DedicatedModeOrTbf		ded_or_tbf,
+		PageMode			page_mode,
+		ChannelDescription		chan_desc optional,
+		PacketChannelDescription	pkt_chan_desc optional,
+		RequestReference		req_ref,
+		TimingAdvance			timing_advance,
+		MobileAllocation		mobile_allocation,
+		/* TODO: starting time TLV */
+		IaRestOctets			rest_octets
+	} with { variant (chan_desc) "PRESENCE(ded_or_tbf.tbf = false)"
+		 variant (pkt_chan_desc) "PRESENCE(ded_or_tbf.tbf = true)" };
+
+	/* 9.1.20 */
+	type record ReqRefWaitInd {
+		RequestReference		req_ref,
+		WaitIndication			wait_ind
+	} with { variant "" };
+	type record length(4) of ReqRefWaitInd ReqRefWaitInd4;
+	type record ImmediateAssignmentReject {
+		FeatureIndicator		feature_ind,
+		PageMode			page_mode,
+		ReqRefWaitInd4			payload
+	} with { variant "" };
+
+	/* 9.1.22 */
+	type record PagingRequestType1 {
+		ChannelNeeded12			chan_needed,
+		PageMode			page_mode,
+		MobileIdentityLV		mi1,
+		MobileIdentityTLV		mi2 optional,
+		RestOctets			rest_octets
+	} with { variant "TAG(mi2, tag = 23)" };
+
+	/* 9.1.23 */
+	type record PagingRequestType2 {
+		ChannelNeeded12			chan_needed,
+		PageMode			page_mode,
+		GsmTmsi				mi1,
+		GsmTmsi				mi2,
+		MobileIdentityTLV		mi3 optional,
+		RestOctets			rest_octets
+	} with { variant "TAG(mi3, tag = 23)" };
+
+	/* 9.1.24 */
+	type record length(4) of GsmTmsi GsmTmsi4;
+	type record PagingRequestType3 {
+		ChannelNeeded12			chan_needed,
+		PageMode			page_mode,
+		GsmTmsi4			mi,
+		RestOctets			rest_octets
+	} with { variant "" };
+
+
+	type union RrUnion {
+/*
+		SystemInformationType1		si1,
+		SystemInformationType2		si2,
+		SystemInformationType2bis	si2bis,
+		SystemInformationType2ter	si2ter,
+		SystemInformationType3		si3,
+		SystemInformationType4		si4,
+		SystemInformationType5		si5,
+		SystemInformationType5bis	si5bis,
+		SystemInformationType5ter	si5ter,
+		SystemInformationType6		si6,
+*/
+		ImmediateAssignment		imm_ass,
+		ImmediateAssignmentReject	imm_ass_rej,
+		PagingRequestType1		pag_req_1,
+		PagingRequestType2		pag_req_2,
+		PagingRequestType3		pag_req_3,
+		octetstring			other
+	} with { variant "" };
+
+	/* Special RR Message on BCCH / CCCH Dowlink */
+
+	type record GsmRrMessage {
+		RrHeader	header,
+		RrUnion		payload
+	} with { variant (payload) "CROSSTAG(
+/*
+			      si1, header.message_type = SYSTEM_INFORMATION_TYPE_1;
+			      si2, header.message_type = SYSTEM_INFORMATION_TYPE_2;
+			      si2bis, header.message_type = SYSTEM_INFORMATION_TYPE_2bis;
+			      si2ter, header.message_type = SYSTEM_INFORMATION_TYPE_2ter;
+			      si3, header.message_type = SYSTEM_INFORMATION_TYPE_3;
+			      si4, header.message_type = SYSTEM_INFORMATION_TYPE_4;
+			      si5, header.message_type = SYSTEM_INFORMATION_TYPE_5;
+			      si5bis, header.message_type = SYSTEM_INFORMATION_TYPE_5bis;
+			      si5ter, header.message_type = SYSTEM_INFORMATION_TYPE_5ter;
+			      si6, header.message_type = SYSTEM_INFORMATION_TYPE_6;
+*/
+				imm_ass, header.message_type = IMMEDIATE_ASSIGNMENT;
+				imm_ass_rej, header.message_type = IMMEDIATE_ASSIGNMENT_REJECT;
+				pag_req_1, header.message_type = PAGING_REQUEST_TYPE_1;
+				pag_req_2, header.message_type = PAGING_REQUEST_TYPE_2;
+				pag_req_3, header.message_type = PAGING_REQUEST_TYPE_3;
+			      other, OTHERWISE;
+			)" };
+
+	external function enc_GsmRrMessage(in GsmRrMessage msg) return octetstring
+		with { extension "prototype(convert) encode(RAW)" };
+	external function dec_GsmRrMessage(in octetstring stream) return GsmRrMessage
+		with { extension "prototype(convert) decode(RAW)" };
+
+	/* Normal L3 Message on Dedicated Channel */
+
+	/* 9.1.25 Paging Response */
+	type record PagingResponse {
+		uint4_t			spare_half_octet,
+		CipheringKeySeqNr	cksn,
+		MsClassmark2LV		cm2,
+		MobileIdentityLV	mi,
+		uint8_t			addl_upd_par optional
+	} with { variant "" };
+
+	type union RrL3Union {
+		PagingResponse	paging_response,
+		octetstring	other
+	};
+
+	type record GsmRrL3Message {
+		RrL3Header	header,
+		RrL3Union	payload
+	} with { variant (payload) "CROSSTAG(
+				paging_response, header.message_type = PAGING_RESPONSE;
+
+				other, OTHERWISE;
+		)" }
+
+} with { encode "RAW" ; variant "FIELDORDER(msb)" }
