RLCMAC_CSN1_Types: Add release 6 and release 8 additions to PacketCellChangeNotification
The PacketCellChangeNotification type currently lacks the release 6 and
the release 8 additions. Those basically add 3G and 4g/5g compatibility to the
PacketCellChangeNotification message type.
Spec reference: 3gpp TS 44.060 11.2.3a
Related: OS#6044
Co-authored-by: Vadim Yanitskiy <vyanitskiy@sysmocom.de>
Change-Id: I4e1c63c06fb89111765df187a93db563e77c3fc4
diff --git a/library/RLCMAC_CSN1_Templates.ttcn b/library/RLCMAC_CSN1_Templates.ttcn
index 943717e..000709d 100644
--- a/library/RLCMAC_CSN1_Templates.ttcn
+++ b/library/RLCMAC_CSN1_Templates.ttcn
@@ -162,15 +162,20 @@
is_dl_tfi := false,
tfi := tfi
},
- arfcn_bsic_presence := '0'B,
- arfcn := arfcn,
- bsic := bsic,
+ u := {
+ u0 := {
+ tag := '0'B,
+ arfcn := arfcn,
+ bsic := bsic
+ }
+ },
ba_psi3_presence := '0'B,
ba_used := '0'B,
psi3_change_mark := omit,
pmo_used := '0'B,
pccn_sending := '0'B,
- ccn_meas_rep := ccn_meas_rep
+ ccn_meas_rep := ccn_meas_rep,
+ rel_additions := omit
}
}
};
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn
index 2093f55..917b5d5 100644
--- a/library/RLCMAC_CSN1_Types.ttcn
+++ b/library/RLCMAC_CSN1_Types.ttcn
@@ -941,7 +941,76 @@
variant (sign_var) "PRESENCE(sign_var_presence = '1'B)"
};
- /* 11.2.3a Packet Cell Change Notification */
+ /* 11.2.3a Packet Cell Change Notification, 3G Target Cell Struct (Rel-6 extension) */
+ type record UtranTargetCellFdd {
+ uint14_t arfcn,
+ BIT1 bandwidth_presence,
+ uint3_t bandwidth optional,
+ uint10_t scrambling_code
+ } with {
+ variant (bandwidth) "PRESENCE(bandwidth_presence = '1'B)"
+ };
+ type record UtranTargetCellTdd {
+ uint14_t arfcn,
+ BIT1 bandwidth_presence,
+ uint3_t bandwidth optional,
+ uint7_t cell_parameter,
+ BIT1 sync_case
+ } with {
+ variant (bandwidth) "PRESENCE(bandwidth_presence = '1'B)"
+ };
+ type record UtranTargetCell {
+ BIT1 fdd_presence,
+ UtranTargetCellFdd fdd optional,
+ BIT1 tdd_presence,
+ UtranTargetCellTdd tdd optional,
+ uint6_t reporting_quantity
+ } with {
+ variant (fdd) "PRESENCE(fdd_presence = '1'B)"
+ variant (tdd) "PRESENCE(tdd_presence = '1'B)"
+ };
+
+ /* 11.2.3a Packet Cell Change Notification, Eutran Target Cell Struct (Rel-8 extension) */
+ type record EutranTargetCell {
+ uint16_t earfcn,
+ BIT1 meas_bandwidth_presence,
+ uint3_t meas_bandwidth optional,
+ uint9_t phys_layer_cell_id,
+ uint6_t reporting_quantity
+ } with {
+ variant (meas_bandwidth) "PRESENCE(meas_bandwidth_presence = '1'B)"
+ };
+
+ /* 11.2.3a Packet Cell Change Notification, 3G CCN Measurement Report Struct (Rel-6 extension) */
+ type record of UtranCCNMeasReportItem UtranReportingQuantityList;
+ type record UtranCCNMeasReportItem {
+ uint7_t cell_list_index,
+ uint6_t reporting_quantity
+ } with { variant "" };
+ type record UtranCCNMeasReport {
+ uint3_t n_3g,
+ UtranReportingQuantityList cells
+ } with {
+ variant (n_3g) "LENGTHTO(cells) - 1"
+ variant (n_3g) "UNIT(elements)"
+ };
+
+ /* 11.2.3a Packet Cell Change Notification, E-UTRAN CCN Measurement Report Struct (Rel-8 extension) */
+ type record length(1..4) of EutranCCNMeasReportItem EutranReportingQuantityList;
+ type record EutranCCNMeasReportItem {
+ uint3_t frequency_list_index,
+ uint9_t cell_identity,
+ uint6_t reporting_quantity
+ } with { variant "" };
+ type record EutranCCNMeasReport {
+ uint1_t utran_ba_used,
+ uint2_t n_eutran,
+ EutranReportingQuantityList cells
+ } with {
+ variant (n_eutran) "LENGTHTO(cells) - 1"
+ variant (n_eutran) "UNIT(elements)"
+ };
+
type record NCMeasurementItem {
uint6_t freq,
BIT1 bsic_presence,
@@ -957,22 +1026,74 @@
uint3_t num_meas,
NCMeasurements meas
} with { variant "" };
- type record PacketCellChangeNotification {
- GlobalTfi gtfi,
- /* TODO: support 3g/4g in these bits */
+
+ /* 11.2.3a Packet Cell Change Notification, Rel-Additions (Matrioshka) */
+ private type record PktCellChgNotifAdditions {
+ BIT1 rel6_presence,
+ PktCellChgNotifR6Additions rel6 optional
+ } with {
+ variant (rel6) "PRESENCE(rel6_presence = '1'B)"
+ };
+ private type record PktCellChgNotifR6Additions {
+ BIT1 utran_ba_used_presence,
+ uint1_t utran_ba_used optional,
+ UtranCCNMeasReport utran_ccn_meas_rep
+ } with {
+ variant (utran_ba_used) "PRESENCE(utran_ba_used_presence = '1'B)"
+ };
+
+ private type record PktCellChgNotifyU0 {
+ BIT1 tag ('0'B),
+ uint10_t arfcn,
+ uint6_t bsic
+ } with { variant "" };
+ private type record PktCellChgNotifyU10 {
+ BIT2 tag ('10'B),
+ UtranTargetCell utran_target_cell
+ } with { variant "" };
+ private type record PktCellChgNotifyU110 {
+ BIT3 tag ('110'B),
BIT1 arfcn_bsic_presence,
uint10_t arfcn optional,
uint6_t bsic optional,
+ BIT1 utran_target_cell_presence,
+ UtranTargetCell utran_target_cell optional,
+ BIT1 eutran_target_cell_presence,
+ EutranTargetCell eutran_target_cell optional,
+ BIT1 eutran_ccn_meas_rep_presence,
+ EutranCCNMeasReport eutran_ccn_meas_rep optional
+ } with {
+ variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)"
+ variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)"
+ variant (utran_target_cell) "PRESENCE(utran_target_cell_presence = '1'B)"
+ variant (eutran_target_cell) "PRESENCE(eutran_target_cell_presence = '1'B)"
+ variant (eutran_ccn_meas_rep) "PRESENCE(eutran_ccn_meas_rep_presence = '1'B)"
+ };
+ private type union PktCellChgNotifyUnion {
+ PktCellChgNotifyU0 u0,
+ PktCellChgNotifyU10 u10, /* Rel-6 additions */
+ PktCellChgNotifyU110 u110 /* Rel-8 additions */
+ /* TODO: PktCellChgNotifyU1110 Rel-9 additions */
+ /* TODO: Message escape : { 1111 } bit (*) = <no string> > */
+ } with {
+ variant "TAG(u0, tag = '0'B;
+ u10, tag = '10'B;
+ u110, tag = '110'B)"
+ };
+
+ /* 11.2.3a Packet Cell Change Notification, message body */
+ type record PacketCellChangeNotification {
+ GlobalTfi gtfi,
+ PktCellChgNotifyUnion u,
BIT1 ba_psi3_presence,
BIT1 ba_used optional,
BIT2 psi3_change_mark optional,
BIT1 pmo_used,
BIT1 pccn_sending,
- CCNMesurementReport ccn_meas_rep
- /* TODO: Rel6 additions for 3G support */
+ CCNMesurementReport ccn_meas_rep,
+ /* Rel-Additions (Matrioshka) */
+ PktCellChgNotifAdditions rel_additions optional
} with {
- variant (arfcn) "PRESENCE(arfcn_bsic_presence = '0'B)"
- variant (bsic) "PRESENCE(arfcn_bsic_presence = '0'B)"
variant (ba_used) "PRESENCE(ba_psi3_presence = '0'B)"
variant (psi3_change_mark) "PRESENCE(ba_psi3_presence = '1'B)"
};