this patch refactors the SDU queuing and dropping policy of the RLC and PDCP layer.
the previous design had issues when packets have been generated at a higher
rate above the PDCP than they could be consumed below the RLC.
When the RLC SDU queues were full, we allowed two policies, one to block on the write
and the other to drop the SDU. Both options are not ideal because they either
lead to a blocking stack thread or to lost PDCP PDUs.
To avoid this, this patch makes the following changes:
* PDCP monitors RLC's SDU queue and drops packets on its north-bound SAP if queues are full
* a new method sdu_queue_is_full() has been added to the RLC interface for PDCP
* remove blocking write from pdcp and rlc write_sdu() interface
* all writes into queues need to be non-blocking
* if Tx queues are overflowing, SDUs are dropped above PDCP, not RLC
* log warning if RLC still needs to drop SDUs
* this case should be avoided with the monitoring mechanism
* Clang-formated UE, eNB and lib.
* Fixed compiling errors from clang-format.
* Fix linking issues introduced by clang-format
* Fix poor formating in initializing arrays of arrays.
* Fix mistake in conflict resolution on rm_turbo.c
* Re-apply clang format to gtpc_ies.h
* first step towards moving MAC timers to stack. Mac is still using its own timers. srslte::timers class can be restructured.
* moved timers out of the UE MAC
- all RLC entities are now initialized during contruction
- there is no need to check for, e.g., existance of timers, during
runtime
- there is also no need to call re-init during resume
- timers are freed in dtor
- add a simple and low-overhead has_data() method to check whether
an RLC entity has data to transmit or not
- use this method for all calls that are actually not interested
in the amount of data to send
- use the more expensive get_buffer_state() for all cases where
the actual size of the buffer is of importance
* fixed some issues with the UL scheduling
* Hack to fix UL scheduler
* minor fix
* Cleaned up code and fixed issue with the update_allocation function
* fixed the console printing in the enb
* log/console fix
* fixed the log print
* added a normalization factor
* RLC: entity uses dynamic instances. Simplified stop/reset/reestablish procedure. Added non-blocking interface
* Limit decimals in metrics stdout
* Changed mutexes to rwlock in RLC/RRC/MAC/PDCP to fix race conditions when removing users
* Fix deadlock bug for MIMO
* Remove headers
* Fix missing unlock causing overflows
* Do not decrease CQI when PUCCH (this is a temporal fix, requires to reduce the maximum MCS)
* Fix mutex unlock in worker
* Configurable RLC tx buffer. Default to 512 for enodeb
* Check NULL SDU in write_sdu()
* Protect RLC objects and tx_queue from being destroyed while using it
* Remove superfluous code
* Disable SIB logging
* Fix block_queue for enb