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