<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/15601">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pdch.cpp: Use pcu_l1_meas previously filled by lower layers<br><br>Otherwise, a new meas object is allocated in the stack in upper layers<br>which doesn't contain the link_qual information (have_link_qual=0),<br>outputting following error:<br><br>osmo-pcu/src/gprs_ms.cpp:644 Unable to update UL (M)CS CS-2 because we don't have link quality measurements.<br><br>Change-Id: I1980ca325c8d65f3f6310fa697dd810eec7ab077<br>---<br>M src/pdch.cpp<br>M src/pdch.h<br>2 files changed, 19 insertions(+), 21 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/01/15601/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/pdch.cpp b/src/pdch.cpp</span><br><span>index 5ae7e63..24bbbb1 100644</span><br><span>--- a/src/pdch.cpp</span><br><span>+++ b/src/pdch.cpp</span><br><span>@@ -373,12 +373,11 @@</span><br><span>                "at no request\n");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void gprs_rlcmac_pdch::rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *ack_nack, uint32_t fn)</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_rlcmac_pdch::rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *ack_nack, uint32_t fn, struct pcu_l1_meas *meas)</span><br><span> {</span><br><span>    int8_t tfi = 0; /* must be signed */</span><br><span>         struct gprs_rlcmac_dl_tbf *tbf;</span><br><span>      int rc;</span><br><span style="color: hsl(0, 100%, 40%);">- struct pcu_l1_meas meas;</span><br><span>     int num_blocks;</span><br><span>      uint8_t bits_data[RLC_GPRS_WS/8];</span><br><span>    bitvec bits;</span><br><span>@@ -435,16 +434,15 @@</span><br><span> </span><br><span>     /* get measurements */</span><br><span>       if (tbf->ms()) {</span><br><span style="color: hsl(0, 100%, 40%);">-             get_meas(&meas, &ack_nack->Channel_Quality_Report);</span><br><span style="color: hsl(0, 100%, 40%);">-          tbf->ms()->update_l1_meas(&meas);</span><br><span style="color: hsl(120, 100%, 40%);">+           get_meas(meas, &ack_nack->Channel_Quality_Report);</span><br><span style="color: hsl(120, 100%, 40%);">+             tbf->ms()->update_l1_meas(meas);</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void gprs_rlcmac_pdch::rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *ack_nack, uint32_t fn)</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_rlcmac_pdch::rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *ack_nack, uint32_t fn, struct pcu_l1_meas *meas)</span><br><span> {</span><br><span>    int8_t tfi = 0; /* must be signed */</span><br><span>         struct gprs_rlcmac_dl_tbf *tbf;</span><br><span style="color: hsl(0, 100%, 40%);">- struct pcu_l1_meas meas;</span><br><span>     int rc;</span><br><span>      int num_blocks;</span><br><span>      uint8_t bits_data[RLC_EGPRS_MAX_WS/8];</span><br><span>@@ -526,13 +524,13 @@</span><br><span>       if (tbf->ms()) {</span><br><span>          /* TODO: Implement Measurements parsing for EGPRS */</span><br><span>                 /*</span><br><span style="color: hsl(0, 100%, 40%);">-              get_meas(&meas, &ack_nack->Channel_Quality_Report);</span><br><span style="color: hsl(0, 100%, 40%);">-          tbf->ms()->update_l1_meas(&meas);</span><br><span style="color: hsl(120, 100%, 40%);">+           get_meas(meas, &ack_nack->Channel_Quality_Report);</span><br><span style="color: hsl(120, 100%, 40%);">+             tbf->ms()->update_l1_meas(meas);</span><br><span>               */</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request, uint32_t fn)</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request, uint32_t fn, struct pcu_l1_meas *meas)</span><br><span> {</span><br><span>  struct gprs_rlcmac_sba *sba;</span><br><span> </span><br><span>@@ -543,7 +541,6 @@</span><br><span>               uint8_t ms_class = 0;</span><br><span>                uint8_t egprs_ms_class = 0;</span><br><span>          uint8_t ta = GSM48_TA_INVALID;</span><br><span style="color: hsl(0, 100%, 40%);">-          struct pcu_l1_meas meas;</span><br><span> </span><br><span>                 GprsMs *ms = bts()->ms_by_tlli(tlli);</span><br><span>             /* Keep the ms, even if it gets idle temporarily */</span><br><span>@@ -621,8 +618,8 @@</span><br><span> </span><br><span>                /* get measurements */</span><br><span>               if (ul_tbf->ms()) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  get_meas(&meas, request);</span><br><span style="color: hsl(0, 100%, 40%);">-                   ul_tbf->ms()->update_l1_meas(&meas);</span><br><span style="color: hsl(120, 100%, 40%);">+                        get_meas(meas, request);</span><br><span style="color: hsl(120, 100%, 40%);">+                      ul_tbf->ms()->update_l1_meas(meas);</span><br><span>            }</span><br><span>            return;</span><br><span>      }</span><br><span>@@ -681,7 +678,7 @@</span><br><span> </span><br><span> /* Received Uplink RLC control block. */</span><br><span> int gprs_rlcmac_pdch::rcv_control_block(const uint8_t *data, uint8_t data_len,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       uint32_t fn, GprsCodingScheme cs)</span><br><span style="color: hsl(120, 100%, 40%);">+                                     uint32_t fn, struct pcu_l1_meas *meas, GprsCodingScheme cs)</span><br><span> {</span><br><span>     bitvec *rlc_block;</span><br><span>   RlcMacUplink_t *ul_control_block;</span><br><span>@@ -708,13 +705,13 @@</span><br><span>            rcv_control_ack(&ul_control_block->u.Packet_Control_Acknowledgement, fn);</span><br><span>             break;</span><br><span>       case MT_PACKET_DOWNLINK_ACK_NACK:</span><br><span style="color: hsl(0, 100%, 40%);">-               rcv_control_dl_ack_nack(&ul_control_block->u.Packet_Downlink_Ack_Nack, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+            rcv_control_dl_ack_nack(&ul_control_block->u.Packet_Downlink_Ack_Nack, fn, meas);</span><br><span>             break;</span><br><span>       case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:</span><br><span style="color: hsl(0, 100%, 40%);">-         rcv_control_egprs_dl_ack_nack(&ul_control_block->u.Egprs_Packet_Downlink_Ack_Nack, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                rcv_control_egprs_dl_ack_nack(&ul_control_block->u.Egprs_Packet_Downlink_Ack_Nack, fn, meas);</span><br><span>                 break;</span><br><span>       case MT_PACKET_RESOURCE_REQUEST:</span><br><span style="color: hsl(0, 100%, 40%);">-                rcv_resource_request(&ul_control_block->u.Packet_Resource_Request, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                rcv_resource_request(&ul_control_block->u.Packet_Resource_Request, fn, meas);</span><br><span>                 break;</span><br><span>       case MT_PACKET_MEASUREMENT_REPORT:</span><br><span>           rcv_measurement_report(&ul_control_block->u.Packet_Measurement_Report, fn);</span><br><span>@@ -832,7 +829,7 @@</span><br><span>             rc = rcv_data_block(data, data_len, fn, meas, cs);</span><br><span>           break;</span><br><span>       case GPRS_RLCMAC_CONTROL_BLOCK:</span><br><span style="color: hsl(0, 100%, 40%);">-         rc = rcv_control_block(data, data_len, fn, cs);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = rcv_control_block(data, data_len, fn, meas, cs);</span><br><span>                break;</span><br><span>       case GPRS_RLCMAC_CONTROL_BLOCK_OPT:</span><br><span>          LOGP(DRLCMAC, LOGL_NOTICE, "GPRS_RLCMAC_CONTROL_BLOCK_OPT block payload is not supported.\n");</span><br><span>diff --git a/src/pdch.h b/src/pdch.h</span><br><span>index e23d56f..3015023 100644</span><br><span>--- a/src/pdch.h</span><br><span>+++ b/src/pdch.h</span><br><span>@@ -94,12 +94,13 @@</span><br><span> </span><br><span> #ifdef __cplusplus</span><br><span> private:</span><br><span style="color: hsl(0, 100%, 40%);">-       int rcv_control_block(const uint8_t *data, uint8_t data_len, uint32_t fn, GprsCodingScheme cs);</span><br><span style="color: hsl(120, 100%, 40%);">+       int rcv_control_block(const uint8_t *data, uint8_t data_len, uint32_t fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                           struct pcu_l1_meas *meas, GprsCodingScheme cs);</span><br><span> </span><br><span>    void rcv_control_ack(Packet_Control_Acknowledgement_t *, uint32_t fn);</span><br><span style="color: hsl(0, 100%, 40%);">-  void rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *, uint32_t fn);</span><br><span style="color: hsl(0, 100%, 40%);">-        void rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *, uint32_t fn);</span><br><span style="color: hsl(0, 100%, 40%);">-  void rcv_resource_request(Packet_Resource_Request_t *t, uint32_t fn);</span><br><span style="color: hsl(120, 100%, 40%);">+ void rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *, uint32_t fn, struct pcu_l1_meas *meas);</span><br><span style="color: hsl(120, 100%, 40%);">+    void rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *, uint32_t fn, struct pcu_l1_meas *meas);</span><br><span style="color: hsl(120, 100%, 40%);">+      void rcv_resource_request(Packet_Resource_Request_t *t, uint32_t fn, struct pcu_l1_meas *meas);</span><br><span>      void rcv_measurement_report(Packet_Measurement_Report_t *t, uint32_t fn);</span><br><span>    gprs_rlcmac_tbf *tbf_from_list_by_tfi(</span><br><span>               LListHead<gprs_rlcmac_tbf> *tbf_list, uint8_t tfi,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/15601">change 15601</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/+/15601"/><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: I1980ca325c8d65f3f6310fa697dd810eec7ab077 </div>
<div style="display:none"> Gerrit-Change-Number: 15601 </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>