pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmo-gprs/+/33552 )

Change subject: rlcmac: tbf_ul: Move to packet-idle state when T3164 triggers
......................................................................

rlcmac: tbf_ul: Move to packet-idle state when T3164 triggers

 TS 44.018 3.5.2.1.4:
"The one phase packet access procedure is completed at a successful
contention resolution. The mobile station has entered the packet transfer
mode. Timer T3141 is stopped on the network side. Timer T3164 is stopped
on the mobile station side."

Change-Id: Ic7420a42e2e81effdde587d7e49acd66b404354c
---
M include/osmocom/gprs/rlcmac/gre.h
M include/osmocom/gprs/rlcmac/rlcmac_private.h
M src/rlcmac/gre.c
M src/rlcmac/rlcmac.c
M src/rlcmac/tbf_dl_ass_fsm.c
M src/rlcmac/tbf_ul_fsm.c
M tests/rlcmac/rlcmac_prim_test.err
M tests/rlcmac/rlcmac_prim_test.ok
8 files changed, 220 insertions(+), 73 deletions(-)

Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved




diff --git a/include/osmocom/gprs/rlcmac/gre.h 
b/include/osmocom/gprs/rlcmac/gre.h
index c976b4a..0e17836 100644
--- a/include/osmocom/gprs/rlcmac/gre.h
+++ b/include/osmocom/gprs/rlcmac/gre.h
@@ -24,6 +24,8 @@

        struct gprs_rlcmac_dl_tbf *dl_tbf;
        struct gprs_rlcmac_ul_tbf *ul_tbf;
+
+       bool freeing; /* Set to true during destructor */
 };

 struct gprs_rlcmac_entity *gprs_rlcmac_entity_alloc(uint32_t tlli);
@@ -32,6 +34,7 @@
 bool gprs_rlcmac_entity_in_packet_idle_mode(const struct gprs_rlcmac_entity 
*gre);
 bool gprs_rlcmac_entity_in_packet_transfer_mode(const struct 
gprs_rlcmac_entity *gre);
 bool gprs_rlcmac_entity_have_tx_data_queued(const struct gprs_rlcmac_entity 
*gre);
+int gprs_rlcmac_entity_start_ul_tbf_pkt_acc_proc_if_needed(struct 
gprs_rlcmac_entity *gre);

 int gprs_rlcmac_entity_llc_enqueue(struct gprs_rlcmac_entity *gre, uint8_t 
*ll_pdu, unsigned int ll_pdu_len,
                                   enum osmo_gprs_rlcmac_llc_sapi sapi, uint8_t 
radio_prio);
diff --git a/include/osmocom/gprs/rlcmac/rlcmac_private.h 
b/include/osmocom/gprs/rlcmac/rlcmac_private.h
index 76fa3fd..0fefd11 100644
--- a/include/osmocom/gprs/rlcmac/rlcmac_private.h
+++ b/include/osmocom/gprs/rlcmac/rlcmac_private.h
@@ -90,6 +90,7 @@
 struct gprs_rlcmac_entity *gprs_rlcmac_find_entity_by_imsi(const char *imsi);
 struct gprs_rlcmac_dl_tbf *gprs_rlcmac_find_dl_tbf_by_tfi(uint8_t dl_tfi);
 struct gprs_rlcmac_ul_tbf *gprs_rlcmac_find_ul_tbf_by_tfi(uint8_t ul_tfi);
+int gprs_rlcmac_submit_l1ctl_pdch_rel_req(void);
 int gprs_rlcmac_handle_ccch_imm_ass(const struct gsm48_imm_ass *ia, uint32_t 
fn);
 int gprs_rlcmac_handle_ccch_pag_req1(const struct gsm48_paging1 *pag);
 int gprs_rlcmac_handle_ccch_pag_req2(const struct gsm48_paging2 *pag);
diff --git a/src/rlcmac/gre.c b/src/rlcmac/gre.c
index 6340437..9021faa 100644
--- a/src/rlcmac/gre.c
+++ b/src/rlcmac/gre.c
@@ -71,6 +71,8 @@
        if (!gre)
                return;

+       gre->freeing = true;
+
        gprs_rlcmac_tbf_dl_ass_fsm_destructor(&gre->dl_tbf_dl_ass_fsm);
        gprs_rlcmac_dl_tbf_free(gre->dl_tbf);
        gprs_rlcmac_ul_tbf_free(gre->ul_tbf);
@@ -83,16 +85,68 @@
  * Hence memory pointed by "dl_tbf" is already freed and shall not be 
accessed. */
 void gprs_rlcmac_entity_dl_tbf_freed(struct gprs_rlcmac_entity *gre, const 
struct gprs_rlcmac_dl_tbf *dl_tbf)
 {
-       if (gre->dl_tbf == dl_tbf)
-               gre->dl_tbf = NULL;
+       OSMO_ASSERT(gre);
+       OSMO_ASSERT(gre->dl_tbf);
+       OSMO_ASSERT(dl_tbf);
+
+       /* GRE is freeing (destructor being called) do nothing */
+       if (gre->freeing)
+               return;
+
+       if (gre->dl_tbf != dl_tbf) {
+               /* This may happen if we already have a new DL TBF allocated
+                * immediately prior to freeing the old one (PACCH assignment
+                * reusing resources of old one). Nothing to do, simply wait for
+                * new DL TBF to do its job.
+                */
+               return;
+       }
+
+       gre->dl_tbf = NULL;
+
+       /* Nothing to do, we are still in packet-transfer-mode using UL TBF. */
+       if (gre->ul_tbf)
+               return;
+
+       /* we have no DL nor UL TBFs. Go back to PACKET-IDLE state, and start
+        * packet-access-procedure if we still have data to be transmitted.
+        */
+       gprs_rlcmac_submit_l1ctl_pdch_rel_req();
+       gprs_rlcmac_entity_start_ul_tbf_pkt_acc_proc_if_needed(gre);
 }

 /* Called by ul_tbf destructor to inform the UL TBF pointer has been freed.
  * Hence memory pointed by "ul_tbf" is already freed and shall not be 
accessed. */
 void gprs_rlcmac_entity_ul_tbf_freed(struct gprs_rlcmac_entity *gre, const 
struct gprs_rlcmac_ul_tbf *ul_tbf)
 {
-       if (gre->ul_tbf == ul_tbf)
-               gre->ul_tbf = NULL;
+       OSMO_ASSERT(gre);
+       OSMO_ASSERT(gre->ul_tbf);
+       OSMO_ASSERT(ul_tbf);
+
+       /* GRE is freeing (destructor being called) do nothing */
+       if (gre->freeing)
+               return;
+
+       if (gre->ul_tbf != ul_tbf) {
+               /* This may happen if we already have a new UL TBF allocated
+                * immediately prior to freeing the old one (PACCH assignment
+                * reusing resources of old one). Nothing to do, simply wait for
+                * new UL TBF to do its job.
+                */
+               return;
+       }
+
+       gre->ul_tbf = NULL;
+
+       /* Nothing to do, dl_tbf will eventually trigger request for UL TBF 
PACCH assignment. */
+       if (gre->dl_tbf)
+               return;
+
+       /* we have no DL nor UL TBFs. Go back to PACKET-IDLE state, and start
+        * packet-access-procedure if we still have data to be transmitted.
+        */
+       gprs_rlcmac_submit_l1ctl_pdch_rel_req();
+       gprs_rlcmac_entity_start_ul_tbf_pkt_acc_proc_if_needed(gre);
 }

 /* TS 44.060 5.3 In packet idle mode:
@@ -129,6 +183,27 @@
        return gprs_rlcmac_llc_queue_size(gre->llc_queue) > 0;
 }

+/* Create a new UL TBF and start Packet access procedure to get an UL 
assignment if needed */
+int gprs_rlcmac_entity_start_ul_tbf_pkt_acc_proc_if_needed(struct 
gprs_rlcmac_entity *gre)
+{
+       /* TS 44.060 5.3 "In packet idle mode, upper layers may require the
+       * transfer of a upper layer PDU, which implicitly triggers the
+       * establishment of a TBF and the transition to packet transfer mode." */
+       if (!gprs_rlcmac_entity_in_packet_idle_mode(gre))
+               return 0;
+
+       if (!gprs_rlcmac_entity_have_tx_data_queued(gre))
+               return 0;
+
+       OSMO_ASSERT(!gre->ul_tbf);
+       /* We have data in the queue but we have no ul_tbf. Allocate one and 
start UL Assignment. */
+       gre->ul_tbf = gprs_rlcmac_ul_tbf_alloc(gre);
+       if (!gre->ul_tbf)
+               return -ENOMEM;
+       /* We always use 1phase for now... */
+       return gprs_rlcmac_tbf_ul_ass_start(gre->ul_tbf, 
GPRS_RLCMAC_TBF_UL_ASS_TYPE_1PHASE);
+}
+
 int gprs_rlcmac_entity_llc_enqueue(struct gprs_rlcmac_entity *gre, uint8_t 
*ll_pdu, unsigned int ll_pdu_len,
                                   enum osmo_gprs_rlcmac_llc_sapi sapi, uint8_t 
radio_prio)
 {
@@ -138,19 +213,7 @@
        if (rc < 0)
                return rc;

-       /* TS 44.060 5.3 "In packet idle mode, upper layers may require the
-       * transfer of a upper layer PDU, which implicitly triggers the
-       * establishment of a TBF and the transition to packet transfer mode." */
-       if (gprs_rlcmac_entity_in_packet_idle_mode(gre)) {
-               OSMO_ASSERT(!gre->ul_tbf);
-               /* We have new data in the queue but we have no ul_tbf. 
Allocate one and start UL Assignment. */
-               gre->ul_tbf = gprs_rlcmac_ul_tbf_alloc(gre);
-               if (!gre->ul_tbf)
-                       return -ENOMEM;
-               /* We always use 1phase for now... */
-               rc = gprs_rlcmac_tbf_ul_ass_start(gre->ul_tbf, 
GPRS_RLCMAC_TBF_UL_ASS_TYPE_1PHASE);
-       }
-
+       rc = gprs_rlcmac_entity_start_ul_tbf_pkt_acc_proc_if_needed(gre);
        return rc;
 }

diff --git a/src/rlcmac/rlcmac.c b/src/rlcmac/rlcmac.c
index b026048..5cf4bb9 100644
--- a/src/rlcmac/rlcmac.c
+++ b/src/rlcmac/rlcmac.c
@@ -189,6 +189,18 @@
        return NULL;
 }

+/* Request lower layers to go to packet-idle mode: */
+int gprs_rlcmac_submit_l1ctl_pdch_rel_req(void)
+{
+       struct osmo_gprs_rlcmac_prim *rlcmac_prim;
+
+       rlcmac_prim = gprs_rlcmac_prim_alloc_l1ctl_pdch_rel_req();
+
+       LOGRLCMAC(LOGL_INFO, "Tx L1CTL-PDCH_REL.req\n");
+
+       return gprs_rlcmac_prim_call_down_cb(rlcmac_prim);
+}
+
 static int gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(uint8_t ts_nr, uint32_t fn, 
const struct gsm48_imm_ass *ia, const IA_RestOctets_t *iaro)
 {
        int rc = -ENOENT;
diff --git a/src/rlcmac/tbf_dl_ass_fsm.c b/src/rlcmac/tbf_dl_ass_fsm.c
index 40bd17c..9acf723 100644
--- a/src/rlcmac/tbf_dl_ass_fsm.c
+++ b/src/rlcmac/tbf_dl_ass_fsm.c
@@ -202,22 +202,23 @@
 static void st_compl_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)
 {
        struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx = (struct 
gprs_rlcmac_tbf_dl_ass_fsm_ctx *)fi->priv;
-       struct gprs_rlcmac_dl_tbf *dl_tbf;
+       struct gprs_rlcmac_dl_tbf *old_dl_tbf, *new_dl_tbf;

-       dl_tbf = gprs_rlcmac_dl_tbf_alloc(ctx->gre);
+       old_dl_tbf = ctx->gre->dl_tbf;
+       new_dl_tbf = gprs_rlcmac_dl_tbf_alloc(ctx->gre);

        /* Update TBF with allocated content: */
-       memcpy(&dl_tbf->cur_alloc, &ctx->alloc, sizeof(ctx->alloc));
+       memcpy(&new_dl_tbf->cur_alloc, &ctx->alloc, sizeof(ctx->alloc));

        /* Replace old DL TBF with new one. 8.1.1.1.3: "the mobile station shall
         * release all ongoing downlink TBFs not addressed by this message and
         * shall act on the message. All ongoing uplink TBFs shall be 
maintained;"
         */
-       gprs_rlcmac_dl_tbf_free(ctx->gre->dl_tbf);
-       ctx->gre->dl_tbf = dl_tbf;
+       ctx->gre->dl_tbf = new_dl_tbf;
+       gprs_rlcmac_dl_tbf_free(old_dl_tbf);

        /* Inform the main TBF state about the assignment completed: */
-       osmo_fsm_inst_dispatch(dl_tbf->state_fsm.fi, 
GPRS_RLCMAC_TBF_DL_EV_DL_ASS_COMPL, NULL);
+       osmo_fsm_inst_dispatch(new_dl_tbf->state_fsm.fi, 
GPRS_RLCMAC_TBF_DL_EV_DL_ASS_COMPL, NULL);
        /* Go back to IDLE state. */
        tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_IDLE);
 }
diff --git a/src/rlcmac/tbf_ul_fsm.c b/src/rlcmac/tbf_ul_fsm.c
index e713085..37d2e4a 100644
--- a/src/rlcmac/tbf_ul_fsm.c
+++ b/src/rlcmac/tbf_ul_fsm.c
@@ -97,7 +97,7 @@
 {
        int rc;
        /* TS 44.060 sub-clause 7.1.4. Reinitiate the packet access procedure:
-               * Move to NEW state, start Ass and wait for 
GPRS_RLCMAC_TBF_UL_ASS_EV_START */
+        * Move to NEW state, start Ass and wait for 
GPRS_RLCMAC_TBF_UL_ASS_EV_START */
        tbf_ul_fsm_state_chg(ctx->fi, GPRS_RLCMAC_TBF_UL_ST_NEW);
        /* We always use 1phase for now... */
        rc = gprs_rlcmac_tbf_ul_ass_start(ctx->ul_tbf, 
GPRS_RLCMAC_TBF_UL_ASS_TYPE_1PHASE);
@@ -139,6 +139,8 @@
        gprs_rlcmac_rlc_ul_window_mark_for_resend(ctx->ul_tbf->ulw);
        /* Make sure the lower layers realize this tbf_nr has no longer any 
assigned resource: */
        release_ul_tbf(ctx);
+       /* Move back to CCCH */
+       gprs_rlcmac_submit_l1ctl_pdch_rel_req();
 }

 static void st_new(struct osmo_fsm_inst *fi, uint32_t event, void *data)
diff --git a/tests/rlcmac/rlcmac_prim_test.err 
b/tests/rlcmac/rlcmac_prim_test.err
index ea4d2e5..5f8cbbb 100644
--- a/tests/rlcmac/rlcmac_prim_test.err
+++ b/tests/rlcmac/rlcmac_prim_test.err
@@ -69,6 +69,8 @@
 DLGLOBAL INFO UL_TBF{RELEASING}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 
(release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
 DLGLOBAL INFO UL_TBF{RELEASING}: Deallocated
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated
 DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request
 DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly
@@ -97,6 +99,8 @@
 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW
 DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
@@ -119,6 +123,8 @@
 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW
 DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
@@ -141,6 +147,8 @@
 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW
 DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
@@ -165,7 +173,21 @@
 DLGLOBAL INFO UL_TBF{FLOW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
 DLGLOBAL INFO UL_TBF{FLOW}: Deallocated
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
+DLGLOBAL INFO UL_TBF{NEW}: Allocated
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
+DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
+DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
 DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated
+DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Deallocated
+DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=1 (release)
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO UL_TBF{ASSIGN}: Deallocated
 DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request
 DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly
 DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated
@@ -174,7 +196,7 @@
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7c
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
 DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
@@ -207,39 +229,8 @@
 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW
 DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
-DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
-DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7c
-DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
-DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
-DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_ESTABLISH.request
-DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS
-DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss TFI=0 initCS=CS-2 
startTimeFN=0
-DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase 
access) ts_nr=7 usf=0
-DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED
-DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL
-DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 
ul_slotmask=0x80
-DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
-DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW
-DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE
-DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication
-DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0
-DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 
(BSN1 0 BSN2 -1)
-DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs
-DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN=0 CV=15)
-DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 
00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 
84 44 04 00
-DLGLOBAL INFO UL_TBF{FLOW}: Received Event FIRST_UL_DATA_SENT
-DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164
-DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166
-DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1)
-DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request
-DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166
-DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=2
-DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW
-DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
-DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
@@ -269,10 +260,12 @@
 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request
 DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166
-DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=3
+DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=2
 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW
 DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
@@ -302,12 +295,49 @@
 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request
 DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166
+DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=3
+DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW
+DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
+DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
+DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
+DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_ESTABLISH.request
+DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS
+DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss TFI=0 initCS=CS-2 
startTimeFN=0
+DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase 
access) ts_nr=7 usf=0
+DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED
+DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL
+DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 
ul_slotmask=0x80
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW
+DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE
+DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication
+DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0
+DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 
(BSN1 0 BSN2 -1)
+DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs
+DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN=0 CV=15)
+DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 
00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 
84 44 04 00
+DLGLOBAL INFO UL_TBF{FLOW}: Received Event FIRST_UL_DATA_SENT
+DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164
+DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166
+DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1)
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request
+DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166
 DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=4
 DLGLOBAL NOTICE UL_TBF{FLOW}: TBF establishment failure (T3166 timeout 
attempts=4)
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated
 DLGLOBAL INFO UL_TBF{FLOW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
 DLGLOBAL INFO UL_TBF{FLOW}: Deallocated
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated
 DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
 DLGLOBAL DEBUG Rx SI13 from lower layers
@@ -319,7 +349,7 @@
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
 DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request
@@ -460,10 +490,12 @@
 DLGLOBAL INFO UL_TBF{FINISHED}: state_chg to NEW
 DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request
@@ -491,7 +523,7 @@
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
 DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
@@ -547,6 +579,8 @@
 DLGLOBAL INFO UL_TBF{FINISHED}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
 DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated
 DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request
 DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly
@@ -655,6 +689,8 @@
 DLGLOBAL INFO UL_TBF{FINISHED}: Send L1CTL-CFG_UL_TBF.req ul_tbf_nr=0 (release)
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request
 DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated
+DLGLOBAL INFO Tx L1CTL-PDCH_REL.req
+DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_RELEASE.request
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request
 DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated
 DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
@@ -667,7 +703,7 @@
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7e
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
 DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
@@ -776,7 +812,7 @@
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START
 DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START
 DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN
-DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7e
+DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7c
 DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request
 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS
 DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication
diff --git a/tests/rlcmac/rlcmac_prim_test.ok b/tests/rlcmac/rlcmac_prim_test.ok
index 12e5ece..a3e82c3 100644
--- a/tests/rlcmac/rlcmac_prim_test.ok
+++ b/tests/rlcmac/rlcmac_prim_test.ok
@@ -8,6 +8,7 @@
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=8 ts=7 data_len=34 
data=[00 01 02 1d 00 00 23 42 11 e5 10 00 e2 18 f2 2b 2b 2b 2b 2b 2b 2b 2b 2b 
2b 2b 2b 2b 2b 2b 2b 2b 2b 00 ]
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=21 ts=7 data_len=23 
data=[40 04 00 00 8d 08 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b ]
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
 === test_ul_tbf_attach end ===
 === test_ul_tbf_t3164_timeout start ===
 sys={0.000000}, mono={0.000000}: clock_override_set
@@ -17,28 +18,34 @@
 sys={5.000000}, mono={5.000000}: clock_override_add
 sys={5.000000}, mono={5.000000}: Expect T3164 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7b
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 sys={10.000000}, mono={10.000000}: clock_override_add
 sys={10.000000}, mono={10.000000}: Expect T3164 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x79
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 sys={15.000000}, mono={15.000000}: clock_override_add
 sys={15.000000}, mono={15.000000}: Expect T3164 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x78
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 sys={20.000000}, mono={20.000000}: clock_override_add
 sys={20.000000}, mono={20.000000}: Expect T3164 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7a
 === test_ul_tbf_t3164_timeout end ===
+test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=1 
ul_slotmask=0x00
 === test_ul_tbf_t3166_timeout start ===
 sys={0.000000}, mono={0.000000}: clock_override_set
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7a
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7c
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 test_rlcmac_prim_up_cb(): Rx GMMRR-LLC_TRANSMITTED.indication TLLI=0x00002342
@@ -46,31 +53,35 @@
 sys={5.000000}, mono={5.000000}: clock_override_add
 sys={5.000000}, mono={5.000000}: Expect T3166 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7c
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x79
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=4 ts=7 data_len=34 
data=[3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 
00 71 62 f2 24 6c 84 44 04 00 ]
 sys={10.000000}, mono={10.000000}: clock_override_add
 sys={10.000000}, mono={10.000000}: Expect T3166 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x79
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7d
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=4 ts=7 data_len=34 
data=[3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 
00 71 62 f2 24 6c 84 44 04 00 ]
 sys={15.000000}, mono={15.000000}: clock_override_add
 sys={15.000000}, mono={15.000000}: Expect T3166 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7d
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7a
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=4 ts=7 data_len=34 
data=[3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 
00 71 62 f2 24 6c 84 44 04 00 ]
 sys={20.000000}, mono={20.000000}: clock_override_add
 sys={20.000000}, mono={20.000000}: Expect T3166 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
 === test_ul_tbf_t3166_timeout end ===
 === test_ul_tbf_n3104_timeout start ===
 sys={0.000000}, mono={0.000000}: clock_override_set
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7a
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7b
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 RTS 0: FN=8
@@ -99,7 +110,8 @@
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=52 ts=7 data_len=34 
data=[3c 01 02 1f 00 00 23 42 11 e5 10 00 e2 18 f2 01 c0 00 08 01 01 d5 71 00 
00 08 29 26 24 00 00 00 00 00 ]
 RTS 11: FN=56
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7b
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7a
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=56 ts=7 data_len=34 
data=[00 01 04 3d 00 00 23 42 71 62 f2 24 6c 84 44 04 11 e5 10 00 e2 18 f2 2b 
2b 2b 2b 2b 2b 2b 2b 2b 2b 00 ]
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
@@ -107,7 +119,7 @@
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
 === test_ul_tbf_t3182_timeout start ===
 sys={0.000000}, mono={0.000000}: clock_override_set
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7a
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7b
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 test_rlcmac_prim_up_cb(): Rx GMMRR-LLC_TRANSMITTED.indication TLLI=0x00002342
@@ -116,6 +128,7 @@
 sys={5.000000}, mono={5.000000}: clock_override_add
 sys={5.000000}, mono={5.000000}: Expect T3182 timeout
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
 === test_ul_tbf_t3182_timeout end ===
 === test_ul_tbf_last_data_cv0_retrans_max start ===
 sys={0.000000}, mono={0.000000}: clock_override_set
@@ -133,11 +146,12 @@
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=21 ts=7 data_len=34 
data=[00 00 02 1d 11 e5 10 00 e2 18 f2 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 
2b 2b 2b 2b 2b 2b 2b 2b 2b 00 ]
 RTS 3: FN=26
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
+test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_RELEASE.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_DATA.request fn=26 ts=7 data_len=34 
data=[00 00 02 1d 11 e5 10 00 e2 18 f2 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 
2b 2b 2b 2b 2b 2b 2b 2b 2b 00 ]
 === test_ul_tbf_last_data_cv0_retrans_max end ===
 === test_ul_tbf_countdown_procedure start ===
 sys={0.000000}, mono={0.000000}: clock_override_set
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7b
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7e
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 test_rlcmac_prim_up_cb(): Rx GMMRR-LLC_TRANSMITTED.indication TLLI=0x00002342
@@ -158,7 +172,7 @@
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x00
 === test_ul_tbf_request_another_ul_tbf start ===
 sys={0.000000}, mono={0.000000}: clock_override_set
-test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7e
+test_rlcmac_prim_down_cb(): Rx L1CTL-RACH.request ra=0x7c
 test_rlcmac_prim_down_cb(): Rx L1CTL-PDCH_ESTABLISH.request
 test_rlcmac_prim_down_cb(): Rx L1CTL-CFG_UL_TBF.request ul_tbf_nr=0 
ul_slotmask=0x80
 test_rlcmac_prim_up_cb(): Rx GMMRR-LLC_TRANSMITTED.indication TLLI=0x00002342

--
To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/33552
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmo-gprs
Gerrit-Branch: master
Gerrit-Change-Id: Ic7420a42e2e81effdde587d7e49acd66b404354c
Gerrit-Change-Number: 33552
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to