Commit Graph

63 Commits

Author SHA1 Message Date
Pedro Alvarez eb2f5b978f Starting to add metrics to lib/upper/pdcp.cc 2021-02-17 18:40:12 +00:00
Pedro Alvarez b0fe302f8e Added interfaces so the upper layers can trigger the PDCP status report. Added ability to the UE to send Status Report aftre reestablishment. 2021-02-16 13:21:50 +00:00
Pedro Alvarez dd6d6f731d Passing SN provided by upper layers to PDCP entity. Using it to calculate TX_COUNT if passed. 2021-02-12 11:57:36 +00:00
faluco f424f2e113 - Upgraded PDCP classes in lib to use srslog.
- Update tests to new changes.
2021-02-11 14:37:27 +01: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
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.
2021-01-29 17:22:58 +00:00
Andre Puschmann 07d2bc4fe8 change license header to agnostic version with hint to root LICENSE file 2020-12-12 15:59:25 +01:00
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
2020-07-13 17:05:28 +02:00
Francisco Paisana 1a9c04bf2f use of task scheduler handle in pdcp 2020-07-13 11:19:25 +01:00
Francisco Paisana 0259d31b13 fix lack of final in pdcp virtual methods 2020-06-18 23:37:26 +01:00
Francisco Paisana f0874b780b add radio_base/null classes 2020-06-18 23:37:26 +01:00
Pedro Alvarez 9c1a7d2cf1 Removed get_bearer_status in PDCP. Renamed get_state/set_state to
get_bearer_state/set_bearer_state.
2020-06-18 12:13:57 +01:00
Pedro Alvarez 66d4f320e5 Added intereface to set PDCP state after reestablishment. 2020-06-18 12:13:57 +01:00
Pedro Alvarez 33567d81db Added interface to get internal PDCP state. 2020-06-18 12:13:57 +01:00
Francisco Paisana c09f76ed6c unified stack task defer method 2020-04-10 22:30:59 +01:00
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.
2020-04-09 10:55:13 +02:00
Francisco Paisana 30ae2226c1 common interface for stack multiqueue tasks, background tasks and timers 2020-03-31 13:42:06 +01:00
Francisco Paisana 344eaf49ec use logmap in the whole enb and ue 2020-03-25 15:50:30 +00:00
Francisco Paisana 9bde6d442c removed the uneeded locks from the pdcp 2020-03-23 19:58:18 +00:00
Francisco Paisana f3890b2908 use of mutexed cache to store the valid lcids that can be checked from gw thread 2020-03-23 19:58:18 +00:00
Xavier Arteaga e832769ae6 Updated copyright 2020-03-16 11:26:06 +01:00
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.
2020-03-11 09:00:38 +00:00
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.
2020-03-01 18:26:45 +01:00
Andre Puschmann 6ec573987a remove default value for 'blocking' param from pdcp::write_sdu()
there were two defaults and one was shadowing the other. This
commit removes both defaults and uses blocking-mode for RRC
calls to PDCP in the UE. The eNB write_sdu() uses the non-blocking
mode by default. We have to review the eNB's RRC perhaps and use blocking
there too and non-blocking only for data plane
2019-12-29 23:45:37 +01:00
Francisco Paisana 6b4488d5c1 added sending of enb status transfer from SeNB 2019-12-11 17:41:49 +00:00
Pedro Alvarez 15613465cf Moving some initialization from init function to constructor in the PDCP entities. 2019-11-21 13:18:30 +01:00
Francisco Paisana c9d3b61038 added resumable procedures to make RRC and NAS non-blocking 2019-08-08 10:56:54 +02:00
Pedro Alvarez 6efa944b5e Removed srslte prefix from pdcp_config_t 2019-07-30 15:01:50 +02:00
Pedro Alvarez f90b69e5f4 More clang-format for PDCP 2019-07-30 15:01:50 +02:00
Pedro Alvarez 491695ab77 Clang-formated PDCP NR PR. 2019-07-30 15:01:50 +02:00
Pedro Alvarez 457f35699d Reverted back to a single config structure between PDCP NR and PDCP LTE. 2019-07-30 15:01:50 +02:00
Pedro Alvarez 1944bf9a80 Continue to split pdcp_entity_lte and pdcp_entity_nr. Compiling now. 2019-07-30 15:01:50 +02:00
Pedro Alvarez 005d03cb1a Starting to split pdcp_entity into pdcp_entity_lte and pdcp_entity_nr to support NR PDCP 2019-07-30 15:01:50 +02:00
Andre Puschmann 58763fb714 stack: move initialization of log object into ctor
this fixes the issue when the stack is torn down if, for example,
the radio couldn't be loaded correctly. it will hence call stop() on all stack
components which are not initialzized yet, and logging therefore doesn't work.
the log object is know during contruction time and therefore can be passed
in as soon as possible.
2019-06-27 14:51:33 +02:00
Andre Puschmann e0a28cf4c0 simplify PDCP init and also bypass it for SRB0 on eNB 2019-06-21 15:49:46 +02:00
Andre Puschmann 218f136254 remove default PDCP entity for SRB0 2019-06-21 15:49:46 +02:00
Ismael Gomez 14b526f2aa Add PDCP per-bearer reestablish 2019-06-06 14:34:25 +02:00
Francisco Paisana 3bedc93ba5 added _t to unique_byte_buffer type 2019-05-16 12:35:01 +02:00
Francisco Paisana f469e2178b replaced byte_buffer_t allocated by the buffer pool for unique_byte_buffer which is safer and easier to use 2019-05-16 12:35:01 +02:00
Francisco Paisana 0976ea6f27 created a unique byte buffer that automatically deallocates 2019-05-16 12:35:01 +02:00
Andre Puschmann 4b01a2e4a0 update copyright notice 2019-04-29 09:20:02 +02:00
David Rupprecht eb3a83ac45 User Plane key in configuration interface 2019-04-11 21:38:01 +02:00
Andre Puschmann 27459bf706 add API to change LCID of PDCP bearers 2018-09-17 13:10:44 +02:00
Andre Puschmann f56592b0fe add getter for PDCP ul/dl counter 2018-08-08 16:26:32 +02:00
Andre Puschmann 91492b87ef add del_bearer for RLC/PDCP 2018-08-06 13:17:51 +02:00
Andre Puschmann ee5b055829 rename pdcp function for GW to is_lcid_enabled() 2018-07-25 15:09:19 +02:00
Andre Puschmann b8438e9cc3 extend PDCP interface to allow non-blocking write of SDUs 2018-07-24 15:49:09 +02:00
Andre Puschmann 47a8b1343f add rwlock to PDCP 2018-07-17 15:27:04 +02:00
Andre Puschmann 93c11e4416 turn PDCP array into map 2018-07-17 12:50:10 +02:00
yagoda 49c3578f64 introducing embms support in common upper layer functions 2018-05-15 16:57:23 +02:00