From ff96336f9164c5036d1d4c63898825e5fb05a7b8 Mon Sep 17 00:00:00 2001 From: Andre Puschmann Date: Wed, 1 Jul 2020 18:18:14 +0200 Subject: [PATCH] rlc_um: fix reestablishment for sending UM entity we've reset the rx state variables during reestablishment but not the tx state variable. --- lib/include/srslte/upper/rlc_um_base.h | 1 + lib/include/srslte/upper/rlc_um_lte.h | 2 ++ lib/include/srslte/upper/rlc_um_nr.h | 2 ++ lib/src/upper/rlc_um_base.cc | 1 + lib/src/upper/rlc_um_lte.cc | 5 +++++ lib/src/upper/rlc_um_nr.cc | 8 +++++++- 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/include/srslte/upper/rlc_um_base.h b/lib/include/srslte/upper/rlc_um_base.h index 85e19390d..8c432e759 100644 --- a/lib/include/srslte/upper/rlc_um_base.h +++ b/lib/include/srslte/upper/rlc_um_base.h @@ -105,6 +105,7 @@ protected: // helper functions virtual void debug_state() = 0; + virtual void reset() = 0; }; // Receiver sub-class base diff --git a/lib/include/srslte/upper/rlc_um_lte.h b/lib/include/srslte/upper/rlc_um_lte.h index 096d4d3b9..ee5bc82f0 100644 --- a/lib/include/srslte/upper/rlc_um_lte.h +++ b/lib/include/srslte/upper/rlc_um_lte.h @@ -63,6 +63,8 @@ private: uint32_t get_buffer_state(); private: + void reset(); + /**************************************************************************** * State variables and counters * Ref: 3GPP TS 36.322 v10.0.0 Section 7 diff --git a/lib/include/srslte/upper/rlc_um_nr.h b/lib/include/srslte/upper/rlc_um_nr.h index 85839996c..ed76ae75c 100644 --- a/lib/include/srslte/upper/rlc_um_nr.h +++ b/lib/include/srslte/upper/rlc_um_nr.h @@ -63,6 +63,8 @@ private: uint32_t get_buffer_state(); private: + void reset(); + uint32_t TX_Next = 0; // send state as defined in TS 38.322 v15.3 Section 7 // It holds the value of the SN to be assigned for the next newly generated UMD PDU with // segment. It is initially set to 0, and is updated after the UM RLC entity submits a UMD PDU diff --git a/lib/src/upper/rlc_um_base.cc b/lib/src/upper/rlc_um_base.cc index 8f136dc83..167d23e5a 100644 --- a/lib/src/upper/rlc_um_base.cc +++ b/lib/src/upper/rlc_um_base.cc @@ -215,6 +215,7 @@ rlc_um_base::rlc_um_base_tx::~rlc_um_base_tx() {} void rlc_um_base::rlc_um_base_tx::stop() { empty_queue(); + reset(); } void rlc_um_base::rlc_um_base_tx::reestablish() diff --git a/lib/src/upper/rlc_um_lte.cc b/lib/src/upper/rlc_um_lte.cc index 9d6b78596..ddbc1c468 100644 --- a/lib/src/upper/rlc_um_lte.cc +++ b/lib/src/upper/rlc_um_lte.cc @@ -219,6 +219,11 @@ void rlc_um_lte::rlc_um_lte_tx::debug_state() log->debug("%s vt_us = %d\n", rb_name.c_str(), vt_us); } +void rlc_um_lte::rlc_um_lte_tx::reset() +{ + vt_us = 0; +} + /**************************************************************************** * Rx subclass implementation ***************************************************************************/ diff --git a/lib/src/upper/rlc_um_nr.cc b/lib/src/upper/rlc_um_nr.cc index 99ca4b6f6..0349c02f4 100644 --- a/lib/src/upper/rlc_um_nr.cc +++ b/lib/src/upper/rlc_um_nr.cc @@ -205,7 +205,13 @@ int rlc_um_nr::rlc_um_nr_tx::build_data_pdu(unique_byte_buffer_t pdu, uint8_t* p void rlc_um_nr::rlc_um_nr_tx::debug_state() { - log->debug("%s TX_Next = %d\n", rb_name.c_str(), TX_Next); + log->debug("%s TX_Next=%d, next_so=%d\n", rb_name.c_str(), TX_Next, next_so); +} + +void rlc_um_nr::rlc_um_nr_tx::reset() +{ + TX_Next = 0; + next_so = 0; } /****************************************************************************