mirror of https://github.com/PentHertz/srsLTE.git
lib,rlc_am_nr: consider size of all pending retx in buffer state
This commit is contained in:
parent
ced6cf6e40
commit
d66c76b374
|
@ -370,6 +370,9 @@ public:
|
||||||
virtual bool empty() const = 0;
|
virtual bool empty() const = 0;
|
||||||
virtual bool full() const = 0;
|
virtual bool full() const = 0;
|
||||||
|
|
||||||
|
virtual T& operator[](size_t idx) = 0;
|
||||||
|
virtual const T& operator[](size_t idx) const = 0;
|
||||||
|
|
||||||
virtual bool has_sn(uint32_t sn) const = 0;
|
virtual bool has_sn(uint32_t sn) const = 0;
|
||||||
virtual bool has_sn(uint32_t sn, uint32_t so) const = 0;
|
virtual bool has_sn(uint32_t sn, uint32_t so) const = 0;
|
||||||
};
|
};
|
||||||
|
@ -396,6 +399,18 @@ public:
|
||||||
return buffer[rpos];
|
return buffer[rpos];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T& operator[](size_t idx) override
|
||||||
|
{
|
||||||
|
srsran_assert(idx < size(), "Out-of-bounds access to element idx=%zd", idx);
|
||||||
|
return buffer[(rpos + idx) % WINDOW_SIZE];
|
||||||
|
}
|
||||||
|
|
||||||
|
const T& operator[](size_t idx) const override
|
||||||
|
{
|
||||||
|
srsran_assert(idx < size(), "Out-of-bounds access to element idx=%zd", idx);
|
||||||
|
return buffer[(rpos + idx) % WINDOW_SIZE];
|
||||||
|
}
|
||||||
|
|
||||||
void clear() override
|
void clear() override
|
||||||
{
|
{
|
||||||
wpos = 0;
|
wpos = 0;
|
||||||
|
|
|
@ -968,8 +968,9 @@ void rlc_am_nr_tx::get_buffer_state(uint32_t& n_bytes_new, uint32_t& n_bytes_pri
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bytes needed for retx
|
// Bytes needed for retx
|
||||||
if (not retx_queue->empty()) {
|
size_t n_retx = retx_queue->size();
|
||||||
rlc_amd_retx_nr_t& retx = retx_queue->front();
|
for (size_t i = 0; i < n_retx; i++) {
|
||||||
|
rlc_amd_retx_nr_t& retx = (*retx_queue)[i];
|
||||||
RlcDebug("buffer state - retx - SN=%d, Segment: %s, %d:%d",
|
RlcDebug("buffer state - retx - SN=%d, Segment: %s, %d:%d",
|
||||||
retx.sn,
|
retx.sn,
|
||||||
retx.is_segment ? "true" : "false",
|
retx.is_segment ? "true" : "false",
|
||||||
|
@ -979,8 +980,7 @@ void rlc_am_nr_tx::get_buffer_state(uint32_t& n_bytes_new, uint32_t& n_bytes_pri
|
||||||
int req_bytes = retx.segment_length;
|
int req_bytes = retx.segment_length;
|
||||||
int hdr_req_bytes = (retx.is_segment && retx.current_so != 0) ? max_hdr_size : min_hdr_size;
|
int hdr_req_bytes = (retx.is_segment && retx.current_so != 0) ? max_hdr_size : min_hdr_size;
|
||||||
if (req_bytes <= 0) {
|
if (req_bytes <= 0) {
|
||||||
RlcError("in get_buffer_state(): Removing retx with SN=%d from queue", retx.sn);
|
RlcError("buffer state - retx - invalid length=%d for SN=%d", req_bytes, retx.sn);
|
||||||
retx_queue->pop();
|
|
||||||
} else {
|
} else {
|
||||||
n_bytes_prio += (req_bytes + hdr_req_bytes);
|
n_bytes_prio += (req_bytes + hdr_req_bytes);
|
||||||
RlcDebug("buffer state - retx: %d bytes", n_bytes_prio);
|
RlcDebug("buffer state - retx: %d bytes", n_bytes_prio);
|
||||||
|
|
|
@ -1367,8 +1367,7 @@ int segment_retx_and_loose_segments_test(rlc_am_nr_sn_size_t sn_size)
|
||||||
rlc1.write_pdu(status_buf.msg, status_buf.N_bytes);
|
rlc1.write_pdu(status_buf.msg, status_buf.N_bytes);
|
||||||
|
|
||||||
// Check there are two Retx segments (a first one and a continued one)
|
// Check there are two Retx segments (a first one and a continued one)
|
||||||
TESTASSERT_EQ(pdu_size_first, rlc1.get_buffer_state()); // Fixme: get_buffer_state()
|
TESTASSERT_EQ(pdu_size_first + pdu_size_continued, rlc1.get_buffer_state());
|
||||||
// TESTASSERT_EQ(pdu_size_first + pdu_size_continued, rlc1.get_buffer_state()); // Should be this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -1656,8 +1655,7 @@ int retx_segment_test(rlc_am_nr_sn_size_t sn_size)
|
||||||
rlc1.write_pdu(status_buf.msg, status_buf.N_bytes);
|
rlc1.write_pdu(status_buf.msg, status_buf.N_bytes);
|
||||||
|
|
||||||
// Check there are 3 Retx segments (a first one and two continued ones)
|
// Check there are 3 Retx segments (a first one and two continued ones)
|
||||||
TESTASSERT_EQ(pdu_size_first, rlc1.get_buffer_state()); // Fixme: get_buffer_state()
|
TESTASSERT_EQ(pdu_size_first + 2 * pdu_size_continued, rlc1.get_buffer_state());
|
||||||
// TESTASSERT_EQ(pdu_size_first + 2 * pdu_size_continued, rlc1.get_buffer_state()); // Should be this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue