<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/23489">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Set matching USF if available when polling a UL TBF<br><br>When the scheduler detects it's time to receive a UL block due to a<br>scheduled poll, if that polling is done on a UL TBF, then use its USF if<br>available instead of using USF_UNUSED (=7) when sending a DL block on<br>that same FN.<br><br>This is not really needed for correct work, since MS take care<br>themselves of scheduling a UL block when they receive the poll (RRBP)<br>some time before, and don't check the USF at the time of transmitting.<br>In any case, it helps understand better when looking at pcap traces that<br>indeed it a UL block from that MS was requested, instead of setting USF<br>to 7.<br><br>Related: OS#5033<br>Change-Id: I2ad9d8ea6afc8f83192033470bd27010a7474430<br>---<br>M src/gprs_rlcmac_sched.cpp<br>M src/tbf_ul.cpp<br>M src/tbf_ul.h<br>3 files changed, 23 insertions(+), 16 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/89/23489/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp</span><br><span>index 25a3766..c431d9c 100644</span><br><span>--- a/src/gprs_rlcmac_sched.cpp</span><br><span>+++ b/src/gprs_rlcmac_sched.cpp</span><br><span>@@ -461,27 +461,31 @@</span><br><span> </span><br><span>       /* polling for next uplink block */</span><br><span>  poll_fn = rts_next_fn(fn, block_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* check uplink resource for polling */</span><br><span style="color: hsl(0, 100%, 40%);">- if ((poll_tbf = pdch_ulc_get_tbf_poll(pdch->ulc, poll_fn))) {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* check for sba */</span><br><span style="color: hsl(120, 100%, 40%);">+   if ((sba = pdch_ulc_get_sba(pdch->ulc, poll_fn))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPDCH(pdch, DRLCMACSCHED, LOGL_DEBUG, "Received RTS for PDCH: "</span><br><span style="color: hsl(120, 100%, 40%);">+                   "FN=%d block_nr=%d scheduling free USF for "</span><br><span style="color: hsl(120, 100%, 40%);">+                        "single block allocation at FN=%d\n", fn, block_nr, sba->fn);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* else, check uplink resource for polling */</span><br><span style="color: hsl(120, 100%, 40%);">+ } else if ((poll_tbf = pdch_ulc_get_tbf_poll(pdch->ulc, poll_fn))) {</span><br><span>              LOGP(DRLCMACSCHED, LOGL_DEBUG, "Received RTS for PDCH: TRX=%d "</span><br><span>                    "TS=%d FN=%d block_nr=%d scheduling free USF for "</span><br><span>                         "polling at FN=%d of %s\n", trx, ts, fn,</span><br><span>                   block_nr, poll_fn, tbf_name(poll_tbf));</span><br><span style="color: hsl(0, 100%, 40%);">- /* else. check for sba */</span><br><span style="color: hsl(0, 100%, 40%);">-       } else if ((sba = pdch_ulc_get_sba(pdch->ulc, poll_fn))) {</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGPDCH(pdch, DRLCMACSCHED, LOGL_DEBUG, "Received RTS for PDCH: "</span><br><span style="color: hsl(0, 100%, 40%);">-                     "FN=%d block_nr=%d scheduling free USF for "</span><br><span style="color: hsl(0, 100%, 40%);">-                  "single block allocation at FN=%d\n", fn, block_nr, sba->fn);</span><br><span style="color: hsl(0, 100%, 40%);">-      /* else, we search for uplink resource */</span><br><span style="color: hsl(120, 100%, 40%);">+             /* If POLL TBF is UL and already has a USF assigned on this TS,</span><br><span style="color: hsl(120, 100%, 40%);">+                * let's set its USF in the DL msg. This is not really needed,</span><br><span style="color: hsl(120, 100%, 40%);">+             * but it helps understand better the flow when looking at</span><br><span style="color: hsl(120, 100%, 40%);">+             * pcaps. */</span><br><span style="color: hsl(120, 100%, 40%);">+          if (poll_tbf->direction == GPRS_RLCMAC_UL_TBF && as_ul_tbf(poll_tbf)->m_usf[ts] != USF_INVALID)</span><br><span style="color: hsl(120, 100%, 40%);">+                 usf_tbf = as_ul_tbf(poll_tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* else, search for uplink tbf */</span><br><span>    } else {</span><br><span>             usf_tbf = sched_select_uplink(trx, ts, fn, block_nr, pdch, require_gprs_only);</span><br><span style="color: hsl(0, 100%, 40%);">-          /* If MS selected for USF is GPRS-only, then it will only be</span><br><span style="color: hsl(0, 100%, 40%);">-             * able to read USF if dl block uses GMSK * (CS1-4, MCS1-4)</span><br><span style="color: hsl(0, 100%, 40%);">-              */</span><br><span style="color: hsl(0, 100%, 40%);">-             if (usf_tbf && req_mcs_kind == EGPRS && ms_mode(usf_tbf->ms()) != EGPRS)</span><br><span style="color: hsl(0, 100%, 40%);">-                             req_mcs_kind = EGPRS_GMSK;</span><br><span>   }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* If MS selected for USF is GPRS-only, then it will only be</span><br><span style="color: hsl(120, 100%, 40%);">+   * able to read USF if dl block uses GMSK * (CS1-4, MCS1-4) */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (usf_tbf && req_mcs_kind == EGPRS && ms_mode(usf_tbf->ms()) != EGPRS)</span><br><span style="color: hsl(120, 100%, 40%);">+           req_mcs_kind = EGPRS_GMSK;</span><br><span> </span><br><span>       get_tbf_candidates(bts, trx, ts, &tbf_cand);</span><br><span> </span><br><span>diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp</span><br><span>index 8ef600b..f226b29 100644</span><br><span>--- a/src/tbf_ul.cpp</span><br><span>+++ b/src/tbf_ul.cpp</span><br><span>@@ -213,7 +213,7 @@</span><br><span>      m_ul_gprs_ctrs(NULL),</span><br><span>        m_ul_egprs_ctrs(NULL)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      memset(&m_usf, 0, sizeof(m_usf));</span><br><span style="color: hsl(120, 100%, 40%);">+ memset(&m_usf, USF_INVALID, sizeof(m_usf));</span><br><span> }</span><br><span> </span><br><span> /*</span><br><span>diff --git a/src/tbf_ul.h b/src/tbf_ul.h</span><br><span>index 8713596..0c78e10 100644</span><br><span>--- a/src/tbf_ul.h</span><br><span>+++ b/src/tbf_ul.h</span><br><span>@@ -47,6 +47,9 @@</span><br><span>         TBF_CTR_EGPRS_UL_MCS9,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Used in ul_tbf->m_usf[] to flag unassigned USF on a given TS: */</span><br><span style="color: hsl(120, 100%, 40%);">+#define USF_INVALID 0xFF</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define LOGPTBFUL(tbf, level, fmt, args...) LOGP(DTBFUL, level, "%s " fmt, tbf_name(tbf), ## args)</span><br><span> </span><br><span> struct gprs_rlcmac_ul_tbf : public gprs_rlcmac_tbf {</span><br><span>@@ -90,7 +93,7 @@</span><br><span>       * variables are in both (dl and ul) structs and not outside union.</span><br><span>   */</span><br><span>  int32_t m_rx_counter; /* count all received blocks */</span><br><span style="color: hsl(0, 100%, 40%);">-   uint8_t m_usf[8];       /* list USFs per PDCH (timeslot) */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t m_usf[8];       /* list USFs per PDCH (timeslot), initialized to USF_INVALID */</span><br><span>      uint8_t m_contention_resolution_done; /* set after done */</span><br><span>   uint8_t m_final_ack_sent; /* set if we sent final ack */</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/23489">change 23489</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/+/23489"/><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: I2ad9d8ea6afc8f83192033470bd27010a7474430 </div>
<div style="display:none"> Gerrit-Change-Number: 23489 </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>