aboutsummaryrefslogtreecommitdiffstats
path: root/library/RLCMAC_CSN1_Types.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/RLCMAC_CSN1_Types.ttcn')
-rw-r--r--library/RLCMAC_CSN1_Types.ttcn505
1 files changed, 492 insertions, 13 deletions
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn
index cc1ae22a..a4ed3076 100644
--- a/library/RLCMAC_CSN1_Types.ttcn
+++ b/library/RLCMAC_CSN1_Types.ttcn
@@ -32,6 +32,8 @@ module RLCMAC_CSN1_Types {
PACKET_TBF_RELEASE ('001000'B),
PACKET_UL_ACK_NACK ('001001'B),
PACKET_UL_ASSIGNMENT ('001010'B),
+ PACKET_CELL_CHANGE_CONTINUE ('001011'B),
+ PACKET_NEIGHBOUR_CELL_DATA ('001100'B),
PACKET_DL_DUMMY_CTRL ('100101'B)
} with { variant "FIELDLENGTH(6)" };
@@ -49,7 +51,7 @@ module RLCMAC_CSN1_Types {
PACKET_EGPRS_DL_ACK_NACK ('001000'B),
PACKET_PAUSE ('001001'B),
ADDITIONAL_MS_RA_CAPABILITIES ('001011'B),
- PACKET_CELL_CANGE_NOTIFICATION ('001100'B),
+ PACKET_CELL_CHANGE_NOTIFICATION ('001100'B),
PACKET_SI_STATUS ('001101'B),
PACKET_CS_REQUEST ('001110'B),
MBMS_SERVICE_REQUEST ('001111'B),
@@ -161,6 +163,80 @@ module RLCMAC_CSN1_Types {
variant (tbf_starting_time) "PRESENCE(tbf_starting_time_present = '1'B)"
};
+ /* 11.2.9b Packet Measurement Order */
+ type enumerated NetworkControlOrder {
+ NC_0 ('00'B),
+ NC_1 ('01'B),
+ NC_2 ('10'B),
+ NC_RESET ('11'B)
+ } with { variant "FIELDLENGTH(2)" };
+ type record CellSelection {
+ BIT1 cell_barr_access_2,
+ BIT1 exc_acc,
+ BIT1 same_ra_as_serving_cell,
+ BIT1 gprs_rxlev_access_min_present ('0'B),
+ BIT1 gprs_temporary_offset_present ('0'B),
+ BIT1 gprs_reselct_offset_present ('0'B),
+ BIT1 hcs_params_present ('0'B),
+ BIT1 si13_pbcch_location_present ('0'B)
+ /* TODO: add optional parameters above^ */
+ };
+ type record AddFrequency {
+ uint10_t start_frequency,
+ uint6_t bsic,
+ BIT1 cell_sel_par_present,
+ CellSelection cell_sel_par optional,
+ uint5_t nr_of_frequencies,
+ uint3_t freq_diff_length
+ /* TODO: support Frequency diff list */
+ } with {
+ variant (cell_sel_par) "PRESENCE(cell_sel_par_present = '1'B)"
+ };
+ type record RepeatedAddFrequencyItem {
+ BIT1 presence,
+ AddFrequency item
+ } with { variant "PRESENCE(presence = '1'B)" };
+ type record of uint6_t FreqIndexList;
+ type record of RepeatedAddFrequencyItem RepeatedAddFrequencyItemList;
+ type record NCFrequencyList {
+ BIT1 removed_freq_present,
+ uint5_t nr_of_removed_freq optional,
+ FreqIndexList removed_freq_index optional,
+ RepeatedAddFrequencyItemList repeated_add_frequency optional,
+ BIT1 repeated_add_frequency_term ('0'B)
+ } with {
+ variant (nr_of_removed_freq) "PRESENCE(removed_freq_present = '1'B)"
+ variant (removed_freq_index) "PRESENCE(removed_freq_present = '1'B)"
+ variant (nr_of_removed_freq) "LENGTHTO(removed_freq_index)-1"
+ variant (nr_of_removed_freq) "UNIT(elements)"
+ };
+ type record NCMeasurementParameters {
+ NetworkControlOrder nco,
+ BIT1 nc_period_present,
+ uint3_t nc_non_drx_period optional,
+ uint3_t nc_reporting_period_i optional,
+ uint3_t nc_reporting_period_t optional,
+ BIT1 nc_freq_list_present,
+ NCFrequencyList nc_freq_list optional
+ } with {
+ variant (nc_non_drx_period) "PRESENCE(nc_period_present = '1'B)"
+ variant (nc_reporting_period_i) "PRESENCE(nc_period_present = '1'B)"
+ variant (nc_reporting_period_t) "PRESENCE(nc_period_present = '1'B)"
+ variant (nc_freq_list) "PRESENCE(nc_freq_list_present = '1'B)"
+ };
+ type record PacketMeasOrder {
+ PageMode page_mode,
+ GlobalTfiOrTlli tfi_or_tlli,
+ uint3_t pmo_index,
+ uint3_t pmo_count,
+ BIT1 nc_meas_param_present,
+ NCMeasurementParameters nc_meas_param optional,
+ BIT1 zero('0'B) /* The value '1' was allocated in an earlier version of the protocol and shall not be used. */
+ /* TODO: support Additions 98 onwards */
+ } with {
+ variant (nc_meas_param) "PRESENCE(nc_meas_param_present = '1'B)"
+ };
+
private type record PktDlAssRelAdditions {
BIT1 rel99_presence, // 0/1
PktDlAssR99Additions rel99 optional
@@ -416,18 +492,22 @@ module RLCMAC_CSN1_Types {
} with {
variant "TAG(ps, presence = '0'B; cs, presence = '1'B)"
};
+ type record RepeatedPageInfoItem {
+ BIT1 presence,
+ PageInfo item
+ } with { variant "PRESENCE(presence = '1'B)" };
+ type record of RepeatedPageInfoItem RepeatedPageInfo;
type record PacketPagingReq {
PageMode page_mode,
BIT1 persistence_levels_present,
PersistenceLevels persistence_levels optional,
BIT1 nln_present,
uint2_t nln optional,
- BIT1 repeated_pageinfo_present,
- PageInfo repeated_pageinfo optional
+ RepeatedPageInfo repeated_pageinfo optional,
+ BIT1 repeated_pageinfo_term ('0'B)
} with {
variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"
variant (nln) "PRESENCE(nln_present = '1'B)"
- variant (repeated_pageinfo) "PRESENCE(repeated_pageinfo_present = '1'B)"
};
/* 12.26 Extension Bits IE */
@@ -478,6 +558,7 @@ module RLCMAC_CSN1_Types {
variant (cont_res_tlli) "BYTEORDER(first)"
};
type record UlAckNackEgprs {
+ BIT2 msg_excape ('00'B),
EgprsChCodingCommand ch_coding_cmd,
BIT1 resegment,
BIT1 preemptive_tx,
@@ -581,14 +662,59 @@ module RLCMAC_CSN1_Types {
variant (msg) "PRESENCE(msg_escape = '0'B)"
};
+ /* 11.2.2a Packet Cell Change Continue */
+ type record PacketCellChangeContinue {
+ PageMode page_mode,
+ BIT1 zero ('0'B),
+ GlobalTfi gtfi,
+ BIT1 arfcn_bsic_presence,
+ uint10_t arfcn optional,
+ uint6_t bsic optional,
+ uint2_t container_id optional
+ } with {
+ variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)"
+ variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)"
+ variant (container_id) "PRESENCE(arfcn_bsic_presence = '1'B)"
+ };
+
+ /* 11.2.9e Packet Neighbour Cell Data */
+ type record PacketNeighbourCellDataContainer {
+ BIT3 pd,
+ uint5_t cd_length,
+ octetstring container_data
+ } with {
+ variant (cd_length) "LENGTHTO (container_data)"
+ variant (container_data) "BYTEORDER(first)"
+ };
+ type record of PacketNeighbourCellDataContainer PacketNeighbourCellDataContainerList
+ type record PacketNeighbourCellData {
+ PageMode page_mode,
+ BIT1 zero ('0'B),
+ GlobalTfi gtfi,
+ uint2_t container_id,
+ BIT1 spare ('0'B),
+ uint5_t container_index,
+ BIT1 arfcn_bsic_presence,
+ uint10_t arfcn optional,
+ uint6_t bsic optional,
+ PacketNeighbourCellDataContainerList container_list
+ } with {
+ variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)"
+ variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)"
+ };
+
/* 11.2.0.1 */
type union RlcmacDlCtrlUnion {
+ PacketAccessReject access_reject,
PacketDlAssignment dl_assignment,
+ PacketMeasOrder meas_order,
PacketUlAssignment ul_assignment,
PacketPagingReq paging,
PacketUlAckNack ul_ack_nack,
PacketDlDummy dl_dummy,
PacketPwrControlTA pwr_ta,
+ PacketCellChangeContinue cell_chg_continue,
+ PacketNeighbourCellData neighbour_cell_data,
octetstring other
} with { variant "" };
@@ -596,12 +722,16 @@ module RLCMAC_CSN1_Types {
RlcmacDlCtrlMsgType msg_type,
RlcmacDlCtrlUnion u
} with {
- variant (u) "CROSSTAG(dl_assignment, msg_type = PACKET_DL_ASSIGNMENT;
+ variant (u) "CROSSTAG(access_reject, msg_type = PACKET_ACCESS_REJECT;
+ dl_assignment, msg_type = PACKET_DL_ASSIGNMENT;
+ meas_order, msg_type = PACKET_MEASUREMENT_ORDER;
ul_assignment, msg_type = PACKET_UL_ASSIGNMENT;
paging, msg_type = PACKET_PAGING_REQUEST;
ul_ack_nack, msg_type = PACKET_UL_ACK_NACK;
dl_dummy, msg_type = PACKET_DL_DUMMY_CTRL;
pwr_ta, msg_type = PACKET_PWR_CONTROL_TA;
+ cell_chg_continue,msg_type = PACKET_CELL_CHANGE_CONTINUE;
+ neighbour_cell_data,msg_type = PACKET_NEIGHBOUR_CELL_DATA;
other, OTHERWISE
)"
};
@@ -611,8 +741,37 @@ module RLCMAC_CSN1_Types {
external function dec_RlcmacDlCtrlMsg(in octetstring stream) return RlcmacDlCtrlMsg
with { extension "prototype(convert) decode(RAW)" };
+ /* 11.2.1 Packet Access Reject */
+ type record PacketAccessRejectIDSub {
+ BIT1 id_type,
+ PacketRequestReference req_ref optional,
+ GlobalTfi gtfi optional
+ } with { variant (req_ref) "PRESENCE(id_type = '0'B)"
+ variant (gtfi) "PRESENCE(id_type = '1'B)"
+ };
+ type union PacketAccessRejectID {
+ GprsTlli tlli,
+ PacketAccessRejectIDSub id_sub
+ } with { variant (tlli) "BYTEORDER(first)" };
+ type record PacketAccessRejectStruct {
+ BIT1 id_type,
+ PacketAccessRejectID id,
+ BIT1 wait_ind_presence,
+ uint8_t wait_ind optional,
+ BIT1 wait_ind_size optional
+ } with { variant (id) "CROSSTAG(tlli, id_type = '0'B; id_sub, id_type = '1'B)"
+ variant (wait_ind) "PRESENCE(wait_ind_presence = '1'B)"
+ variant (wait_ind_size) "PRESENCE(wait_ind_presence = '1'B)"
+ };
+ type record PacketAccessReject {
+ PageMode page_mode,
+ PacketAccessRejectStruct reject_struct
+ /* TODO: Additional Reject */
+ /* TODO: Rel5 additions */
+ } with { variant "" };
+
- /* 11.2.6 Packet Downlikn Ack/Nack */
+ /* 11.2.6 Packet Downlink Ack/Nack */
type record ILevel {
BIT1 presence,
uint4_t i_level optional
@@ -630,7 +789,60 @@ module RLCMAC_CSN1_Types {
BIT1 chreq_desc_presence,
ChannelReqDescription chreq_desc optional,
ChannelQualityReport ch_qual_rep
+ } with { variant (chreq_desc) "PRESENCE(chreq_desc_presence = '1'B)" };
+
+ /* 11.2.6a Egprs Packet Downlink Ack/Nack */
+ type record EgprsBEPLinkQualityMeasurements {
+ BIT1 gmsk_presence,
+ BIT5 gmsk_mean_bep optional,
+ BIT3 gmsk_cv_bep optional,
+ BIT1 psk8_presence,
+ BIT5 psk8_mean_bep optional,
+ BIT3 psk8_cv_bep optional
+ } with { variant (gmsk_mean_bep) "PRESENCE(gmsk_presence = '1'B)"
+ variant (gmsk_cv_bep) "PRESENCE(gmsk_presence = '1'B)"
+ variant (psk8_mean_bep) "PRESENCE(psk8_presence = '1'B)"
+ variant (psk8_cv_bep) "PRESENCE(psk8_presence = '1'B)"
+ };
+ /* 12.5.4 EGPRS Timeslot Link Quality Measurements IE */
+ type record BEPMeas {
+ BIT1 presence,
+ BIT1 is_8psk optional,
+ uint4_t bep_meas optional
+ } with { variant (is_8psk) "PRESENCE(presence = '1'B)"
+ variant (bep_meas) "PRESENCE(presence = '1'B)"
+ };
+ type record length(8) of BEPMeas BEPMeasLi;
+ type record EgprsTimeslotLinkQualityMeasurements {
+ BIT1 bep_measurements_presence,
+ BEPMeasLi bep_meas optional,
+ BIT1 i_measurements_presence,
+ ILevels i_meas optional
+ } with { variant (bep_meas) "PRESENCE(bep_measurements_presence = '1'B)"
+ variant (i_meas) "PRESENCE(i_measurements_presence = '1'B)"
+ };
+ /* Table 12.5.1.1 : EGPRS Channel Quality Report Information elements */
+ type record EgprsChannelQualityReport {
+ EgprsBEPLinkQualityMeasurements bep_link_qual_meas,
+ uint6_t c_value,
+ EgprsTimeslotLinkQualityMeasurements ts_link_qual_meas
} with { variant "" };
+ type record EgprsPacketDlAckNack {
+ uint5_t dl_tfi,
+ BIT1 ms_oom,
+ BIT1 egprs_ch_qual_rep_presence,
+ EgprsChannelQualityReport egprs_ch_qual_rep optional,
+ BIT1 chreq_desc_presence,
+ ChannelReqDescription chreq_desc optional,
+ BIT1 pfi_presence,
+ BIT7 pfi optional,
+ BIT1 epdan_presence('0'B),
+ /* TODO: Implement EPD A/N */
+ EgprsAckNackDescriptionIE ack_nack_desc_ie
+ } with { variant (chreq_desc) "PRESENCE(chreq_desc_presence = '1'B)"
+ variant (egprs_ch_qual_rep) "PRESENCE(egprs_ch_qual_rep_presence = '1'B)"
+ variant (pfi) "PRESENCE(pfi_presence = '1'B)"
+ };
/* 11.2.2 Packet Control Acknowledgement */
type enumerated CtrlAck {
@@ -654,6 +866,38 @@ module RLCMAC_CSN1_Types {
variant (tlli) "BYTEORDER(first)"
};
+ /* 11.2.9 Packet Measurement Report */
+ type record NCMeasurement {
+ uint6_t frequency_n,
+ BIT1 bsic_n_presence,
+ BIT6 bsic_n optional,
+ uint6_t rxlev_n
+ } with {
+ variant (bsic_n) "PRESENCE(bsic_n_presence = '1'B)"
+ };
+ type record of NCMeasurement NCMeasurementList;
+ type record NCMeasurementReport {
+ BIT1 nc_mode,
+ uint6_t rxlev_serving_cell,
+ BIT1 zero ('0'B), /*The value '1' was allocated in an earlier version of the protocol and shall not be used.*/
+ uint3_t num_nc_measurements,
+ NCMeasurementList nm_measurements
+ } with {
+ variant (num_nc_measurements) "LENGTHTO(nm_measurements)"
+ variant (num_nc_measurements) "UNIT(elements)"
+ };
+ type record PacketMeasReport {
+ GprsTlli tlli,
+ BIT1 psi5_change_mark_presence,
+ BIT2 psi5_change_mark optional,
+ BIT1 additions_99 ('0'B), /* TODO: 1 -> support Additions 99 onwards */
+ NCMeasurementReport nc_meas_report optional
+ } with {
+ variant (tlli) "BYTEORDER(first)"
+ variant (psi5_change_mark) "PRESENCE(psi5_change_mark_presence = '1'B)"
+ variant (nc_meas_report) "PRESENCE(additions_99 = '0'B)"
+ };
+
/* TS 44.060 sec 12.30 MS Radio Access Capability 2
* (for value part, see 3GPP TS 24.008 sec 10.5.5.12a and table 10.5.146) */
type union MSRadioAccCap2 {
@@ -697,13 +941,173 @@ module RLCMAC_CSN1_Types {
variant (sign_var) "PRESENCE(sign_var_presence = '1'B)"
};
+ /* 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,
+ uint6_t bsic optional,
+ uint6_t rxlev
+ } with {
+ variant (bsic) "PRESENCE(bsic_presence = '1'B)"
+ };
+ type record of NCMeasurementItem NCMeasurements;
+ type record CCNMeasReport {
+ uint6_t rxlev_servig_cell,
+ BIT1 zero ('0'B),
+ uint3_t num_meas,
+ NCMeasurements meas
+ } with { variant "" };
+
+ /* 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,
+ CCNMeasReport ccn_meas_rep,
+ /* Rel-Additions (Matrioshka) */
+ PktCellChgNotifAdditions rel_additions optional
+ } with {
+ variant (ba_used) "PRESENCE(ba_psi3_presence = '0'B)"
+ variant (psi3_change_mark) "PRESENCE(ba_psi3_presence = '1'B)"
+ };
+
/* 11.2.0.2 */
type union RlcmacUlCtrlUnion {
- PacketCtrlAck ctrl_ack,
- PacketDlAckNack dl_ack_nack,
- PacketUlDummy ul_dummy,
- PacketResourceReq resource_req,
- octetstring other
+ PacketCtrlAck ctrl_ack,
+ PacketDlAckNack dl_ack_nack,
+ EgprsPacketDlAckNack dl_ack_nack_egprs,
+ PacketUlDummy ul_dummy,
+ PacketMeasReport meas_report,
+ PacketResourceReq resource_req,
+ PacketCellChangeNotification cell_chg_notif,
+ octetstring other
} with { variant "" };
type record RlcmacUlCtrlMsg {
@@ -712,8 +1116,11 @@ module RLCMAC_CSN1_Types {
} with {
variant (u) "CROSSTAG(ctrl_ack, msg_type = PACKET_CONTROL_ACK;
dl_ack_nack, msg_type = PACKET_DL_ACK_NACK;
+ dl_ack_nack_egprs, msg_type = PACKET_EGPRS_DL_ACK_NACK;
ul_dummy, msg_type = PACKET_UL_DUMMY_CTRL;
+ meas_report, msg_type = PACKET_MEASUREMENT_REPORT;
resource_req, msg_type = PACKET_RESOURCE_REQUEST;
+ cell_chg_notif, msg_type = PACKET_CELL_CHANGE_NOTIFICATION;
other, OTHERWISE
)"
};
@@ -732,6 +1139,27 @@ module RLCMAC_CSN1_Types {
ReceivedBlockBitmap receive_block_bitmap
} with { variant "" };
+ /* 12.3.1 Egprs Ack/Nack Description */
+ type bitstring UncompressedReceivedBlockBitmap length(64) with { variant "BYTEORDER(last)" };
+ type record EgprsAckNackDescription {
+ BIT1 final_ack,
+ BIT1 begin_window,
+ BIT1 end_window,
+ uint11_t starting_seq_nr,
+ BIT1 compressed,
+ /* TODO: CompressedReceivedBlockBitmap urbb optional, */
+ UncompressedReceivedBlockBitmap urbb optional
+ } with { variant (urbb) "PRESENCE(compressed = '0'B)" };
+ type record EgprsAckNackDescriptionIE {
+ BIT1 len_present,
+ uint8_t len optional,
+ EgprsAckNackDescription acknack_desc
+ } with { variant (len) "PRESENCE(len_present = '1'B)"
+ variant (len) "LENGTHTO(acknack_desc)"
+ variant (len) "UNIT(bits)"
+ };
+
+
/* 12.7 Channel Request Description */
type enumerated RlcMode {
RLC_MODE_ACKNOWLEDGED (0),
@@ -763,7 +1191,7 @@ module RLCMAC_CSN1_Types {
};
type record FreqDirect1 {
uint6_t maio,
- GprsMobileAllication mobile_allocation
+ GprsMobileAllocation mobile_allocation
}
type record FreqDirect2 {
uint6_t maio,
@@ -787,6 +1215,15 @@ module RLCMAC_CSN1_Types {
variant (direct2) "PRESENCE(presence = '11'B)"
};
+ /* 12.9a GPRS Power Control Parameters */
+ type record GprsPowerControlParameters {
+ uint4_t alpha,
+ BIT5 t_avg_w,
+ BIT5 t_avg_t,
+ BIT1 pc_meas_chan,
+ BIT4 n_avg_i
+ };
+
/* 12.10 Global TFI */
type record GlobalTfi {
boolean is_dl_tfi,
@@ -801,7 +1238,7 @@ module RLCMAC_CSN1_Types {
} with {
variant (rfl_number_list) "PRESENCE(presence = '1'B)"
};
- type record GprsMobileAllication {
+ type record GprsMobileAllocation {
uint6_t hsn,
BIT1 rfl_number_list_present,
RflNumberList rfl_number_list optional,
@@ -870,6 +1307,48 @@ module RLCMAC_CSN1_Types {
variant (relative_k) "PRESENCE(presence = '1'B)"
};
+ /* 12.24 GPRS Cell Options */
+ type record ExtensionInformation {
+ BIT1 egprs_supported,
+ BIT1 egprs_pkt_channel_req optional,
+ BIT4 bep_period optional,
+ BIT1 pfc_feature_mode,
+ BIT1 dtm_support,
+ BIT1 bss_paging_coordination,
+ /* REL-4 extension */
+ BIT1 ccn_active optional,
+ BIT1 nw_ext_utbf optional
+ /* TODO: REL-6 extension */
+ /* TODO: REL-7 extension */
+ /* TODO: REL-10 extension */
+ } with {
+ variant (egprs_pkt_channel_req) "PRESENCE(egprs_supported = '1'B)"
+ variant (bep_period) "PRESENCE(egprs_supported = '1'B)"
+ };
+ type record GprsCellOptions {
+ BIT2 nmo,
+ BIT3 t3168,
+ BIT3 t3192,
+ BIT3 drx_timer_max,
+ BIT1 access_burst_type,
+ BIT1 control_ack_type,
+ uint4_t bs_cv_max,
+ BIT1 pan_presence,
+ uint3_t pan_dec optional,
+ uint3_t pan_inc optional,
+ BIT3 pan_max optional,
+ BIT1 ext_info_presence,
+ BIT6 ext_info_length optional,
+ ExtensionInformation ext_info optional
+ } with {
+ variant (pan_dec) "PRESENCE(pan_presence = '1'B)"
+ variant (pan_inc) "PRESENCE(pan_presence = '1'B)"
+ variant (pan_max) "PRESENCE(pan_presence = '1'B)"
+ variant (ext_info_length) "PRESENCE(ext_info_presence = '1'B)"
+ variant (ext_info) "PRESENCE(ext_info_presence = '1'B)"
+ /* TODO: mark REL-4 and upwards in ext_info as omit based on ext_info_length ? */
+ };
+
/* 3GPP TS 44.060, table 11.2.5a.2 "EGPRS PACKET CHANNEL REQUEST" */
type union EGPRSPktChRequest {
EGPRSPktChRequest_MC5P2RB3 one_phase,