Commit Graph

94 Commits

Author SHA1 Message Date
Andre Puschmann 2cfc657fbb rlc_am_lte: refactor logging when PDCP SDUs are enqueued
the patch refactor the logging when a new PDCP SDU is enqueued for
transmission at RLC.

If the SN is already present, only a warning is logged. From the RLC
perspective operation continues and the SDU will be transmitted.

The patch also changes the order of logs. When the SN cannot be inserted
inside the queue of undelivered SDUs, only one message is logged.
2021-03-18 15:27:49 +01:00
faluco c7542daf43 Remove rlc traces and add new ones into tti run functions both in the enb and ue. 2021-03-10 11:59:09 +01:00
faluco 82db6544fb Add instrumentation points to rlc_am_lte::rlc_am_lte_tx::handle_control_pdu using srslog. 2021-03-10 11:59:09 +01:00
Andre Puschmann 16de8668e0 rlc_am_lte: convert mutexes to std::mutex
replace all pthread_mutex with std::mutex and use lock_guard and unique_lock (where needed)
2021-03-09 21:56:33 +01:00
Andre Puschmann 20cbc48f90 rlc_am_lte: refactor PDCP/RLC interface to use fix sized data structure
this patch replaces the std::vector type used in the interface between
PDCP and RLC to signal delivery status between both layers. The new
data type is a configurable but fixed-size vector.
The RLC AM doesn't need to dynamically allocate the vector for every SN but
uses the tx_window for storage.
2021-03-09 21:56:33 +01:00
Francisco ee77343f26 fix compilation issue for centos7 2021-03-09 16:23:08 +00:00
Francisco f72cd4151c rlc am,bugfix - fixed formatting of RLC AM header and status pdu 2021-03-09 16:23:08 +00:00
Francisco 1ffc4cef86 rlc am,optimization - change helper log methods to avoid mallocs 2021-03-09 16:23:08 +00:00
Andre Puschmann ace8764568 rlc_am_lte: add missing unlock when building status PDU fails 2021-03-08 15:19:07 +01:00
Andre Puschmann ceacf8508d rlc_am_lte: fix handling of maxretx
this patch fixes the actions/handling after RLC detected
maxRetx reached for a given SN.

According to the TS, RLC should only inform upper layers and
not try to recover from the event itself.

As a consequence, we won't manipulate the Tx or Rx window.
As a result of this, we might retransmit a SN more than
the specified amount of times.

It's the task of RRC to reestablish the bearer to recover
from that.
2021-03-06 20:55:08 +01:00
Andre Puschmann 6a4bf65fd8 rlc_am_lte: extend check for valid status PDU
check for all NACKed SNs are smaller than ACK_SN
2021-03-05 19:46:00 +01:00
Andre Puschmann 62b2327178 rlc_am_lte: fix header reconstruction
* optimize processing of status PDU (SN is removed from window immediately)
* fix maxRetx signaling for segments
* make tx_window_t a template class, rename and use for rx_window as well
2021-03-05 15:47:30 +01:00
Francisco b329e25bbb move ue phy interfaces to separate interfaces header file 2021-02-26 16:44:57 +01:00
Francisco a988351f46 move ue pdcp interfaces to separate interfaces header file 2021-02-26 16:44:57 +01:00
Andre Puschmann 822abc763e rlc_am_lte: when max retx is reached, remove SN from tx window
this fixes an issue when the RLC bearer isn't reset from RRC.
In this case, the RLC would retransmit the same PDU over and over
again despite the max retx counter being reached.
2021-02-24 21:57:56 +01:00
Francisco 0b6b62324f convert rlc am retx_queue to circular buffer 2021-02-24 21:19:15 +01:00
Francisco 138685399e remove allocations from rlc_am_tx::handle_control_pdu 2021-02-24 12:06:34 +01:00
Francisco 9a6512f4e8 fix RLC AM undelivered PDCN SNs reset bug 2021-02-22 22:56:19 +01:00
Francisco 1ede82bb30 use circular array for buffered PDCP SNs in RLC AM to limit memory allocations 2021-02-22 22:56:19 +01:00
Francisco 2a65bf9636 fix undelivered PDCP SNs buffers in RLC AM to handle SN=-1 case 2021-02-22 22:56:19 +01:00
Francisco bad2302e31 avoid the use of two arrays for managing buffered pdcp sns in RLC AM 2021-02-22 22:56:19 +01:00
Francisco 299634b319 use of vector to store undelivered PDCP SNs in RLC AM 2021-02-22 22:56:19 +01:00
Pedro Alvarez d8f3878ce1
RLC failure to deliver notifications and discard timer limits to 1500ms (#2368)
* Added interfaces for the RLC to notify the PDCP of failure to transmit
SDU

* Limit discard timer to 1500ms, to avoid issues of lingering SDUs in the undeliverd_sdus_queue.

* Fix bug in early exit of notify_delivery and notify_failure

* fix compilation issue in rlc-pdcp notification

Co-authored-by: Francisco <francisco.paisana@softwareradiosystems.com>
2021-02-22 10:36:14 +00:00
Francisco 2f75abcc7a fix failing rlc am test 2021-02-21 21:24:24 +01:00
Francisco abe4f4c7eb use tx_window to store the map of rlc sn to pdcp sns 2021-02-21 21:24:24 +01:00
Francisco f86eb84876 conversion of RLC AM tx window from std::map to array 2021-02-21 21:24:24 +01:00
Andre Puschmann 40d7934267 rlc: call PDCP notify without holding Tx lock
move notify_info_vec as stack variable and unlock mutex
before calling PDCP notify
2021-02-21 11:03:44 +01:00
Francisco Paisana cd8ee37f74
Use a reverse lookup to avoid iteration over a std::map (#2363)
* reuse vector capacity for pdcp sn notification
* use an extra lookup data structure to find PDCP SNs that an RLC SN contains
* fix rlc sn->pdcp sn lookup datastructure in rlc
* fix rlc failing test
2021-02-20 15:08:00 +01:00
Pedro Alvarez ba5367bc56 Change order which reestablish is called in eNB
Make sure that RLC info queue is reset when reestablish happens
2021-02-18 14:51:29 +00:00
Pedro Alvarez 492ea2a5a8 Addressing reviewers comments to #2290.
Removing unecessary \n for logs and changed log of PDCP info queue
 capacity to debug to avoid log spam.
Changed log level for unhandled S1AP messages from error to warning
 in EPC to avoid failing tests because of error message.
Changed usage of allocate_unique_buffer to make_unique_buffer()
2021-02-11 15:49:00 +00:00
faluco 57f66febfc Ported the RLC classes to srslog in the lib dir. 2021-02-11 14:37:27 +01:00
Francisco 04ab4eefcd use new make_byte_buffer() helper method to create unique_byte_buffers 2021-02-07 18:48:21 +00:00
Pedro Alvarez 7b25eac47c Fix race condition in rlc_am_stress test and other fixes related to this
test. The race condition was being cause by write_sdu being called
simultanously to read_pdu, which could cause the read_pdu to try to get
the SDU info before it had been written by the write_sdu.

Changes in this commit include:
 - Make sure PDCP sn in included in RLC AM stress test.
 - Stop handling control PDU when TX is not enabled in RLC AM.
 - Fixed issue with length of the PDCP SN in rlc_stress_test.
 - Moved the place were sdu info erase was called to avoid double calls to erase
 - Tentative fix for race condition in rlc_am_stress test.
 - Added function to print information about undelivered_sdu_info_queue
   for debugging.
2021-02-05 12:24:50 +00:00
Pedro Alvarez 261c2b2e03 Removed limit to the undelivered SDUs info queue in RLC AM. Printing a warning if the queue is getting large instead. 2021-02-05 12:24:50 +00:00
Pedro Alvarez d0ef6ce00b Fix typos and bad comments in rlc_am_lte.cc and rlc_am_test.cc
Added checks for the nack_sn in the status reports of the rlc_am_test.
2021-02-05 12:24:50 +00:00
Pedro Alvarez 24db20bcca Removed some unused variables after changing method of tracking notifications. Removed rlc_am_notify_pdcp test file. Testing is now in rlc_am_test.cc 2021-02-05 12:24:50 +00:00
Pedro Alvarez 6c071a784c Changed notification mechanisms to use map of acked SNs instead of acked bytes.
This was required due to an issue where bytes were counted twice when a
packet had been lost.
2021-02-05 12:24:50 +00:00
Pedro Alvarez 649d642776 Moved notification tests from rlc_am_notify_pdcp_test.cc to rlc_am_test.cc.
This added some tests to resegmentation.
2021-02-05 12:24:50 +00:00
Pedro Alvarez 389cf4d943 Moved updating the notify info to it's own function. 2021-02-05 12:24:50 +00:00
Pedro Alvarez de669d214a Fix test header and queue_capacity check in RLC notifications.
Also, remove unecessary nullptr initializaion and fixup some newlines.
2021-02-05 12:24:50 +00:00
Pedro Alvarez de90b4753f Added the ability of the RLC AM to notify the PDCP of the acknowledged
PDCP PDUs. This includes:

- Modifying the byte_buffer_t to include PDCP SN meta-data. This way,
  the RLC can keep track of the ack'ed bytes for a specific PDCP PDU.
- Added in the RLC an `undelivered_sdu_info queue`, to keep track of the
  amount of ack'ed bytes and the total size of the PDCP PDU,
  so the RLC can know when delivery is finished.
- Added an interface between the PDCP and the RLC so that the RLC can
  notify the PDCP when it receives an ack from the status PDUs. The RLC
  passes to the PDCP a vector of all the ack'ed pdus in a rx'ed status PDU.
- Added some tests to the notify functionality. This includes some tests
  where the PDUs are acked imediatly, and one test where the PDU is
  retx'ed.
2021-02-05 12:24:50 +00:00
Pedro Alvarez 350e90a030 Make RLC retransmissions deterministic. It was creating unpredictablity
in the RLC AM tests. See issue #2228
2021-01-25 14:29:17 +00:00
Pedro Alvarez 6ca8bc12ec Fix wrong SN in RLC status PDU when packet is dropped. 2021-01-21 21:12:30 +01:00
Andre Puschmann bc4c9606ce rlc_am: add extended bearer metrics
this patch adds support for measuring the:
* SDU rx latency (Average time in ms from first RLC segment to full SDU)
* amount of buffered bytes (sum of payload of PDUs buffered in rx_window)

the implementation is using std::chrono
2020-12-17 17:46:55 +01:00
Andre Puschmann d54c33258b rlc_metrics: add sdu rx latency and buffered bytes 2020-12-17 17:46:55 +01:00
Francisco Paisana 82eb31f70f add rlc metrics to enb 2020-12-14 16:59:09 +01:00
Francisco Paisana 0f693b36b2 changed pdu latency calculation to std chrono 2020-12-14 13:47:05 +01:00
Francisco Paisana 7ffc236a1a enable log line when rlc tx pdu last segment is sent but the latency log is disabled 2020-12-14 13:47:05 +01:00
Francisco 951912d18a disable RLC latency measure when ENABLE_TIMESTAMP flag is disabled 2020-12-14 13:47:05 +01:00
Francisco 92bc98e2f0 add byte tx counter to the set of metrics being measured in RLC 2020-12-14 13:47:05 +01:00