40 Commits (34d4dc3974278ce7249cffad67bea87b5ccd2dad)

Author SHA1 Message Date
Pedro Alvarez f89b644902 Added function to get control pdu type to the PDCP base class. Shorten logger name in PDCP Status report test. 4 years ago
Pedro Alvarez dd6d6f731d Passing SN provided by upper layers to PDCP entity. Using it to calculate TX_COUNT if passed. 4 years ago
faluco f424f2e113 - Upgraded PDCP classes in lib to use srslog.
- Update tests to new changes.
4 years ago
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.
4 years ago
Francisco 13649e4e19 Implement new GTPU functionality:
- multiple tunnels per E-RAB
- data forwarding between connected GTPU tunnels
- forwarding GTPU End Marker between connected tunnels
- TeNB GTPU handles in-sequence delivery when multiple tunnels for the same ERAB exist.
4 years ago
Andre Puschmann 07d2bc4fe8 change license header to agnostic version with hint to root LICENSE file 4 years ago
Andre Puschmann 795db30338 pdcp: drop PDCP control PDUs
this patch adds a check to drop all PDCP control PDUs
in order to prevent handling them as data PDUs.

This could happen when the size exceeded the arbitrary length check.

This should fix #1787
4 years ago
Andre Puschmann c8b4ba885b rename rlc_tx_queue to byte_buffer_queue
this data structure will be used by the PDCP layer as well.
4 years ago
Andre Puschmann a7911f0dab pdcp,rlc: refactor SDU queueing policy
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
4 years ago
Francisco Paisana 1a9c04bf2f use of task scheduler handle in pdcp 4 years ago
Francisco Paisana f0874b780b add radio_base/null classes 4 years ago
Francisco Paisana b4b5cd7cd6 added nr gnb and ue interfaces 5 years ago
Francisco Paisana a2ade9edd1 break down rrc_interface_types.h into multiple files. moved pdcp_config.h to same folder 5 years ago
Andre Puschmann 9307a54512 pdcp: adding enable_security_timed() method
this is an extension to the currently available security
configuration and activation methods provided by PDCP.
The new call allows to specify a Rx and Tx SN after which the
entire security config, i.e. integrity and ciphering, should
be enabled.

this is mainly required for the PDCP entity of the conformance
testing SS but could potentially also be used by the eNB
to enable security for PDCP after sending the SecModeCommand
for example.

the extra call was added to not break the existing API.
5 years ago
Francisco Paisana 30ae2226c1 common interface for stack multiqueue tasks, background tasks and timers 5 years ago
Francisco Paisana 344eaf49ec use logmap in the whole enb and ue 5 years ago
Francisco Paisana 9bde6d442c removed the uneeded locks from the pdcp 5 years ago
Xavier Arteaga e832769ae6 Updated copyright 5 years ago
Pedro Alvarez 96c82b3fc6 Moved PDCP configs to pdcp_config.h. Added `as_security_cfg_t` structure to hold access stratum keys.
Refactored PDCP, RRC and USIM accordingly.
5 years ago
Andre Puschmann 9e113f8b27 pdcp: allow to configure security for rx/tx seperately
previously PDCP security (integrity and ciphering) could only
be enabled for both Rx and Tx at the same time.

this, however, caused an issue during the conformance testing in which,
in TC_8_2_1_1() for example, the eNB sends a SecModeCommand and a
RRC Reconfiguration in the same MAC TB. In this case, the eNB
needs to be able to enable DL security right after sending the SecModeCmd
in order to send the RRCReconfig encrypted. However, enabling UL security needs
to be postponed until after the SecModeComplete is received.

This patch allows to enable PDCP security for rx/tx independently if
that is needed. The default way is like before, enabling it for tx/rx at
the same time.
5 years ago
Pedro Alvarez d98b888ca4 Separating PDCP read_header function from discard_header_function. Starting to add DRB unit test. 5 years ago
Pedro Alvarez 5f39c79bda Moved some more packing functions to base class. 5 years ago
Pedro Alvarez fdd67c3865 Fix issue in integrity check in PDCP SRBs. Moved some helper functions to the pdcp base class 5 years ago
Pedro Alvarez e68956bcf6 Adding discard timer timeout to PDCP config. 5 years ago
Pedro Alvarez d4fb4d8c86 Fixup clang-format in pdcp before PR. 5 years ago
Pedro Alvarez 15613465cf Moving some initialization from init function to constructor in the PDCP entities. 5 years ago
Andre Puschmann 2d126371f6 adopt PDCP NR to use new timer class 5 years ago
Pedro Alvarez b7fdcaabc5 Starting to add reordering timers at PDCP NR entity. Timeout seems to be triggered correctly and pass the SDUs to the upper layers when it expires. First tests passing. 5 years ago
Pedro Alvarez ff15ed5018 Starting to add timers to the NR PDCP. 5 years ago
Pedro Alvarez 6efa944b5e Removed srslte prefix from pdcp_config_t 5 years ago
Pedro Alvarez 0e7c5634f1 Added comment to PDCP maximum SDU size. 5 years ago
Pedro Alvarez dd56d08269 Replaced byte_buffer by array in PDCP base 5 years ago
Pedro Alvarez 491695ab77 Clang-formated PDCP NR PR. 5 years ago
Pedro Alvarez adfe9f950e Fixed issue in computing the SN. Added test for packets received in sequence for PDCP NR. Test is passing now. 5 years ago
Pedro Alvarez d3b6828082 Changed PDCP configuration to explicitly have tx and rx direction. Decrypt on PDCP NR seems fine. 5 years ago
Pedro Alvarez 73e30743d1 Added enum to PDCP config to replace two bools. 5 years ago
Pedro Alvarez 2081b22465 Added PDCP_SN_LEN constants. Added bearer_id and direction back to the pdcp_entity_base. 5 years ago
Pedro Alvarez d7a2721bb0 Adding algorithm to get COUNT for PDCP NR. Added convinience functions to manipulate HFN, SN and COUNT. 5 years ago
Pedro Alvarez bd91678d98 Continuing to split pdcp_entity into pdcp_entity_lte and pdcp_entity_nr 5 years ago
Pedro Alvarez 005d03cb1a Starting to split pdcp_entity into pdcp_entity_lte and pdcp_entity_nr to support NR PDCP 5 years ago