mirror of https://github.com/PentHertz/srsLTE.git
lib,rlc_am_nr: merge NACKs across SN overflows
This commit is contained in:
parent
e9156d4ba2
commit
ecc995bd4b
|
@ -90,6 +90,8 @@ class rlc_am_nr_status_pdu_t
|
|||
private:
|
||||
/// Stored SN size required to compute the packed size
|
||||
rlc_am_nr_sn_size_t sn_size = rlc_am_nr_sn_size_t::nulltype;
|
||||
/// Stored modulus to determine continuous sequences across SN overflows
|
||||
uint32_t mod_nr = cardinality(rlc_am_nr_sn_size_t::nulltype);
|
||||
/// Internal NACK container; keep in sync with packed_size_
|
||||
std::vector<rlc_status_nack_t> nacks_ = {};
|
||||
/// Stores the current packed size; sync on each change of nacks_
|
||||
|
@ -110,6 +112,7 @@ public:
|
|||
|
||||
rlc_am_nr_status_pdu_t(rlc_am_nr_sn_size_t sn_size);
|
||||
void reset();
|
||||
bool is_continuous_sequence(const rlc_status_nack_t& left, const rlc_status_nack_t& right) const;
|
||||
void push_nack(const rlc_status_nack_t& nack);
|
||||
const std::vector<rlc_status_nack_t>& get_nacks() const { return nacks_; }
|
||||
uint32_t get_packed_size() const { return packed_size; }
|
||||
|
|
|
@ -19,7 +19,8 @@ namespace srsran {
|
|||
* Container implementation for pack/unpack functions
|
||||
***************************************************************************/
|
||||
|
||||
rlc_am_nr_status_pdu_t::rlc_am_nr_status_pdu_t(rlc_am_nr_sn_size_t sn_size) : sn_size(sn_size)
|
||||
rlc_am_nr_status_pdu_t::rlc_am_nr_status_pdu_t(rlc_am_nr_sn_size_t sn_size) :
|
||||
sn_size(sn_size), mod_nr(cardinality(sn_size))
|
||||
{
|
||||
nacks_.reserve(RLC_AM_NR_TYP_NACKS);
|
||||
}
|
||||
|
@ -32,10 +33,10 @@ void rlc_am_nr_status_pdu_t::reset()
|
|||
packed_size_ = rlc_am_nr_status_pdu_sizeof_header_ack_sn;
|
||||
}
|
||||
|
||||
static bool is_continuous_sequence(const rlc_status_nack_t& left, const rlc_status_nack_t& right)
|
||||
bool rlc_am_nr_status_pdu_t::is_continuous_sequence(const rlc_status_nack_t& left, const rlc_status_nack_t& right) const
|
||||
{
|
||||
// SN must be continuous
|
||||
if (right.nack_sn != left.has_nack_range ? left.nack_sn + left.nack_range : left.nack_sn + 1) {
|
||||
if (right.nack_sn != ((left.has_nack_range ? left.nack_sn + left.nack_range : (left.nack_sn + 1)) % mod_nr)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue