mirror of https://github.com/PentHertz/srsLTE.git
bugfix,srsenb,mac: avoid sanity check for UL PDU length if CRC=KO
This commit is contained in:
parent
76004a3054
commit
fd1d73666c
|
@ -71,7 +71,7 @@ public:
|
||||||
|
|
||||||
uint8_t* request_pdu(tti_point tti, uint32_t len);
|
uint8_t* request_pdu(tti_point tti, uint32_t len);
|
||||||
|
|
||||||
srsran::unique_byte_buffer_t release_pdu(tti_point tti, uint32_t len);
|
srsran::unique_byte_buffer_t release_pdu(tti_point tti);
|
||||||
|
|
||||||
void clear_old_pdus(tti_point current_tti);
|
void clear_old_pdus(tti_point current_tti);
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ public:
|
||||||
|
|
||||||
uint8_t* request_buffer(uint32_t tti, uint32_t ue_cc_idx, const uint32_t len);
|
uint8_t* request_buffer(uint32_t tti, uint32_t ue_cc_idx, const uint32_t len);
|
||||||
void process_pdu(srsran::unique_byte_buffer_t pdu, uint32_t grant_nof_prbs);
|
void process_pdu(srsran::unique_byte_buffer_t pdu, uint32_t grant_nof_prbs);
|
||||||
srsran::unique_byte_buffer_t release_pdu(uint32_t tti, uint32_t ue_cc_idx, uint32_t len);
|
srsran::unique_byte_buffer_t release_pdu(uint32_t tti, uint32_t ue_cc_idx);
|
||||||
void clear_old_buffers(uint32_t tti);
|
void clear_old_buffers(uint32_t tti);
|
||||||
|
|
||||||
void metrics_read(mac_ue_metrics_t* metrics_);
|
void metrics_read(mac_ue_metrics_t* metrics_);
|
||||||
|
|
|
@ -363,7 +363,7 @@ int mac::push_pdu(uint32_t tti_rx,
|
||||||
}
|
}
|
||||||
uint32_t ue_cc_idx = enb_ue_cc_map[enb_cc_idx];
|
uint32_t ue_cc_idx = enb_ue_cc_map[enb_cc_idx];
|
||||||
|
|
||||||
srsran::unique_byte_buffer_t pdu = ue_db[rnti]->release_pdu(tti_rx, ue_cc_idx, nof_bytes);
|
srsran::unique_byte_buffer_t pdu = ue_db[rnti]->release_pdu(tti_rx, ue_cc_idx);
|
||||||
if (pdu == nullptr) {
|
if (pdu == nullptr) {
|
||||||
logger.warning("Could not find MAC UL PDU for rnti=0x%x, cc=%d, tti=%d", rnti, enb_cc_idx, tti_rx);
|
logger.warning("Could not find MAC UL PDU for rnti=0x%x, cc=%d, tti=%d", rnti, enb_cc_idx, tti_rx);
|
||||||
return SRSRAN_ERROR;
|
return SRSRAN_ERROR;
|
||||||
|
@ -372,6 +372,12 @@ int mac::push_pdu(uint32_t tti_rx,
|
||||||
// push the pdu through the queue if received correctly
|
// push the pdu through the queue if received correctly
|
||||||
if (crc) {
|
if (crc) {
|
||||||
logger.info("Pushing PDU rnti=0x%x, tti_rx=%d, nof_bytes=%d", rnti, tti_rx, nof_bytes);
|
logger.info("Pushing PDU rnti=0x%x, tti_rx=%d, nof_bytes=%d", rnti, tti_rx, nof_bytes);
|
||||||
|
srsran_expect(nof_bytes == pdu->size(),
|
||||||
|
"Inconsistent PDU length for rnti=0x%x, tti_rx=%d (%d!=%d)",
|
||||||
|
rnti,
|
||||||
|
tti_rx,
|
||||||
|
nof_bytes,
|
||||||
|
(int)pdu->size());
|
||||||
auto process_pdu_task = [this, rnti, ul_nof_prbs](srsran::unique_byte_buffer_t& pdu) {
|
auto process_pdu_task = [this, rnti, ul_nof_prbs](srsran::unique_byte_buffer_t& pdu) {
|
||||||
srsran::rwlock_read_guard lock(rwlock);
|
srsran::rwlock_read_guard lock(rwlock);
|
||||||
if (ue_db.contains(rnti)) {
|
if (ue_db.contains(rnti)) {
|
||||||
|
|
|
@ -69,7 +69,7 @@ cc_used_buffers_map::~cc_used_buffers_map()
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
srsran::unique_byte_buffer_t cc_used_buffers_map::release_pdu(tti_point tti, uint32_t len)
|
srsran::unique_byte_buffer_t cc_used_buffers_map::release_pdu(tti_point tti)
|
||||||
{
|
{
|
||||||
if (not has_tti(tti)) {
|
if (not has_tti(tti)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -77,7 +77,6 @@ srsran::unique_byte_buffer_t cc_used_buffers_map::release_pdu(tti_point tti, uin
|
||||||
|
|
||||||
// Extract PDU from PDU map
|
// Extract PDU from PDU map
|
||||||
srsran::unique_byte_buffer_t pdu = std::move(pdu_map[tti.to_uint()]);
|
srsran::unique_byte_buffer_t pdu = std::move(pdu_map[tti.to_uint()]);
|
||||||
srsran_expect(pdu->size() == len, "UL buffers: Inconsistent UL PDU length for tti=%d", tti.to_uint());
|
|
||||||
|
|
||||||
// clear entry in map
|
// clear entry in map
|
||||||
pdu_map.erase(tti.to_uint());
|
pdu_map.erase(tti.to_uint());
|
||||||
|
@ -378,10 +377,10 @@ void ue::process_pdu(srsran::unique_byte_buffer_t pdu, uint32_t grant_nof_prbs)
|
||||||
logger.debug("MAC PDU processed");
|
logger.debug("MAC PDU processed");
|
||||||
}
|
}
|
||||||
|
|
||||||
srsran::unique_byte_buffer_t ue::release_pdu(uint32_t tti, uint32_t ue_cc_idx, uint32_t len)
|
srsran::unique_byte_buffer_t ue::release_pdu(uint32_t tti, uint32_t ue_cc_idx)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(rx_buffers_mutex);
|
std::lock_guard<std::mutex> lock(rx_buffers_mutex);
|
||||||
return cc_buffers[ue_cc_idx].get_rx_used_buffers().release_pdu(tti_point(tti), len);
|
return cc_buffers[ue_cc_idx].get_rx_used_buffers().release_pdu(tti_point(tti));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ue::process_ce(srsran::sch_subh* subh, uint32_t grant_nof_prbs)
|
bool ue::process_ce(srsran::sch_subh* subh, uint32_t grant_nof_prbs)
|
||||||
|
|
Loading…
Reference in New Issue