<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/23522">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pdch_ulc: Support picking RRBP other than N+13<br><br>Current algo always tries to sched RRBP the soonest possible.<br><br>Related: OS#5020<br>Change-Id: Ic6ddeea70e1f914cf423d0daab8fc492d0c992e2<br>---<br>M src/pcu_utils.h<br>M src/pdch_ul_controller.c<br>M src/pdch_ul_controller.h<br>M tests/tbf/TbfTest.err<br>M tests/ulc/PdchUlcTest.cpp<br>M tests/ulc/PdchUlcTest.err<br>M tests/ulc/PdchUlcTest.ok<br>7 files changed, 178 insertions(+), 12 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/22/23522/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/pcu_utils.h b/src/pcu_utils.h</span><br><span>index 1b90070..e1a8572 100644</span><br><span>--- a/src/pcu_utils.h</span><br><span>+++ b/src/pcu_utils.h</span><br><span>@@ -57,6 +57,12 @@</span><br><span>        return (fn % 52) / 4;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static inline bool fn_valid(uint32_t fn)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   uint32_t f = fn % 13;</span><br><span style="color: hsl(120, 100%, 40%);">+ return f == 0 || f == 4 || f == 8;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static inline unsigned fn_next_block(unsigned fn)</span><br><span> {</span><br><span>    unsigned bn = fn2bn(fn) + 1;</span><br><span>diff --git a/src/pdch_ul_controller.c b/src/pdch_ul_controller.c</span><br><span>index 1ead3e9..d892c84 100644</span><br><span>--- a/src/pdch_ul_controller.c</span><br><span>+++ b/src/pdch_ul_controller.c</span><br><span>@@ -112,20 +112,44 @@</span><br><span>    return !pdch_ulc_get_node(ulc, fn);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct rrbp_opt {</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t offset;</span><br><span style="color: hsl(120, 100%, 40%);">+       enum rrbp_field coding;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+static struct rrbp_opt rrbp_list[] =</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  {13, RRBP_N_plus_13},</span><br><span style="color: hsl(120, 100%, 40%);">+ {17, RRBP_N_plus_17_18},</span><br><span style="color: hsl(120, 100%, 40%);">+      {18, RRBP_N_plus_17_18},</span><br><span style="color: hsl(120, 100%, 40%);">+      {21, RRBP_N_plus_21_22},</span><br><span style="color: hsl(120, 100%, 40%);">+      {22, RRBP_N_plus_21_22},</span><br><span style="color: hsl(120, 100%, 40%);">+      {26, RRBP_N_plus_26},</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int pdch_ulc_get_next_free_rrbp_fn(struct pdch_ulc *ulc, uint32_t fn, uint32_t *poll_fn, unsigned int *rrbp)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* TODO: support other RRBP offsets, see TS 44.060 able 10.4.5.1 */</span><br><span style="color: hsl(0, 100%, 40%);">-     uint32_t new_poll_fn = next_fn(fn, 13);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!pdch_ulc_fn_is_free(ulc, new_poll_fn)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGPDCH(ulc->pdch, DRLCMAC, LOGL_ERROR, "Polling is already scheduled "</span><br><span style="color: hsl(0, 100%, 40%);">-                    "for single block allocation at FN=%u\n", fn);</span><br><span style="color: hsl(0, 100%, 40%);">-                return -EBUSY;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (i = 0; i < ARRAY_SIZE(rrbp_list); i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+              uint32_t new_poll_fn = next_fn(fn, rrbp_list[i].offset);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (!fn_valid(new_poll_fn))</span><br><span style="color: hsl(120, 100%, 40%);">+                   continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             if (pdch_ulc_fn_is_free(ulc, new_poll_fn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGPDCH(ulc->pdch, DRLCMAC, LOGL_DEBUG, "POLL scheduled at FN %" PRIu32</span><br><span style="color: hsl(120, 100%, 40%);">+                          " + %" PRIu8 " = %" PRIu32 "\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                fn, rrbp_list[i].offset, new_poll_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                        *poll_fn = new_poll_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+                       *rrbp = (unsigned int)rrbp_list[i].coding;</span><br><span style="color: hsl(120, 100%, 40%);">+                    return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPDCH(ulc->pdch, DRLCMAC, LOGL_DEBUG, "UL block already scheduled at FN %" PRIu32</span><br><span style="color: hsl(120, 100%, 40%);">+                      " + %" PRIu8 " = %" PRIu32 "\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                        fn, rrbp_list[i].offset, new_poll_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       *poll_fn = new_poll_fn;</span><br><span style="color: hsl(0, 100%, 40%);">- *rrbp = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     LOGPDCH(ulc->pdch, DRLCMAC, LOGL_ERROR, "FN=%" PRIu32 " "</span><br><span style="color: hsl(120, 100%, 40%);">+              "Failed allocating POLL, all RRBP values are already reserved!\n", fn);</span><br><span style="color: hsl(120, 100%, 40%);">+     return -EBUSY;</span><br><span> }</span><br><span> </span><br><span> /* Get next free (unreserved) FN which is not located in time before "start_fn" */</span><br><span>diff --git a/src/pdch_ul_controller.h b/src/pdch_ul_controller.h</span><br><span>index 5339e90..d5fea4d 100644</span><br><span>--- a/src/pdch_ul_controller.h</span><br><span>+++ b/src/pdch_ul_controller.h</span><br><span>@@ -30,6 +30,14 @@</span><br><span> struct gprs_rlcmac_ul_tbf;</span><br><span> struct gprs_rlcmac_sba;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* RRBP offsets, see TS 44.060 able 10.4.5.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+enum rrbp_field {</span><br><span style="color: hsl(120, 100%, 40%);">+    RRBP_N_plus_13 = 0x0,</span><br><span style="color: hsl(120, 100%, 40%);">+ RRBP_N_plus_17_18 = 0x1,</span><br><span style="color: hsl(120, 100%, 40%);">+      RRBP_N_plus_21_22 = 0x2,</span><br><span style="color: hsl(120, 100%, 40%);">+      RRBP_N_plus_26 = 0x3,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct pdch_ulc {</span><br><span>     struct gprs_rlcmac_pdch *pdch; /* back pointer */</span><br><span>    uint32_t last_fn; /* last FN rx from TDMA clock */</span><br><span>diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err</span><br><span>index 3b57d6a..76800b5 100644</span><br><span>--- a/tests/tbf/TbfTest.err</span><br><span>+++ b/tests/tbf/TbfTest.err</span><br><span>@@ -64,6 +64,7 @@</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) appending 200 bytes</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) appending 200 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -153,6 +154,7 @@</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) appending 200 bytes</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) appending 200 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -242,6 +244,7 @@</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) appending 200 bytes</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) appending 200 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -1544,6 +1547,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) starting timer T3169 [allocation (UL-TBF)] with 5 sec. 0 microsec, cur_fn=2654270</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -1628,6 +1632,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) starting timer T3169 [allocation (UL-TBF)] with 5 sec. 0 microsec, cur_fn=2654270</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -1679,6 +1684,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) appending 10 bytes</span><br><span> Old MS: TLLI = 0xf1223344, TA = 7, IMSI = 0011223344, LLC = 1</span><br><span> Received RTS for PDCH: TRX=0 TS=7 FN=2654275 block_nr=9 scheduling USF=0 for required uplink resource of UL TFI=0</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654275 + 13 = 2654288</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Downlink Assignment -------------------------</span><br><span>@@ -1715,6 +1721,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Copying 1 RLC blocks, 1 BSNs</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Copying data unit 0 (BSN 0)</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduling Ack/Nack polling, because it was requested explicitly (e.g. first final block sent).</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654279 + 13 = 2654292</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduled DL Acknowledgement polling on PACCH (FN=2654292, TS=7)</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) starting timer T3191 [final block (DL-TBF)] with 5 sec. 0 microsec, cur_fn=2654288</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduled Ack/Nack polling on FN=2654292, TS=7</span><br><span>@@ -1735,6 +1742,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Copying 1 RLC blocks, 1 BSNs</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Copying data unit 0 (BSN 0)</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduling Ack/Nack polling, because polling timed out.</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654296 + 13 = 2654309</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduled DL Acknowledgement polling on PACCH (FN=2654309, TS=7)</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) restarting timer T3191 [final block (DL-TBF)] with 5 sec. 0 microsec, cur_fn=2654292</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduled Ack/Nack polling on FN=2654309, TS=7</span><br><span>@@ -1780,6 +1788,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Timeout for polling PACKET DOWNLINK ACK: |Assignment was on PACCH|No downlink ACK received yet|</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) N3105 1 => 2 (< MAX 8)</span><br><span> Received RTS for PDCH: TRX=0 TS=7 FN=2654348 block_nr=2 scheduling USF=0 for required uplink resource of UL TFI=0</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654348 + 13 = 2654361</span><br><span> TBF(TFI=1 TLLI=0xf5667788 DIR=UL STATE=ASSIGN) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -1851,6 +1860,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/0, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: CS-1 -> CS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -1937,6 +1947,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) starting timer T3169 [allocation (UL-TBF)] with 5 sec. 0 microsec, cur_fn=2654327</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654327 + 13 = 2654340</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -1997,6 +2008,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/0, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: CS-1 -> CS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -2144,6 +2156,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/0, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: CS-1 -> CS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -2235,6 +2248,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) appending 13 bytes</span><br><span> Old MS: TLLI = 0xf1223344, TA = 7, IMSI = 0011223344, LLC = 40</span><br><span> Received RTS for PDCH: TRX=0 TS=7 FN=2654275 block_nr=9 scheduling USF=0 for required uplink resource of UL TFI=0</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654275 + 13 = 2654288</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Downlink Assignment -------------------------</span><br><span>@@ -2649,6 +2663,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FLOW) Copying 1 RLC blocks, 1 BSNs</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FLOW) Copying data unit 0 (BSN 20)</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FLOW) Scheduling Ack/Nack polling, because 20 blocks sent.</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654366 + 13 = 2654379</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FLOW) Scheduled DL Acknowledgement polling on PACCH (FN=2654379, TS=7)</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FLOW) Scheduled Ack/Nack polling on FN=2654379, TS=7</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FLOW) msg block (BSN 20, CS-1): 0f 00 28 16 35 45 54 20 32 38 4c 4c 43 20 50 41 43 4b 45 54 20 32 39 </span><br><span>@@ -2897,6 +2912,7 @@</span><br><span> PDCH(bts=0,trx=0,ts=7) Expiring FN=2654379 but previous FN=2654374 is still reserved!</span><br><span> PDCH(bts=0,trx=0,ts=7) Timeout for registered USF (FN=2654374): TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=RELEASING)</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=RELEASING) N3101 22 => 23 (< MAX 10)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654400 + 13 = 2654413</span><br><span> TBF(TFI=1 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Downlink Assignment -------------------------</span><br><span>@@ -3118,6 +3134,7 @@</span><br><span> TBF(TFI=1 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Copying 1 RLC blocks, 1 BSNs</span><br><span> TBF(TFI=1 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Copying data unit 0 (BSN 10)</span><br><span> TBF(TFI=1 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduling Ack/Nack polling, because it was requested explicitly (e.g. first final block sent).</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654448 + 13 = 2654461</span><br><span> TBF(TFI=1 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduled DL Acknowledgement polling on PACCH (FN=2654461, TS=7)</span><br><span> TBF(TFI=1 TLLI=0xf1223344 DIR=DL STATE=FINISHED) starting timer T3191 [final block (DL-TBF)] with 5 sec. 0 microsec, cur_fn=2654413</span><br><span> TBF(TFI=1 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Scheduled Ack/Nack polling on FN=2654461, TS=7</span><br><span>@@ -3268,6 +3285,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/1, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: MCS-1 -> MCS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -3360,6 +3378,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/1, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: MCS-1 -> MCS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -3573,6 +3592,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -3886,6 +3906,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -4149,6 +4170,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -4362,6 +4384,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -4555,6 +4578,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -4728,6 +4752,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -4871,6 +4896,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -5021,6 +5047,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -5160,6 +5187,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffffffff DIR=DL STATE=NULL EGPRS) changes state from NULL to FLOW</span><br><span> The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) appending 10 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 0 + 13 = 13</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) New and old TBF are the same.</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span>@@ -5472,6 +5500,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying 1 RLC blocks, 1 BSNs</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying data unit 0 (BSN 1)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduling Ack/Nack polling, because it was requested explicitly (e.g. first final block sent).</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 8 + 13 = 21</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled DL Acknowledgement polling on UNKNOWN (FN=21, TS=4)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled Ack/Nack polling on FN=21, TS=4</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) msg block (BSN 1, MCS-5): 0f 40 00 08 d6 3f 4e 8e ce 0e 4f 8f cf 0f 50 90 d0 10 51 91 d1 11 52 92 d2 12 53 93 d3 13 54 94 d4 14 55 95 d5 15 56 96 d6 16 57 97 d7 17 58 98 d8 d8 ca ca ca ca ca ca ca ca ca 0a </span><br><span>@@ -5549,6 +5578,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying 1 RLC blocks, 1 BSNs</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying data unit 0 (BSN 1)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduling Ack/Nack polling, because it was requested explicitly (e.g. first final block sent).</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 8 + 13 = 21</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled DL Acknowledgement polling on UNKNOWN (FN=21, TS=4)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled Ack/Nack polling on FN=21, TS=4</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) msg block (BSN 1, MCS-6): 0f 40 00 00 cd bf d2 12 53 93 d3 13 54 94 d4 14 55 95 d5 15 56 96 d6 16 57 97 d7 17 58 98 d8 d8 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a </span><br><span>@@ -5621,6 +5651,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying data unit 0 (BSN 0)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying data unit 1 (BSN 1)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduling Ack/Nack polling, because it was requested explicitly (e.g. first final block sent).</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 4 + 13 = 17</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled DL Acknowledgement polling on UNKNOWN (FN=17, TS=4)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled Ack/Nack polling on FN=17, TS=4</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) msg block (BSN 0, MCS-7): 0f 00 00 02 a0 01 04 08 0c 10 14 18 1c 20 24 28 2c 30 34 38 3c 40 44 48 4c 50 54 58 5c 60 64 68 6c 70 74 78 7c 80 84 88 8c 90 94 98 9c a0 a4 a8 ac b0 b4 b8 bc c0 c4 c8 cc d0 d4 d8 dc 80 f5 8f 93 a3 b3 c3 d3 e3 f3 03 14 24 34 44 54 64 74 84 94 a4 b4 c4 d4 e4 f4 04 15 25 35 45 55 65 75 85 95 a5 b5 c5 d5 e5 f5 05 16 26 36 b6 b2 b2 b2 b2 b2 b2 b2 b2 b2 02 </span><br><span>@@ -5697,6 +5728,7 @@</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying data unit 0 (BSN 0)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Copying data unit 1 (BSN 1)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduling Ack/Nack polling, because it was requested explicitly (e.g. first final block sent).</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=4) POLL scheduled at FN 4 + 13 = 17</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled DL Acknowledgement polling on UNKNOWN (FN=17, TS=4)</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) Scheduled Ack/Nack polling on FN=17, TS=4</span><br><span> TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) msg block (BSN 0, MCS-9): 0f 00 00 02 00 01 04 08 0c 10 14 18 1c 20 24 28 2c 30 34 38 3c 40 44 48 4c 50 54 58 5c 60 64 68 6c 70 74 78 7c 80 84 88 8c 90 94 98 9c a0 a4 a8 ac b0 b4 b8 bc c0 c4 c8 cc d0 d4 d8 dc e0 e4 e8 ec f0 f4 f8 fc 00 05 09 0d 11 15 19 1d 21 25 41 f3 af b4 c4 d4 e4 f4 04 15 25 35 45 55 65 75 85 95 a5 b5 c5 d5 e5 f5 05 16 26 36 b6 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 02 </span><br><span>@@ -6027,6 +6059,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/1, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: MCS-1 -> MCS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -6192,6 +6225,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/1, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: MCS-1 -> MCS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -6517,6 +6551,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) change control TS 7 -> 7 until assignment is complete.</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) changes UL ASS state from GPRS_RLCMAC_UL_ASS_NONE to GPRS_RLCMAC_UL_ASS_SEND_ASS</span><br><span> MS(TLLI=0xf1223344, IMSI=, TA=7, 1/1, UL) Link quality 12dB (old 12dB) left window [-256, 6], modifying uplink CS level: MCS-1 -> MCS-2</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654270 + 13 = 2654283</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN EGPRS) start Packet Uplink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Uplink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Uplink Assignment -------------------------</span><br><span>@@ -7295,6 +7330,7 @@</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW EGPRS) changes UL ACK state from GPRS_RLCMAC_UL_ACK_NONE to GPRS_RLCMAC_UL_ACK_SEND_ACK</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW EGPRS) changes UL ACK state from GPRS_RLCMAC_UL_ACK_SEND_ACK to GPRS_RLCMAC_UL_ACK_NONE</span><br><span> Received RTS for PDCH: TRX=0 TS=7 FN=2654279 block_nr=10 scheduling USF=0 for required uplink resource of UL TFI=0</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=7) POLL scheduled at FN 2654279 + 13 = 2654292</span><br><span> TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN EGPRS) start Packet Downlink Assignment (PACCH)</span><br><span> +++++++++++++++++++++++++ TX : Packet Downlink Assignment +++++++++++++++++++++++++</span><br><span> ------------------------- TX : Packet Downlink Assignment -------------------------</span><br><span>diff --git a/tests/ulc/PdchUlcTest.cpp b/tests/ulc/PdchUlcTest.cpp</span><br><span>index f0e8dd9..3372d2f 100644</span><br><span>--- a/tests/ulc/PdchUlcTest.cpp</span><br><span>+++ b/tests/ulc/PdchUlcTest.cpp</span><br><span>@@ -236,6 +236,64 @@</span><br><span>      printf("=== end: %s ===\n", __FUNCTION__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void test_next_free_fn_rrbp()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("=== start: %s ===\n", __FUNCTION__);</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gprs_rlcmac_pdch *pdch = &bts->trx[0].pdch[0];</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gprs_rlcmac_sba *sba1;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t poll_fn, curr_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+    unsigned int rrbp;</span><br><span style="color: hsl(120, 100%, 40%);">+    int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = pdch_ulc_get_next_free_rrbp_fn(pdch->ulc, 26, &poll_fn, &rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(rc == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(poll_fn == 26+13);</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(rrbp == RRBP_N_plus_13);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      pdch->last_rts_fn = 52;</span><br><span style="color: hsl(120, 100%, 40%);">+    printf("*** ALLOC 1 SBA FN=%" PRIu32 ":\n", pdch->last_rts_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        sba1 = sba_alloc(bts, pdch, 0); (void)sba1;</span><br><span style="color: hsl(120, 100%, 40%);">+   print_ulc_nodes(pdch->ulc);</span><br><span style="color: hsl(120, 100%, 40%);">+        curr_fn = sba1->fn - 13;</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = pdch_ulc_get_next_free_rrbp_fn(pdch->ulc, curr_fn, &poll_fn, &rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(rc == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("***NEXT FREE RRBP FN=%" PRIu32 ":\n", poll_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(poll_fn == (curr_fn+17) || poll_fn == (curr_fn+18));</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(rrbp == RRBP_N_plus_17_18);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     pdch->last_rts_fn = fn_next_block(pdch->last_rts_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("*** ALLOC 1 SBA FN=%" PRIu32 ":\n", pdch->last_rts_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        sba1 = sba_alloc(bts, pdch, 0); (void)sba1;</span><br><span style="color: hsl(120, 100%, 40%);">+   print_ulc_nodes(pdch->ulc);</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = pdch_ulc_get_next_free_rrbp_fn(pdch->ulc, curr_fn, &poll_fn, &rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(rc == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("***NEXT FREE RRBP FN=%" PRIu32 ":\n", poll_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(poll_fn == (curr_fn+21) || poll_fn == (curr_fn+22));</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(rrbp == RRBP_N_plus_21_22);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     pdch->last_rts_fn = fn_next_block(pdch->last_rts_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("*** ALLOC 1 SBA FN=%" PRIu32 ":\n", pdch->last_rts_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        sba1 = sba_alloc(bts, pdch, 0); (void)sba1;</span><br><span style="color: hsl(120, 100%, 40%);">+   print_ulc_nodes(pdch->ulc);</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = pdch_ulc_get_next_free_rrbp_fn(pdch->ulc, curr_fn, &poll_fn, &rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(rc == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("***NEXT FREE RRBP FN=%" PRIu32 ":\n", poll_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(poll_fn == (curr_fn+26));</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(rrbp == RRBP_N_plus_26);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        pdch->last_rts_fn = fn_next_block(pdch->last_rts_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("*** ALLOC 1 SBA FN=%" PRIu32 ":\n", pdch->last_rts_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        sba1 = sba_alloc(bts, pdch, 0); (void)sba1;</span><br><span style="color: hsl(120, 100%, 40%);">+   print_ulc_nodes(pdch->ulc);</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = pdch_ulc_get_next_free_rrbp_fn(pdch->ulc, curr_fn, &poll_fn, &rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(rc == -EBUSY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  talloc_free(bts);</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("=== end: %s ===\n", __FUNCTION__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>    tall_pcu_ctx = talloc_named_const(NULL, 1, "pdch_ulc test context");</span><br><span>@@ -256,7 +314,7 @@</span><br><span>         test_reserve_multiple();</span><br><span>     test_fn_wrap_around();</span><br><span>       test_next_free_fn_sba();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+      test_next_free_fn_rrbp();</span><br><span>    talloc_free(the_pcu);</span><br><span>        return EXIT_SUCCESS;</span><br><span> }</span><br><span>diff --git a/tests/ulc/PdchUlcTest.err b/tests/ulc/PdchUlcTest.err</span><br><span>index 34a090b..edc7a11 100644</span><br><span>--- a/tests/ulc/PdchUlcTest.err</span><br><span>+++ b/tests/ulc/PdchUlcTest.err</span><br><span>@@ -41,3 +41,18 @@</span><br><span> PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=34): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span> PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=39 is still reserved!</span><br><span> PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=39): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) POLL scheduled at FN 26 + 13 = 39</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 13 = 104</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) POLL scheduled at FN 91 + 17 = 108</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 13 = 104</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 17 = 108</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) POLL scheduled at FN 91 + 21 = 112</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 13 = 104</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 17 = 108</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 21 = 112</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) POLL scheduled at FN 91 + 26 = 117</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 13 = 104</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 17 = 108</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 21 = 112</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) UL block already scheduled at FN 91 + 26 = 117</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) FN=91 Failed allocating POLL, all RRBP values are already reserved!</span><br><span>diff --git a/tests/ulc/PdchUlcTest.ok b/tests/ulc/PdchUlcTest.ok</span><br><span>index 5bab5cc..f61209c 100644</span><br><span>--- a/tests/ulc/PdchUlcTest.ok</span><br><span>+++ b/tests/ulc/PdchUlcTest.ok</span><br><span>@@ -256,3 +256,22 @@</span><br><span> FN=121 type=SBA</span><br><span> FN=125 type=SBA</span><br><span> === end: test_next_free_fn_sba ===</span><br><span style="color: hsl(120, 100%, 40%);">+=== start: test_next_free_fn_rrbp ===</span><br><span style="color: hsl(120, 100%, 40%);">+*** ALLOC 1 SBA FN=52:</span><br><span style="color: hsl(120, 100%, 40%);">+FN=104 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+***NEXT FREE RRBP FN=108:</span><br><span style="color: hsl(120, 100%, 40%);">+*** ALLOC 1 SBA FN=56:</span><br><span style="color: hsl(120, 100%, 40%);">+FN=104 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+FN=108 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+***NEXT FREE RRBP FN=112:</span><br><span style="color: hsl(120, 100%, 40%);">+*** ALLOC 1 SBA FN=60:</span><br><span style="color: hsl(120, 100%, 40%);">+FN=104 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+FN=108 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+FN=112 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+***NEXT FREE RRBP FN=117:</span><br><span style="color: hsl(120, 100%, 40%);">+*** ALLOC 1 SBA FN=65:</span><br><span style="color: hsl(120, 100%, 40%);">+FN=104 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+FN=108 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+FN=112 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+FN=117 type=SBA</span><br><span style="color: hsl(120, 100%, 40%);">+=== end: test_next_free_fn_rrbp ===</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/23522">change 23522</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-pcu/+/23522"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ic6ddeea70e1f914cf423d0daab8fc492d0c992e2 </div>
<div style="display:none"> Gerrit-Change-Number: 23522 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>