diff --git a/lib/include/srslte/interfaces/ue_interfaces.h b/lib/include/srslte/interfaces/ue_interfaces.h index 4259bab2e..7e03d7723 100644 --- a/lib/include/srslte/interfaces/ue_interfaces.h +++ b/lib/include/srslte/interfaces/ue_interfaces.h @@ -239,6 +239,7 @@ class pdcp_interface_rrc { public: virtual void reestablish() = 0; + virtual void reestablish(uint32_t lcid) = 0; virtual void reset() = 0; virtual void write_sdu(uint32_t lcid, srslte::unique_byte_buffer_t sdu, bool blocking = true) = 0; virtual void add_bearer(uint32_t lcid, srslte::srslte_pdcp_config_t cnfg = srslte::srslte_pdcp_config_t()) = 0; diff --git a/lib/include/srslte/upper/pdcp.h b/lib/include/srslte/upper/pdcp.h index ec0ff9800..fd8975047 100644 --- a/lib/include/srslte/upper/pdcp.h +++ b/lib/include/srslte/upper/pdcp.h @@ -50,6 +50,7 @@ public: // RRC interface void reestablish(); + void reestablish(uint32_t lcid); void reset(); void write_sdu(uint32_t lcid, unique_byte_buffer_t sdu, bool blocking = true); void write_sdu_mch(uint32_t lcid, unique_byte_buffer_t sdu); diff --git a/lib/src/upper/pdcp.cc b/lib/src/upper/pdcp.cc index d6bd9fa5b..865e382f5 100644 --- a/lib/src/upper/pdcp.cc +++ b/lib/src/upper/pdcp.cc @@ -88,6 +88,15 @@ void pdcp::reestablish() { pthread_rwlock_unlock(&rwlock); } +void pdcp::reestablish(uint32_t lcid) +{ + pthread_rwlock_rdlock(&rwlock); + if (valid_lcid(lcid)) { + pdcp_array.at(lcid)->reestablish(); + } + pthread_rwlock_unlock(&rwlock); +} + void pdcp::reset() { // destroy all bearers