gprs_gb: working UL TBF with segmentation
Change-Id: I0f93246f02e1bee2e1e9db62af5e1e3559c415e9
diff --git a/library/RLCMAC_Types.ttcn b/library/RLCMAC_Types.ttcn
index 937aa7b..78861ff 100644
--- a/library/RLCMAC_Types.ttcn
+++ b/library/RLCMAC_Types.ttcn
@@ -108,7 +108,7 @@
type record LlcBlockHdr {
uint6_t length_ind,
/* 1 = new LLC PDU starts */
- BIT1 more,
+ boolean more,
/* 0 = another extension octet after LLC PDU, 1 = no more extension octets */
boolean e
} with {
@@ -116,7 +116,7 @@
};
type record LlcBlock {
/* Header is only present if LI field was present */
- LlcBlockHdr hdr,
+ LlcBlockHdr hdr optional,
octetstring payload
} with { variant "" };
type record of LlcBlock LlcBlocks;
@@ -239,4 +239,119 @@
}
}
+ /* Template fro uplink Data block */
+ template RlcmacUlBlock t_RLCMAC_UL_DATA(template uint5_t tfi, template uint4_t cv, template uint7_t bsn,
+ template LlcBlocks blocks := {}, template boolean stall := false) := {
+ data := {
+ mac_hdr := {
+ payload_type := MAC_PT_RLC_DATA,
+ countdown := cv,
+ stall_ind := false,
+ retry := false,
+ spare := '0'B,
+ pfi_ind := false,
+ tfi := tfi,
+ tlli_ind := false,
+ bsn := bsn,
+ e := false
+ },
+ tlli := omit,
+ pfi := omit,
+ blocks := blocks
+ }
+ }
+ template RlcmacUlBlock t_RLCMAC_UL_DATA_TLLI(template uint5_t tfi, template uint4_t cv, template uint7_t bsn,
+ template LlcBlocks blocks := {}, template boolean stall := false, template GprsTlli tlli) := {
+ data := {
+ mac_hdr := {
+ payload_type := MAC_PT_RLC_DATA,
+ countdown := cv,
+ stall_ind := false,
+ retry := false,
+ spare := '0'B,
+ pfi_ind := false,
+ tfi := tfi,
+ tlli_ind := true,
+ bsn := bsn,
+ e := false
+ },
+ tlli := tlli,
+ pfi := omit,
+ blocks := blocks
+ }
+ }
+
+ template DlMacHeader t_RLCMAC_DlMacH(template MacPayloadType pt, template MacRrbp rrbp, template
+uint3_t usf) := {
+ payload_type := pt,
+ rrbp := rrbp,
+ rrbp_valid := ispresent(rrbp),
+ usf := usf
+ }
+
+ /* Receive Template for Downlink ACK/NACK */
+ template RlcmacDlBlock tr_RLCMAC_ACK_NACK(template uint5_t ul_tfi, template GprsTlli tlli := ?) := {
+ ctrl := {
+ mac_hdr := {
+ payload_type := (MAC_PT_RLCMAC_NO_OPT, MAC_PT_RLCMAC_OPT),
+ rrbp:= ?,
+ rrbp_valid := true,
+ usf := ?
+ },
+ opt := *,
+ payload := {
+ msg_type := PACKET_UL_ACK_NACK,
+ u := {
+ ul_ack_nack := {
+ page_mode := ?,
+ msg_excape := ?,
+ uplink_tfi := ul_tfi,
+ is_egprs := '0'B,
+ gprs := {
+ ch_coding_cmd := ?,
+ ack_nack_desc := ?,
+ cont_res_tlli_present := ?,
+ cont_res_tlli := tlli,
+ pkt_ta_present := ?,
+ pkt_ta := *,
+ pwr_ctrl_present := ?,
+ pwr_ctrl := *
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* Template for Uplink MAC Control Header */
+ template UlMacCtrlHeader t_RLCMAC_UlMacCtrlH(template MacPayloadType pt, template boolean retry := false) := {
+ payload_type := pt,
+ spare := '00000'B,
+ retry := retry
+ }
+
+ /* Template for Uplink Conntrol ACK */
+ template RlcmacUlBlock ts_RLCMAC_CTRL_ACK(GprsTlli tlli, CtrlAck ack := MS_RCVD_TWO_RLC_SAME_RTI_DIFF_RBSN) := {
+ ctrl := {
+ mac_hdr := t_RLCMAC_UlMacCtrlH(MAC_PT_RLCMAC_NO_OPT),
+ payload := {
+ msg_type := PACKET_CONTROL_ACK,
+ u := {
+ ctrl_ack := {
+ tlli := tlli,
+ ctrl_ack := ack
+ }
+ }
+ }
+ }
+ }
+
+ /* Template for a LlcBlock (part of a LLC frame inside RlcMac?lDataBlock */
+ template LlcBlock t_RLCMAC_LLCBLOCK(octetstring data, boolean more := false, boolean e := true) := {
+ /* let encoder figure out the header */
+ hdr := omit,
+ payload := data
+ }
+
+
} with { encode "RAW"; variant "FIELDORDER(msb)" }