RSL_Types: Work around (perceived) shortcoming of TITAN RAW encoder
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index 439dda3..e3740eb 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -514,8 +514,11 @@
 					other, OTHERWISE;
 		)" };
 
-	template RSL_IE t_RSL_IE(template RSL_IE_Body body) := {
-		iei := RSL_IE_CHAN_NR, /* overwritten? */
+	/* For some reason the TTCN-3 RAW codec cannot automatically figure out the IEI
+	 * that it needs to set for a given union-choice (body).  So we have to explicitly
+	 * specify the IEI by the caller :( */
+	template RSL_IE t_RSL_IE(RSL_IE_Type iei, template RSL_IE_Body body) := {
+		iei := iei,
 		body := body
 	}
 
@@ -591,9 +594,9 @@
 		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_L16V(l3_info)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_LINK_IDENT, RSL_IE_Body:{link_id := link_id}),
+			t_RSL_IE(RSL_IE_L3_INFO, RSL_IE_Body:{l3_info := ts_RSL_L16V(l3_info)})
 		}
 	}
 
@@ -602,9 +605,9 @@
 		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_L16V(l3_info)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_LINK_IDENT, RSL_IE_Body:{link_id := link_id}),
+			t_RSL_IE(RSL_IE_L3_INFO, RSL_IE_Body:{l3_info := ts_RSL_L16V(l3_info)})
 		}
 	}
 
@@ -613,9 +616,9 @@
 		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)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_LINK_IDENT, RSL_IE_Body:{link_id := link_id}),
+			t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
 		}
 	}
 
@@ -624,9 +627,9 @@
 		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_L16V(l3_info)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_LINK_IDENT, RSL_IE_Body:{link_id := link_id}),
+			t_RSL_IE(RSL_IE_L3_INFO, RSL_IE_Body:{l3_info := ts_RSL_L16V(l3_info)})
 		}
 	}
 
@@ -635,8 +638,8 @@
 		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})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_LINK_IDENT, RSL_IE_Body:{link_id := link_id})
 		}
 	}
 	template RSL_Message tr_RSL_REL_REQ(template RslChannelNr chan_nr,
@@ -655,8 +658,8 @@
 		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})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_LINK_IDENT, RSL_IE_Body:{link_id := link_id})
 		}
 	}
 
@@ -665,8 +668,8 @@
 		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})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_LINK_IDENT, RSL_IE_Body:{link_id := link_id})
 		}
 	}
 
@@ -690,9 +693,9 @@
 		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})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_ACT_TYPE, RSL_IE_Body:{act_type := t_RSL_IE_ActType}),
+			t_RSL_IE(RSL_IE_CHAN_MODE, RSL_IE_Body:{chan_mode := mode})
 			/* lots of optional IEs */
 		}
 	}
@@ -702,8 +705,8 @@
 		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)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_FRAME_NUMBER, RSL_IE_Body:{frame_nr := ts_RSL_IE_FrameNumber(fn)})
 		}
 	}
 
@@ -712,8 +715,8 @@
 		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)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
 		}
 	}
 
@@ -722,8 +725,8 @@
 		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)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
 		}
 	}
 
@@ -746,7 +749,7 @@
 	template RSL_Message ts_RSL_RF_CHAN_REL_ACK(RslChannelNr chan_nr) :=
 		ts_RSL_MsgDiscType(ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
 				   RSL_MT_RF_CHAN_REL_ACK,
-				   { t_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}) });
+				   { t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}) });
 
 	/* COMMON CHANNEL MANAGEMENT MESSAGES */
 
@@ -755,16 +758,16 @@
 		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
 		msg_type := RSL_MT_CCCH_LOAD_IND,
 		ies := {
-			t_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_RACH(0)}),
-			t_RSL_IE(RSL_IE_Body:{rach_load := ts_RSL_IE_RachLoad(slot_ct, busy_ct, acc_ct)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := t_RslChanNr_RACH(0)}),
+			t_RSL_IE(RSL_IE_RACH_LOAD, RSL_IE_Body:{rach_load := ts_RSL_IE_RachLoad(slot_ct, busy_ct, acc_ct)})
 		}
 	}
 	template RSL_Message ts_RSL_PAGING_LOAD_IND(uint16_t buffer_space) := {
 		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
 		msg_type := RSL_MT_CCCH_LOAD_IND,
 		ies := {
-			t_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
-			t_RSL_IE(RSL_IE_Body:{paging_load := buffer_space})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
+			t_RSL_IE(RSL_IE_PAGING_LOAD, RSL_IE_Body:{paging_load := buffer_space})
 		}
 	}
 
@@ -773,9 +776,9 @@
 		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)}),
-			t_RSL_IE(RSL_IE_Body:{access_delay := acc_del})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := t_RslChanNr_RACH(0)}),
+			t_RSL_IE(RSL_IE_REQ_REFERENCE, RSL_IE_Body:{req_ref := ts_RSL_IE_ReqRef(ra, fn)}),
+			t_RSL_IE(RSL_IE_ACCESS_DELAY, RSL_IE_Body:{access_delay := acc_del})
 		}
 	}
 
@@ -784,8 +787,8 @@
 		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)})
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_FULL_IMM_ASS_INFO, RSL_IE_Body:{full_imm_ass_info := ts_RSL_LV(imm_ass)})
 		}
 	}
 
@@ -817,7 +820,7 @@
 		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)})
+			t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
 		}
 	}